diff options
219 files changed, 45024 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c90c489 --- /dev/null +++ b/.gitignore @@ -0,0 +1,51 @@ +*.class +.*.swp +.beamer +# Package Files # +*.jar +*.war +*.ear + +# Intellij Files & Dir # +*.iml +*.ipr +*.iws +atlassian-ide-plugin.xml +out/ +.DS_Store +./lib/ +.idea + +# Gradle Files & Dir # +build/ +.gradle/ +.stickyStorage +.build/ +target/ + +# Node log +npm-*.log +logs/ +.nux_enabled +.nux_dashboard + +# Singlenode and test data files. +/templates/ +/artifacts/ +/data/ +/data-fabric-tests/data/ + +# Checkstyle report +examples/checkstyle_report.xml + +# Examples Stuff +dependency-reduced-pom.xml + +# generated by docs build +*.pyc + +#black duck scanner results +*_bdio.jsonld +blackDuckHubProjectName.txt +blackDuckHubProjectVersionName.txt + diff --git a/.gitreview b/.gitreview new file mode 100644 index 0000000..c5db8b2 --- /dev/null +++ b/.gitreview @@ -0,0 +1,4 @@ +[gerrit] +host=gerrit.openecomp.org +port=29418 +project=dcae/apod/analytics.git diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..7255bc3 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,19 @@ +/* + * ============LICENSE_START========================================== + * =================================================================== + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * =================================================================== + * Licensed 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. + * ============LICENSE_END============================================ + * ECOMP and OpenECOMP are trademarks and service marks of AT&T Intellectual Property. + */ diff --git a/README.md b/README.md new file mode 100644 index 0000000..71d62ca --- /dev/null +++ b/README.md @@ -0,0 +1,103 @@ +DCAE Analytics +====================================== + +This is the repository for CDAP analytics running on the Analytics Platform for Open DCAE (APOD). Currently this repository contains the TCA Hi Lo CDAP application. + +### Build Instructions + +This project is organized as a mvn project for a jar package. + +``` +git clone ssh://git@<repo-address>:dcae-apod/dcae-analytics.git +mvn clean install +``` + +### Distribution of built artifacts + +We use OpenECOMP Nexus as a distribution server. + +``` +<following a successful build> + +$ export MAVEN_OPTS="-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true" +$ mvn deploy +``` + +### Debian Packaging + +The jar file is bundled into a Debian package and sent to the OpenECOMP Nexus server where +it will be picked up and installed by the DCAE Controller. Following is the process to +create the Debian package and upload it to the OpenECOMP Nexus distribution server. + +<following a successful build and deploy> + +#### Set up the packaging environment +1. Extract the build tools and config file +The build tools and configuration files for all of APOD are in the dcae-apod-buildtools repository which is part of the dcae-apod Project. +``` +$ git clone ssh://git@<repo-address>:dcae-apod/dcae-apod-buildtools.git +``` +From this repo you will need: + - The package script from the scripts directory + - The package-dcae-analytics-tca.json file from the configs directory + +2. Set up the packaging environment +The packaging script requires directories named stage and output. The stage directory will contain all the directories and files that will packaged. The output directory is where the Debian file will be put. + +The package-dcae-analytics-tca.json configuration file contains the parameters that the package script needs in order to create the Debian package. + +NOTE: The user should only set the variable between the "User sets these" block. The Debian file MUST have a specific name in order for the DCAE controller to find it an install it. +``` +########### User sets these ############### +WORK_DIR=/path/to/your/work/dir/ # This is the path of where you will do your packaging +BUILD_TOOLS_DIR=/path/to/dcae-apod-buildtools # This is the path to dcae-apod-buildtools directory +TCA_JAR_FILE=/path/to/tca/jar/file/dcae-analytics-tca-VERSION.jar # This is the dcae-analytics-tca jar file that is being packaged +OPENECOMP_NEXUS_RAW=https://xx.xx.xx:8443/repository/raw # This is the URL of the OpenECOMP raw repository in the Nexus distribution server +OPENECOMP_NEXUS_USER=user-name +OPENECOMP_NEXUS_PASSWORD=password +########### End of user set variables ############### + +STAGE_DIR=${WORK_DIR}/package +OUTPUT_DIR=${WORK_DIR}/package/output + +DATE_STAMP="$(date +"%Y%m%d%H%M%S")" +PACKAGE_BUILD_NUMBER="LATEST" +PACKAGE_NAME_APPLICATION=$(cat ${BUILD_TOOLS_DIR}/dcae-apod-buildtools/configs/package-dcae-analytics-tca.json | python -c 'import json,sys;print json.load(sys.stdin)["applicationName"]') +PACKAGE_NAME_VERSION=$(cat ${BUILD_TOOLS_DIR}/dcae-apod-buildtools/configs/package-dcae-analytics-tca.json | python -c 'import json,sys;print json.load(sys.stdin)["version"]') +PACKAGE_GROUP_ID=$(cat ${BUILD_TOOLS_DIR}/dcae-apod-buildtools/configs/package-dcae-analytics-tca.json | python -c 'import json,sys;print json.load(sys.stdin)["groupId"]') + +OUTPUT_FILE=${PACKAGE_NAME_APPLICATION}"_"${PACKAGE_NAME_VERSION}"-"${PACKAGE_BUILD_NUMBER}".deb" +OUTPUT_FILE_DATE_STAMPED=${PACKAGE_NAME_APPLICATION}"_"${PACKAGE_NAME_VERSION}"-"${DATE_STAMP}".deb" + +rm -rf ${STAGE_DIR} +rm -rf ${OUTPUT_DIR} +mkdir -p ${STAGE_DIR}/stage/opt/app/cdap-apps +mkdir -p ${OUTPUT_DIR} + +echo "Copying jar file to stage" +cp $TCA_JAR_FILE ${STAGE_DIR}/stage/opt/app/cdap-apps + +echo "Copying json config file to stage" +cp ${BUILD_TOOLS_DIR}/dcae-apod-buildtools/configs/package-dcae-analytics-tca.json ${STAGE_DIR}/package.json +``` +#### Run the script to create the Debian package +The package script will package what is in the stage directory as well as create a debian control file, change log, copyright file, md5checksums file and a postint file with any post install steps that need to be run as part of the installation. + +The package script will put the Debian file that is created in ${OUTPUT_DIR} +``` +echo "Creating debian package" +${BUILD_DIR}/dcae-apod-buildtools/scripts/package -b debian -d ${STAGE_DIR} -o ${OUTPUT_DIR} -y package.json -B ${PACKAGE_BUILD_NUMBER} -v +``` +#### Push the package to the OpenECOMP Nexus distribution server +<P>The Debian package that is created needs to be pushed up to the OpenECOMP Nexus distribution server where the DCAE Controller will pick it up an install it. +<P>The controller needs the debian packaged named dcae-analytics-tca_17.01.0-LATEST.deb so it can find and deploy it. In order to have a copy of each file built a copy of dcae-analytics-tca_17.01.0-LATEST.deb will be made and it will have a date stamp and build number on it. For example: dcae-analytics-tca_17.01.0-YYYYMMDDHHMMSS-XXX.deb Both files will then be uploaded to the repository. + +``` +cp ${OUTPUT_DIR}/${OUTPUT_FILE} ${OUTPUT_DIR}/${OUTPUT_FILE_DATE_STAMPED} + +SEND_TO=${OPENECOMP_NEXUS_RAW}"/org.openecomp.dcae/deb-snapshots/"${PACKAGE_GROUP_ID}"/"${OUTPUT_FILE} +curl -vk --user ${OPENECOMP_NEXUS_USER}:${OPENECOMP_NEXUS_PASSWORD} --upload-file ${OUTPUT_DIR}/${OUTPUT_FILE} ${SEND_TO} + +SEND_TO=${OPENECOMP_NEXUS_RAW}"/org.openecomp.dcae/deb-snapshots/"${PACKAGE_GROUP_ID}"/"${OUTPUT_FILE_DATE_STAMPED} +curl -vk --user ${OPENECOMP_NEXUS_USER}:${OPENECOMP_NEXUS_PASSWORD} --upload-file ${OUTPUT_DIR}/${OUTPUT_FILE_DATE_STAMPED} ${SEND_TO} +``` diff --git a/checkstyle.xml b/checkstyle.xml new file mode 100644 index 0000000..54ee56c --- /dev/null +++ b/checkstyle.xml @@ -0,0 +1,410 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + ~ ============LICENSE_START========================================================= + ~ dcae-analytics + ~ ================================================================================ + ~ Copyright © 2017 AT&T Intellectual Property. All rights reserved. + ~ ================================================================================ + ~ Licensed 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. + ~ ============LICENSE_END========================================================= + --> + +<!DOCTYPE module PUBLIC + "-//Puppy Crawl//DTD Check Configuration 1.3//EN" + "http://www.puppycrawl.com/dtds/configuration_1_3.dtd"> + +<!-- This is a checkstyle configuration file. For descriptions of +what the following rules do, please see the checkstyle configuration +page at http://checkstyle.sourceforge.net/config.html --> + +<module name="Checker"> + + <module name="FileTabCharacter"> + <property name="severity" value="error"/> + <!-- Checks that there are no tab characters in the file. --> + </module> + + <!-- + + LENGTH CHECKS FOR FILES + + --> + + <module name="FileLength"> + <property name="max" value="3000"/> + <property name="severity" value="warning"/> + </module> + + + <module name="NewlineAtEndOfFile"> + <property name="lineSeparator" value="lf"/> + </module> + + <module name="RegexpSingleline"> + <!-- Checks that FIXME is not used in comments. TODO is preferred. --> + <property name="format" value="((//.*)|(\*.*))FIXME"/> + <property name="message" + value='TODO is preferred to FIXME. e.g. "TODO: (ENG-123) - Refactor when v2 is released."'/> + </module> + + <module name="RegexpSingleline"> + <!-- Checks that TODOs are named with some basic formatting. Checks for the following pattern TODO: ( + --> + <property name="format" value="((//.*)|(\*.*))TODO[^: (]"/> + <property name="message" + value='All TODOs should be named. e.g. "TODO: (ENG-123) - Refactor when v2 is released."'/> + </module> + + <module name="JavadocPackage"> + <!-- Checks that each Java package has a Javadoc file used for commenting. + Only allows a package-info.java, not package.html. --> + <property name="severity" value="error"/> + </module> + + <!-- All Java AST specific tests live under TreeWalker module. --> + <module name="TreeWalker"> + + <!-- required for SupressionCommentFilter and SuppressWithNearbyCommentFilter --> + <module name="FileContentsHolder"/> + + <!-- + + IMPORT CHECKS + + --> + + <module name="AvoidStarImport"> + <property name="allowClassImports" value="false"/> + <property name="severity" value="error"/> + </module> + + <module name="RedundantImport"> + <!-- Checks for redundant import statements. --> + <property name="severity" value="error"/> + </module> + + <module name="ImportOrder"> + <!-- Checks for out of order import statements. --> + <property name="severity" value="error"/> + <property name="ordered" value="true"/> + <property name="groups" value="/([^j]|.[^a]|..[^v]|...[^a])/,/^javax?\./"/> + <!-- This ensures that static imports go to the end. --> + <property name="option" value="bottom"/> + <property name="tokens" value="STATIC_IMPORT, IMPORT"/> + </module> + + <module name="IllegalImport"> + <property name="illegalPkgs" value="junit.framework"/> + </module> + + <!-- + + METHOD LENGTH CHECKS + + --> + + <module name="MethodLength"> + <property name="tokens" value="METHOD_DEF"/> + <property name="max" value="300"/> + <property name="countEmpty" value="false"/> + <property name="severity" value="warning"/> + </module> + + <!-- + + JAVADOC CHECKS + + --> + + <!-- Checks for Javadoc comments. --> + <!-- See http://checkstyle.sf.net/config_javadoc.html --> + <module name="JavadocMethod"> + <property name="scope" value="protected"/> + <property name="severity" value="error"/> + <property name="allowMissingJavadoc" value="true"/> + <property name="allowMissingParamTags" value="true"/> + <property name="allowMissingReturnTag" value="true"/> + <property name="allowMissingThrowsTags" value="true"/> + <property name="allowThrowsTagsForSubclasses" value="true"/> + <property name="allowUndeclaredRTE" value="true"/> + </module> + + <module name="JavadocType"> + <property name="scope" value="protected"/> + <property name="severity" value="error"/> + </module> + + <module name="JavadocStyle"> + <property name="severity" value="error"/> + </module> + + <!-- + + NAMING CHECKS + + --> + + <!-- Item 38 - Adhere to generally accepted naming conventions --> + + <module name="PackageName"> + <!-- Validates identifiers for package names against the + supplied expression. --> + <!-- Here the default checkstyle rule restricts package name parts to + seven characters, this is not in line with common practice at Google. + --> + <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]{1,})*$"/> + <property name="severity" value="error"/> + </module> + + <module name="TypeNameCheck"> + <!-- Validates static, final fields against the + expression "^[A-Z][a-zA-Z0-9]*$". --> + <metadata name="altname" value="TypeName"/> + <property name="severity" value="error"/> + </module> + + <module name="ConstantNameCheck"> + <!-- Validates non-private, static, final fields against the supplied + public/package final fields "^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$". --> + <metadata name="altname" value="ConstantName"/> + <property name="applyToPublic" value="true"/> + <property name="applyToProtected" value="true"/> + <property name="applyToPackage" value="true"/> + <property name="applyToPrivate" value="false"/> + <property name="format" value="^([A-Z][A-Z0-9]*(_[A-Z0-9]+)*|FLAG_.*)$"/> + <message key="name.invalidPattern" + value="Variable ''{0}'' should be in ALL_CAPS (if it is a constant) or be private (otherwise)."/> + <property name="severity" value="error"/> + </module> + + <module name="StaticVariableNameCheck"> + <!-- Validates static, non-final fields against the supplied + expression "^[a-z][a-zA-Z0-9]*_?$". --> + <metadata name="altname" value="StaticVariableName"/> + <property name="applyToPublic" value="true"/> + <property name="applyToProtected" value="true"/> + <property name="applyToPackage" value="true"/> + <property name="applyToPrivate" value="true"/> + <property name="format" value="^[a-z][a-zA-Z0-9]*_?$"/> + <property name="severity" value="error"/> + </module> + + <module name="MemberNameCheck"> + <!-- Validates non-static members against the supplied expression. --> + <metadata name="altname" value="MemberName"/> + <property name="applyToPublic" value="true"/> + <property name="applyToProtected" value="true"/> + <property name="applyToPackage" value="true"/> + <property name="applyToPrivate" value="true"/> + <property name="format" value="^[a-z][a-zA-Z0-9]*$"/> + <property name="severity" value="error"/> + </module> + + <module name="MethodNameCheck"> + <!-- Validates identifiers for method names. --> + <metadata name="altname" value="MethodName"/> + <property name="format" value="^[a-z][a-zA-Z0-9]*(_[a-zA-Z0-9]+)*$"/> + <property name="severity" value="error"/> + </module> + + <module name="ParameterName"> + <!-- Validates identifiers for method parameters against the + expression "^[a-z][a-zA-Z0-9]*$". --> + <property name="severity" value="error"/> + </module> + + <module name="LocalFinalVariableName"> + <!-- Validates identifiers for local final variables against the + expression "^[a-z][a-zA-Z0-9]*$". --> + <property name="severity" value="error"/> + </module> + + <module name="LocalVariableName"> + <!-- Validates identifiers for local variables against the + expression "^[a-z][a-zA-Z0-9]*$". --> + <property name="severity" value="error"/> + </module> + + + <!-- + + LENGTH and CODING CHECKS + + --> + + <module name="LineLength"> + <!-- Checks if a line is too long. --> + <property name="max" value="120" default="120"/> + <property name="severity" value="error"/> + + <!-- + The default ignore pattern exempts the following elements: + - import statements + - long URLs inside comments + --> + + <property name="ignorePattern" + value="${com.puppycrawl.tools.checkstyle.checks.sizes.LineLength.ignorePattern}" + default="^(package .*;\s*)|(import .*;\s*)|( *\* *https?://.*)$"/> + </module> + + <module name="LeftCurly"> + <!-- Checks for placement of the left curly brace ('{'). --> + <property name="severity" value="error"/> + </module> + + <module name="RightCurly"> + <!-- Checks right curlies on CATCH, ELSE, and TRY blocks are on + the same line. e.g., the following example is fine: + <pre> + if { + ... + } else + </pre> + --> + <!-- This next example is not fine: + <pre> + if { + ... + } + else + </pre> + --> + <property name="option" value="same"/> + <property name="severity" value="error"/> + </module> + + <!-- Checks for braces around if and else blocks --> + <module name="NeedBraces"> + <property name="severity" value="error"/> + <property name="tokens" value="LITERAL_IF, LITERAL_ELSE, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO"/> + </module> + + <module name="UpperEll"> + <!-- Checks that long constants are defined with an upper ell.--> + <property name="severity" value="error"/> + </module> + + <module name="FallThrough"> + <!-- Warn about falling through to the next case statement. Similar to + javac -Xlint:fallthrough, but the check is suppressed if a single-line comment + on the last non-blank line preceding the fallen-into case contains 'fall through' (or + some other variants which we don't publicized to promote consistency). + --> + <property name="reliefPattern" + value="fall through|Fall through|fallthru|Fallthru|falls through|Falls through|fallthrough|Fallthrough|No break|NO break|no break|continue on"/> + <property name="severity" value="error"/> + </module> + + + <!-- + + MODIFIERS CHECKS + + --> + + <module name="ModifierOrder"> + <!-- Warn if modifier order is inconsistent with JLS3 8.1.1, 8.3.1, and + 8.4.3. The prescribed order is: + public, protected, private, abstract, static, final, transient, volatile, + synchronized, native, strictfp + --> + </module> + + <module name="RedundantModifier"> + <!-- Checks for redundant modifiers in: + - interface and annotation definitions, + - the final modifier on methods of final classes, and + - inner interface declarations that are declared as static. + --> + </module> + + + <!-- + + WHITESPACE CHECKS + + --> + <module name="GenericWhitespace"/> + + <module name="WhitespaceAround"> + <!-- Checks that various tokens are surrounded by whitespace. + This includes most binary operators and keywords followed + by regular or curly braces. + --> + <property name="tokens" value="ASSIGN, BAND, BAND_ASSIGN, BOR, + BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, + EQUAL, GE, GT, LAND, LCURLY, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE, + LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN, + LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS, + MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION, + SL, SLIST, SL_ASSIGN, SR_ASSIGN, STAR, STAR_ASSIGN"/> + <property name="allowEmptyConstructors" value="true"/> + <property name="allowEmptyMethods" value="true"/> + <property name="severity" value="error"/> + </module> + + <module name="WhitespaceAfter"> + <!-- Checks that commas, semicolons and typecasts are followed by + whitespace. + --> + <property name="tokens" value="COMMA, SEMI, TYPECAST"/> + <property name="severity" value="error"/> + </module> + + <module name="NoWhitespaceAfter"> + <!-- Checks that there is no whitespace after various unary operators. + Linebreaks are allowed. + --> + <property name="tokens" value="BNOT, DEC, DOT, INC, LNOT, UNARY_MINUS, + UNARY_PLUS"/> + <property name="allowLineBreaks" value="true"/> + <property name="severity" value="error"/> + </module> + + <module name="NoWhitespaceBefore"> + <!-- Checks that there is no whitespace before various unary operators. + Linebreaks are allowed. + --> + <property name="tokens" value="SEMI, DOT, POST_DEC, POST_INC"/> + <property name="allowLineBreaks" value="true"/> + <property name="severity" value="error"/> + </module> + + <module name="ParenPad"> + <!-- Checks that there is no whitespace before close parens or after + open parens. + --> + <property name="severity" value="error"/> + </module> + + </module> + + <!-- + Optional suppression filter. It is optional because when running with Maven, it should be the + checkstyle plugin who provides it. It is only used when this file is used in IntelliJ. + --> + <module name="SuppressionFilter"> + <property name="file" value="suppressions.xml"/> + <property name="optional" value="true"/> + </module> + + <module name="SuppressionCommentFilter"> + <property name="offCommentFormat" value="CHECKSTYLE OFF: (.+)"/> + <property name="onCommentFormat" value="CHECKSTYLE ON"/> + <property name="checkFormat" value="Javadoc.*"/> + <property name="messageFormat" value="$1"/> + </module> + +</module> diff --git a/cpd-exclude.properties b/cpd-exclude.properties new file mode 100644 index 0000000..52abdf9 --- /dev/null +++ b/cpd-exclude.properties @@ -0,0 +1,26 @@ + +# +# ============LICENSE_START========================================================= +# dcae-analytics +# ================================================================================ +# Copyright © 2017 AT&T Intellectual Property. All rights reserved. +# ================================================================================ +# Licensed 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. +# ============LICENSE_END========================================================= +# + +# List comma separated fully qualified names of classes that can be excluded for CPD (COPY-PASTE-DETECTOR) +# Builders for DMaaP MR Configs can have redundant code as they are used as temp place holders for building Immutable +# Configs +org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRPublisherConfig,org.openecomp.dcae.analytics.dmaap.domain.config +.DMaaPMRSubscriberConfig diff --git a/dcae-analytics-common/pom.xml b/dcae-analytics-common/pom.xml new file mode 100644 index 0000000..1c58693 --- /dev/null +++ b/dcae-analytics-common/pom.xml @@ -0,0 +1,120 @@ +<!-- + ~ ============LICENSE_START========================================================= + ~ dcae-analytics + ~ ================================================================================ + ~ Copyright © 2017 AT&T Intellectual Property. All rights reserved. + ~ ================================================================================ + ~ Licensed 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. + ~ ================================================================================ + ~ ECOMP and OpenECOMP are trademarks and service marks of AT&T Intellectual Property. + ~ ============LICENSE_END========================================================= + --> + +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.openecomp.dcae.analytics</groupId> + <artifactId>dcae-analytics</artifactId> + <version>1.0-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + + <artifactId>dcae-analytics-common</artifactId> + <packaging>jar</packaging> + + <!-- THIS MODULE CONTAINS CODE COMMON FOR ALL DCAE ANALYTICS MODULES --> + <name>DCAE Analytics Common</name> + <description>Contains Components common to all DCAE Analytics Modules</description> + + + <properties> + <main.basedir>${project.parent.basedir}</main.basedir> + </properties> + + <dependencies> + + <!-- DCAE PROJECT DEPENDENCIES --> + <dependency> + <groupId>org.openecomp.dcae.analytics</groupId> + <artifactId>dcae-analytics-model</artifactId> + <version>1.0-SNAPSHOT</version> + </dependency> + + <!-- CDAP --> + <dependency> + <groupId>co.cask.cdap</groupId> + <artifactId>cdap-api</artifactId> + </dependency> + + <!-- LOGGING --> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </dependency> + + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-core</artifactId> + </dependency> + + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-classic</artifactId> + </dependency> + + <!-- UTILITIES --> + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + </dependency> + <dependency> + <groupId>com.google.code.findbugs</groupId> + <artifactId>jsr305</artifactId> + </dependency> + <dependency> + <groupId>com.google.code.findbugs</groupId> + <artifactId>annotations</artifactId> + </dependency> + + + <!-- DEPENDENCY INJECTION --> + <dependency> + <groupId>com.google.inject</groupId> + <artifactId>guice</artifactId> + </dependency> + <dependency> + <groupId>com.google.inject.extensions</groupId> + <artifactId>guice-assistedinject</artifactId> + </dependency> + <dependency> + <groupId>com.google.inject.extensions</groupId> + <artifactId>guice-multibindings</artifactId> + </dependency> + + + <!-- TEST DEPENDENCIES --> + <dependency> + <groupId>org.openecomp.dcae.analytics</groupId> + <artifactId>dcae-analytics-test</artifactId> + <version>1.0-SNAPSHOT</version> + <scope>test</scope> + </dependency> + + + </dependencies> + +</project> diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/AnalyticsConstants.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/AnalyticsConstants.java new file mode 100644 index 0000000..6c51069 --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/AnalyticsConstants.java @@ -0,0 +1,134 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common; + +/** + * Contains static variable for all DCAE Components. + * + * @author Rajiv Singla. Creation Date: 10/21/2016. + */ +public abstract class AnalyticsConstants { + + + // =============== Common Constants for all DCAE Analytics Modules ==================== // + + + // =============== DMaaP Constants for all DCAE Analytics Modules ==================== // + + public static final String DMAAP_URI_PATH_PREFIX = "/events/"; + public static final String DMAAP_GROUP_PREFIX = "OpenDCAE-"; + + // ================== DMaaP MR Constants ============================== // + // Publisher Constants + public static final int DEFAULT_PUBLISHER_MAX_BATCH_SIZE = 100; + public static final int DEFAULT_PUBLISHER_MAX_RECOVERY_QUEUE_SIZE = 100000; + public static final int PUBLISHER_MAX_FLUSH_RETRIES_ON_CLOSE = 5; + public static final int PUBLISHER_DELAY_MS_ON_RETRIES_ON_CLOSE = 5000; + // Subscriber Constants + public static final int DEFAULT_SUBSCRIBER_TIMEOUT_MS = -1; + public static final int DEFAULT_SUBSCRIBER_MESSAGE_LIMIT = -1; + public static final String DEFAULT_SUBSCRIBER_GROUP_PREFIX = DMAAP_GROUP_PREFIX + "DMaaPSub-"; + public static final String SUBSCRIBER_TIMEOUT_QUERY_PARAM_NAME = "timeout"; + public static final String SUBSCRIBER_MSG_LIMIT_QUERY_PARAM_NAME = "limit"; + + + // ================== TCA Constants ============================== // + + // Default subscriber polling interval + public static final Integer TCA_DEFAULT_SUBSCRIBER_POLLING_INTERVAL_MS = 30000; + + // Default publisher polling interval + public static final Integer TCA_DEFAULT_PUBLISHER_POLLING_INTERVAL_MS = 30000; + + // Default publisher max batch queue size determines the minimum number of messages that need to be published in + // batch mode + public static final Integer TCA_DEFAULT_PUBLISHER_MAX_BATCH_QUEUE_SIZE = 10; + + // Default publisher max recovery queue size determines max number of messages can be cached in memory + // in case publisher is not responding + public static final Integer TCA_DEFAULT_PUBLISHER_MAX_RECOVERY_QUEUE_SIZE = 100000; + + // Default interval during which TCA DMaaP Worker checks if scheduler is shut down + public static final Integer TCA_DEFAULT_WORKER_SHUTDOWN_CHECK_INTERVAL_MS = 10000; + + // ***** TCA Quartz Scheduler Settings ******// + + public static final String TCA_QUARTZ_SUBSCRIBER_PROPERTIES_FILE_NAME = "quartz-subscriber.properties"; + + public static final String TCA_QUARTZ_PUBLISHER_PROPERTIES_FILE_NAME = "quartz-publisher.properties"; + + // TCA Quartz Group Settings + public static final String TCA_QUARTZ_GROUP_NAME = "TCAQuartzGroup"; + // TCA Quartz Trigger Settings + public static final String TCA_DMAAP_SUBSCRIBER_QUARTZ_TRIGGER_NAME = "TCADMaaPSubscriberTrigger"; + public static final String TCA_DMAAP_PUBLISHER_QUARTZ_TRIGGER_NAME = "TCADMaaPPublisherTrigger"; + + // TCA Quartz DMaaP Subscriber Job Settings + public static final String TCA_DMAAP_SUBSCRIBER_QUARTZ_JOB_NAME = "TCADMaaPSubscriberJob"; + public static final String TCA_DMAAP_PUBLISHER_QUARTZ_JOB_NAME = "TCADMaaPPublisherJob"; + + // TCA Quartz Publisher and Subscriber Job Parameters + // Common Job parameters for both Publisher and Subscriber + public static final String WORKER_CONTEXT_VARIABLE_NAME = "WORKER_CONTEXT"; + public static final String DMAAP_METRICS_VARIABLE_NAME = "DMAAP_METRICS"; + // TCA Quartz DMaaP Subscriber Job Parameter Settings + public static final String CDAP_STREAM_VARIABLE_NAME = "CDAP_STREAM_NAME"; + public static final String DMAAP_SUBSCRIBER_VARIABLE_NAME = "DMAAP_SUBSCRIBER"; + // TCA Quartz DMaaP Publisher Job Parameter Settings + public static final String CDAP_ALERTS_TABLE_VARIABLE_NAME = "CDAP_TCA_ALERTS_TABLE_NAME"; + public static final String DMAAP_PUBLISHER_VARIABLE_NAME = "DMAAP_PUBLISHER"; + + // TCA VES Response Constants + public static final String TCA_VES_RESPONSE_TARGET_TYPE = "VNF"; + public static final String TCA_VES_RESPONSE_TARGET = "generic-vnf.vnf-id"; + public static final String TCA_VES_RESPONSE_FROM = "DCAE"; + public static final String TCA_VES_RESPONSE_CLOSED_LOOP_EVENT_STATUS = "ONSET"; + + // TCA VES Response Constants for vLoadBalancer + public static final String LOAD_BALANCER_FUNCTIONAL_ROLE = "vLoadBalancer"; + public static final String LOAD_BALANCER_TCA_VES_RESPONSE_TARGET_TYPE = "VM"; + public static final String LOAD_BALANCER_TCA_VES_RESPONSE_TARGET = "vserver.vserver-name"; + + // TCA VES Message Router Partition Key + public static final String TCA_VES_MESSAGE_ROUTER_PARTITION_KEY = "VESMessageHash"; + + /** + * Default Number of instances for Threshold violation calculator flowlet + */ + public static final Integer TCA_DEFAULT_THRESHOLD_CALCULATOR_FLOWLET_INSTANCES = 2; + + /** + * Default TTL for TCA VES Message status table which contain status of all messages processed by TCA + */ + public static final Integer TCA_DEFAULT_VES_MESSAGE_STATUS_TTL_TABLE = 60 * 60 * 24 * 10; // 10 Days + + /** + * Default TTL for TCA VES Alerts table which contains alerts that can be send to downstream systems + */ + public static final Integer TCA_DEFAULT_VES_ALERTS_TTL_TABLE = 60 * 60 * 24 * 20; // 20 Days + + + // TCA Policy Runtime Argument Paths + public static final String TCA_POLICY_DELIMITER = "."; + public static final String TCA_POLICY_DOMAIN_PATH = "domain"; + public static final String TCA_POLICY_METRICS_PER_FUNCTIONAL_ROLE_PATH = "configuration.metricsPerFunctionalRole"; + public static final String TCA_POLICY_THRESHOLDS_PATH_POSTFIX = "thresholds"; +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/CDAPComponentsConstants.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/CDAPComponentsConstants.java new file mode 100644 index 0000000..50aad3c --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/CDAPComponentsConstants.java @@ -0,0 +1,196 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common; + +/** + * Contains static constant variable names and values of all DCAE CDAP Components for + * e.g. app names, app descriptions, streams, datasets, flows, flowlets, workers, outputs etc. + * + * <p> + * A strict naming convention must be followed for variable names for CDAP Components names for proper + * identification of CDAP Component variable purpose and function. A custom configuration settings can be + * generated for app + * deployment purposes based on variable naming conventions. + * + * The variable names should have 4 parts separated by an underscore: + * <ul> + * <li>Name of the DCAE sub module (e.g. TCA) to which variable is applicable</li> + * <li>Information about variable name: + * <ul> + * <li>FIXED - if variable value is fixed and cannot be changed</li> + * <li>DEFAULT - if variable name is default name and can be changed by cdap settings file + * when application is created</li> + * </ul> + * </li> + * <li>Actual Descriptive name about the CDAP component (may contain underscrores) </li> + * <li>CDAP component type e.g STREAM, DATASET, APP, FLOW, FLOWLET, OUTPUT</li> + * </ul> + * + * <p>e.g TCA_DEFAULT_DMAAP_INPUT_STREAM</p> + * + * <p><strong>RegEx Format (DCAE MODULE NAME)_(FIXED|DEFAULT)_(VARIABLE NAME)_(CDAP COMPONENT TYPE)</strong></p> + * + * @author Rajiv Singla. Creation Date: 10/24/2016. + */ +public abstract class CDAPComponentsConstants { + + // =============== Common Module Constants ==================== // + + /** + * Default DCAE App Name. It should be overriden by sub modules + */ + public static final String COMMON_DEFAULT_DCAE_CDAP_NAME_APP = "DCAE_ANALYTICS_GENERIC_APP"; + + /** + * Default DCAE App Description. It should be overriden by sub modules + */ + public static final String COMMON_DEFAULT_DCAE_CDAP_DESCRIPTION_APP = "DCAE ANALYTICS GENERIC APP DESCRIPTION"; + + // =============== TCA Module Constants ==================== // + + /** + * Default TCA application name if application name is not provided from startup configuration + */ + public static final String TCA_DEFAULT_NAME_APP = "dcae-tca"; + + /** + * Default TCA application description if not provided from startup configuration + */ + public static final String TCA_DEFAULT_DESCRIPTION_APP = "DCAE Analytics Threshold Crossing Alert Application"; + + /** + * Default TCA DMaaP Subscriber output stream name if not provided from startup configuration + */ + public static final String TCA_DEFAULT_SUBSCRIBER_OUTPUT_NAME_STREAM = "TCASubscriberOutputStream"; + + + /** + * Fixed TCA DMaaP Subscriber output stream description + */ + public static final String TCA_FIXED_SUBSCRIBER_OUTPUT_DESCRIPTION_STREAM = + "Stream which contains all message from VES Collector DMaaP MR topic"; + + + /** + * Fixed Name of TCA DMaaP Subscriber Worker - which will be fetching DMaaP Messages posting them to CDAP stream + */ + public static final String TCA_FIXED_DMAAP_SUBSCRIBER_WORKER = "TCADMaaPMRSubscriberWorker"; + + /** + * Fixed Description of TCA DMaaP Subscriber Worker + */ + public static final String TCA_FIXED_DMAAP_SUBSCRIBER_DESCRIPTION_WORKER = + "Fetches messages from DMaaP MR Topic at frequent intervals and writes them to a CDAP stream"; + + /** + * Fixed Name of TCA DMaaP Publisher Worker - which will be publishing messages to DMaaP MR + */ + public static final String TCA_FIXED_DMAAP_PUBLISHER_WORKER = "TCADMaaPMRPublisherWorker"; + + /** + * Fixed Description of TCA DMaaP Publisher Worker + */ + public static final String TCA_FIXED_DMAAP_PUBLISHER_DESCRIPTION_WORKER = + "Polls TCA Alerts Table at frequent intervals for new alerts and publishes them to DMaaP MR Topic"; + + /** + * Fixed name for TCA VES Collector Messages Processing Flow + */ + public static final String TCA_FIXED_VES_COLLECTOR_NAME_FLOW = "TCAVESCollectorFlow"; + + + /** + * Fixed description for TCA VES Collector Messages Processing Flow + */ + public static final String TCA_FIXED_VES_COLLECTOR_DESCRIPTION_FLOW = "Flow performs TCA on VES Collector Messages"; + + + /** + * Fixed Name for TCA VES Message Router Flowlet + */ + public static final String TCA_FIXED_VES_MESSAGE_ROUTER_NAME_FLOWLET = "TCAVESMessageRouterFlowlet"; + + /** + * Fixed Description for TCA VES Message Router Flowlet + */ + public static final String TCA_FIXED_VES_MESSAGE_ROUTER_DESCRIPTION_FLOWLET = + "Routes message received from TCA VES Collector to TCA Threshold Calculator Flowlet instances"; + + /** + * Fixed TCA VES Message Router Flowlet Output + */ + public static final String TCA_FIXED_VES_MESSAGE_ROUTER_OUTPUT = "TCAVESMessageRouterFlowlet"; + + /** + * Fixed Name for TCA VES Message Policy Violated Threshold Calculator Flowlet + */ + public static final String TCA_FIXED_VES_THRESHOLD_VIOLATION_CALCULATOR_NAME_FLOWLET = + "TCAVESThresholdViolationCalculatorFlowlet"; + + /** + * Fixed Description for TCA VES Message Policy Violated Threshold Calculator Flowlet + */ + public static final String TCA_FIXED_VES_THRESHOLD_VIOLATION_CALCULATOR_DESCRIPTION_FLOWLET = + "Applies TCA Policy Thresholds to VES Message and determined if any message violated TCA Policy thresholds"; + + /** + * Fixed Name for TCA VES Message Policy Violated Threshold Calculator Output + */ + public static final String TCA_FIXED_VES_TCA_CALCULATOR_NAME_OUTPUT = "TCAThresholdViolationCalculatorOutput"; + + + /** + * Fixed Name for TCA VES Alerts Sink Flowlet + */ + public static final String TCA_FIXED_VES_ALERTS_SINK_NAME_FLOWLET = "TCAVESAlertsSinkFlowlet"; + + /** + * Fixed Description for TCA VES Alerts Sink Flowlet + */ + public static final String TCA_FIXED_VES_ALERTS_SINK_DESCRIPTION_FLOWLET = + "Saves messages which violated TCA Policy in a data set"; + + + /** + * Default Name for TCA VES Message status table which contain status of all messages processed by TCA + */ + public static final String TCA_DEFAULT_VES_MESSAGE_STATUS_NAME_TABLE = "TCAVESMessageStatusTable"; + + + /** + * Fixed Description for TCA VES Message status table which contain status of all messages processed by TCA + */ + public static final String TCA_FIXED_VES_MESSAGE_STATUS_DESCRIPTION_TABLE = + "Store processing information about all incoming TCA VES Messages"; + + /** + * Default Name for TCA VES Alerts table which contains alerts that can be send to downstream systems + */ + public static final String TCA_DEFAULT_VES_ALERTS_NAME_TABLE = "TCAVESAlertsTable"; + + /** + * Fixed Description for TCA VES Alerts table which contains alerts that can be send to downstream systems + */ + public static final String TCA_DEFAULT_VES_ALERTS_DESCRIPTION_TABLE = + "Stores alert messages that need to be DMaaP"; + + +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/CDAPMetricsConstants.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/CDAPMetricsConstants.java new file mode 100644 index 0000000..12df643 --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/CDAPMetricsConstants.java @@ -0,0 +1,112 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common; + +/** + * Contains all metrics names used for DCAE CDAP modules + * + * <p> + * Format should be (ModuleName)_(Description of metrics)_METRIC e.g. TCA_WORKER_FAILED_ATTEMPTS_METRIC + * </p> + * + * @author Rajiv Singla. Creation Date: 10/25/2016. + */ +public abstract class CDAPMetricsConstants { + + /** + * Metric captures count of all responses received from DMaaP MR Subscriber Topic + */ + public static final String TCA_SUBSCRIBER_ALL_RESPONSES_COUNT_METRIC = "tca.subscriber.fetch.all_responses"; + + /** + * Metric captures count of responses from DMaaP MR Subscriber Topic which does not have 200 HTTP Response code. + * This can be due to DMaaP topic being down or any internal server errors etc. + */ + public static final String TCA_SUBSCRIBER_UNSUCCESSFUL_RESPONSES_METRIC = "tca.subscriber.fetch.unsuccessful"; + + /** + * Metric that counts the number of successful (200 HTTP Response Code) calls to DMaaP which did not had empty + * messages + */ + public static final String TCA_SUBSCRIBER_RESPONSES_WITH_NO_MESSAGES_METRIC = "tca.subscriber.fetch.no_message"; + + /** + * Metric to count total number of VES Collector message processed by tca subscriber + */ + public static final String TCA_SUBSCRIBER_TOTAL_MESSAGES_PROCESSED_METRIC = "tca.subscriber.message.count"; + + + /** + * Metric to record time taken in ms by subscriber in its most recent call to fetch DMaaP MR messages + */ + public static final String TCA_SUBSCRIBER_RESPONSE_TIME_MS_METRIC = "tca.subscriber.fetch.response_time"; + + /** + * Metric captures the count of number of times DMaaP MR Subscriber was unable to write to DMaaP Stream due + * some CDAP error while writing to stream. This should ideally never happen assuming we have enough space + * on CDAP machine and CDAP process is functioning normally + */ + public static final String TCA_SUBSCRIBER_FAILURE_TO_WRITE_TO_STREAM_METRIC = "tca.subscriber.stream.writing.error"; + + + /** + * Metric captures number of VES messages that are not applicable as per TCA Policy + */ + public static final String TCA_VES_INAPPLICABLE_MESSAGES_METRIC = "tca.ves.calculator.inapplicable"; + + /** + * Metric captures number of VES messages that are applicable as per TCA Policy but don't violate any thresholds + */ + public static final String TCA_VES_COMPLIANT_MESSAGES_METRIC = "tca.ves.calculator.compliant"; + + /** + * Metrics captures number of VES messages that are applicable as per TCA Policy and does violate thresholds and + * will likely cause an alert + */ + public static final String TCA_VES_NON_COMPLIANT_MESSAGES_METRIC = "tca.ves.calculator.non_compliant"; + + + /** + * Metric that counts the number of publisher look ups in alerts table which resulted in 0 new alerts + */ + public static final String TCA_PUBLISHER_NO_NEW_ALERTS_LOOKUP_METRIC = "tca.publisher.lookup.no_message"; + + /** + * Metric that counts the number of new alerts found by the publisher in alerts table + */ + public static final String TCA_PUBLISHER_NEW_ALERTS_METRIC = "tca.publisher.lookup.new_messages"; + + /** + * Metric that counts the number of alerts deleted by publisher in alerts table + */ + public static final String TCA_PUBLISHER_DELETED_ALERTS_METRIC = "tca.publisher.deleted.alerts"; + + /** + * Metric that counts the number of publisher calls to DMaaP which resulted in successful response code + */ + public static final String TCA_PUBLISHER_SUCCESSFUL_DMAAP_RESPONSE_METRIC = "tca.publisher.publish.successful"; + + /** + * Metric that counts the number of publisher calls to DMaaP which resulted in unsuccessful response code + */ + public static final String TCA_PUBLISHER_UNSUCCESSFUL_DMAAP_RESPONSE_METRIC = "tca.publisher.publish.unsuccessful"; + +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/DCAEAnalyticsPreferences.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/DCAEAnalyticsPreferences.java new file mode 100644 index 0000000..dc345f4 --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/DCAEAnalyticsPreferences.java @@ -0,0 +1,29 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common; + +/** + * A Marker Interface for all DCAE Analytics Preferences + * + * @author Rajiv Singla. Creation Date: 10/26/2016. + */ +public interface DCAEAnalyticsPreferences { +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/cdap/settings/CDAPAppConfig.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/cdap/settings/CDAPAppConfig.java new file mode 100644 index 0000000..3fc6f22 --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/cdap/settings/CDAPAppConfig.java @@ -0,0 +1,47 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.cdap.settings; + +/** + *<p> + * Minimum Contract for all CDAP App Configs + *</p> + * + * @author Rajiv Singla. Creation Date: 11/2/2016. + */ +public interface CDAPAppConfig extends CDAPAppSettings { + + /** + * CDAP Application Name + * + * @return cdap app name + */ + String getAppName(); + + + /** + * CDAP Application Description + * + * @return cdap app description + */ + String getAppDescription(); + +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/cdap/settings/CDAPAppPreferences.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/cdap/settings/CDAPAppPreferences.java new file mode 100644 index 0000000..52ec1af --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/cdap/settings/CDAPAppPreferences.java @@ -0,0 +1,31 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.cdap.settings; + +/** + * <p> + * Marker Interface for all CDAP Preferences + * </p> + * + * @author Rajiv Singla. Creation Date: 11/2/2016. + */ +public interface CDAPAppPreferences extends CDAPAppSettings { +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/cdap/settings/CDAPAppSettings.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/cdap/settings/CDAPAppSettings.java new file mode 100644 index 0000000..d59e6f4 --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/cdap/settings/CDAPAppSettings.java @@ -0,0 +1,35 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.cdap.settings; + +import java.io.Serializable; + +/** + * <p> + * A marker interface for all CDAP Related App Settings. + * App Settings can either be preferences, cdap app settings etc. + * </p> + * + * + * @author Rajiv Singla. Creation Date: 11/2/2016. + */ +public interface CDAPAppSettings extends Serializable { +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/cdap/settings/CDAPBaseAppConfig.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/cdap/settings/CDAPBaseAppConfig.java new file mode 100644 index 0000000..1360b20 --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/cdap/settings/CDAPBaseAppConfig.java @@ -0,0 +1,62 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.cdap.settings; + +import co.cask.cdap.api.Config; +import org.openecomp.dcae.analytics.common.CDAPComponentsConstants; + +/** + * Base class for all DACE Analytics Application Configurations + * + * @author Rajiv Singla. Creation Date: 10/4/2016. + */ +public abstract class CDAPBaseAppConfig extends Config implements CDAPAppConfig { + + + /** + * DCAE Analytics App Name + */ + protected String appName = CDAPComponentsConstants.COMMON_DEFAULT_DCAE_CDAP_NAME_APP; + + /** + * DCAE Analytics App Description + */ + protected String appDescription = CDAPComponentsConstants.COMMON_DEFAULT_DCAE_CDAP_DESCRIPTION_APP; + + + /** + * Returns DCAE Analytics CDAP Application name + * + * @return CDAP application name + */ + public String getAppName() { + return appName; + } + + /** + * Returns DCAE Analytics CDAP Application descrption + * + * @return CDAP application description + */ + public String getAppDescription() { + return appDescription; + } +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/cdap/validation/CDAPAppSettingsValidator.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/cdap/validation/CDAPAppSettingsValidator.java new file mode 100644 index 0000000..df00eff --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/cdap/validation/CDAPAppSettingsValidator.java @@ -0,0 +1,52 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.cdap.validation; + +import org.openecomp.dcae.analytics.common.cdap.settings.CDAPAppSettings; +import org.openecomp.dcae.analytics.common.validation.DCAEValidator; +import org.openecomp.dcae.analytics.common.validation.ValidationResponse; + +/** + * <p> + * Validates CDAP Application Settings (AppConfig, Preferences etc) + * <p> + * + * @param <T> {@link CDAPAppSettings} DCAE Analytics App Settings (e.g. AppConfig, Preferences) + * @param <R> {@link ValidationResponse} Validator response implementations + * + * @author Rajiv Singla. Creation Date: 11/2/2016. + */ +public interface CDAPAppSettingsValidator<T extends CDAPAppSettings, R extends ValidationResponse<T>> + extends DCAEValidator { + + /** + * Validates DCAE Analytics App Settings and return Validation response which can be + * checked for any app setting issues + * + * @param appSettings DCAE CDAP Application Settings (e.g. AppConfig, Preferences etc.) + * @return validation response + */ + R validateAppSettings(T appSettings); + + +} + + diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/exception/CDAPSettingsException.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/exception/CDAPSettingsException.java new file mode 100644 index 0000000..f6859e2 --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/exception/CDAPSettingsException.java @@ -0,0 +1,50 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.exception; + +import org.slf4j.Logger; + +/** + * Runtime exception which signals that DCAE CDAP App settings (e.g. app config, preferences) validation failed + * + * @author Rajiv Singla. Creation Date: 10/24/2016. + */ +public class CDAPSettingsException extends DCAEAnalyticsRuntimeException { + + /** + * @param message - Error Message for Exception + * @param cause - Actual Exception which caused {@link DCAEAnalyticsRuntimeException} + */ + public CDAPSettingsException(String message, Throwable cause) { + super(message, cause); + } + + /** + * Creates and logs the DCAE App Config Exception to given logger + * + * @param message - Error Message for Exception and logging + * @param logger - Logger used for logging exception + * @param cause - Actual exception which caused + */ + public CDAPSettingsException(String message, Logger logger, Throwable cause) { + super(message, logger, cause); + } +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/exception/DCAEAnalyticsRuntimeException.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/exception/DCAEAnalyticsRuntimeException.java new file mode 100644 index 0000000..cc00e33 --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/exception/DCAEAnalyticsRuntimeException.java @@ -0,0 +1,54 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.exception; + +import org.slf4j.Logger; + +/** + * Runtime Exception for DCAE Analytics Exceptions. All DCAE Analytics + * runtime Exceptions must be wrapped inside this exception + * <p> + * @author Rajiv Singla. Creation Date: 10/5/2016. + */ +public class DCAEAnalyticsRuntimeException extends RuntimeException { + + + /** + * @param message - Error Message for Exception + * @param cause - Actual Exception which caused {@link DCAEAnalyticsRuntimeException} + */ + public DCAEAnalyticsRuntimeException(String message, Throwable cause) { + super(message, cause); + } + + /** + * Creates and logs the DCAE Runtime Exception to given logger + * + * @param message - Error Message for Exception and logging + * @param logger - Logger used for logging exception + * @param cause - Actual exception which caused {@link DCAEAnalyticsRuntimeException} + */ + public DCAEAnalyticsRuntimeException(String message, Logger logger, Throwable cause) { + super(message, cause); + logger.error(message); + } + +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/exception/MessageProcessingException.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/exception/MessageProcessingException.java new file mode 100644 index 0000000..b40f604 --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/exception/MessageProcessingException.java @@ -0,0 +1,51 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.exception; + +import org.openecomp.dcae.analytics.common.service.processor.MessageProcessor; +import org.slf4j.Logger; + +/** + * Runtime Exception caused due to {@link MessageProcessor} failure while processing a message. + * + * @author Rajiv Singla. Creation Date: 11/7/2016. + */ +public class MessageProcessingException extends DCAEAnalyticsRuntimeException { + + /** + * @param message - Error Message for Exception + * @param cause - Actual Exception which caused {@link DCAEAnalyticsRuntimeException} + */ + public MessageProcessingException(String message, Throwable cause) { + super(message, cause); + } + + /** + * Creates and logs the DCAE Runtime Exception to given logger + * + * @param message - Error Message for Exception and logging + * @param logger - Logger used for logging exception + * @param cause - Actual exception which caused {@link DCAEAnalyticsRuntimeException} + */ + public MessageProcessingException(String message, Logger logger, Throwable cause) { + super(message, logger, cause); + } +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/AbstractMessageProcessor.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/AbstractMessageProcessor.java new file mode 100644 index 0000000..e5b9afc --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/AbstractMessageProcessor.java @@ -0,0 +1,162 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.service.processor; + +import com.google.common.base.Optional; +import org.openecomp.dcae.analytics.common.exception.MessageProcessingException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.Nonnull; + +import static java.lang.String.format; + +/** + * An abstract Message Processor which can be extended by {@link MessageProcessor} implementations + * to get default behavior for Message Processors + * + * @param <P> Processor Context sub classes + * + * @author Rajiv Singla. Creation Date: 11/8/2016. + */ +public abstract class AbstractMessageProcessor<P extends ProcessorContext> implements MessageProcessor<P> { + + private static final Logger LOG = LoggerFactory.getLogger(AbstractMessageProcessor.class); + + /** + * By Default there is no processing message + */ + private String processingMessage = null; + + /** + * By Default Processing State is set to not required - subclasses must + * set processing state to {@link ProcessingState#PROCESSING_FINISHED_SUCCESSFULLY} on successful processing + * or {@link ProcessingState#PROCESSING_TERMINATED_EARLY} if processing fails + */ + protected ProcessingState processingState = ProcessingState.PROCESSING_NOT_REQUIRED; + + /** + * Sub classes must provide a description of a processor + * + * @return description of processor + * + */ + public abstract String getProcessorDescription(); + + + /** + * Sub classes must provide implementation to process Message + * + * @param processorContext incoming {@link ProcessorContext} + * @return outgoing {@link ProcessorContext} + */ + public abstract P processMessage(P processorContext); + + @Override + public ProcessorInfo getProcessorInfo() { + // by default the class of the Processor is assigned as Processor Name + final String processorClassName = getClass().getSimpleName(); + return new GenericProcessorInfo(processorClassName, getProcessorDescription()); + } + + @Override + public P preProcessor(P processorContext) { + LOG.debug("Processing Started for Processor: {}", getProcessorInfo().getProcessorName()); + // by default check to see if continue processing Flag is not false + final boolean okToContinue = processorContext.canProcessingContinue(); + if (!okToContinue) { + final String errorMessage = + format("Processor: %s. Processing Context flag okToContinue is false. Unable to proceed...", + getProcessorInfo().getProcessorName()); + throw new MessageProcessingException(errorMessage, LOG, new IllegalStateException(errorMessage)); + } + processingState = ProcessingState.PROCESSING_STARTED; + return processorContext; + } + + @Override + public ProcessingState getProcessingState() { + return processingState; + } + + @Override + public Optional<String> getProcessingMessage() { + return Optional.fromNullable(processingMessage); + } + + @Override + public P postProcessor(P processorContext) { + // Default implementation updates the post processing flag if processing did not + // completed successfully + if (processingState != ProcessingState.PROCESSING_FINISHED_SUCCESSFULLY) { + LOG.debug("Processor: {}, Update Process Context State to stop Processing.", + getProcessorInfo().getProcessorName()); + processorContext.setProcessingContinueFlag(false); + } + // attaches itself to message processor context + processorContext.getMessageProcessors().add(this); + LOG.debug("Processing Completed for Processor: {}", getProcessorInfo()); + return processorContext; + } + + + @Override + public final P apply(@Nonnull P processorContext) { + final P preProcessedProcessorContext = preProcessor(processorContext); + final P processedProcessorContext = processMessage(preProcessedProcessorContext); + return postProcessor(processedProcessorContext); + } + + + /** + * Helper method that updates processing state in case of early termination, logs the processing + * termination reason, updates Processor processing state as Terminated and sets it processing message + * + * @param terminatingMessage error Message + * @param processorContext message processor context + */ + protected void setTerminatingProcessingMessage(final String terminatingMessage, + final P processorContext) { + + final String message = processorContext.getMessage(); + this.processingState = ProcessingState.PROCESSING_TERMINATED_EARLY; + this.processingMessage = terminatingMessage; + LOG.debug("Processor: {}, Early Terminating Message: {}, Incoming Message: {}", + getProcessorInfo().getProcessorName(), terminatingMessage, message); + } + + /** + * Helper method that updates Processing state and logs completion message + * passed + * + * @param processorPassingMessage Processor passing message + * @param processorContext message processor context + */ + protected void setFinishedProcessingMessage(final String processorPassingMessage, P processorContext) { + final String message = processorContext.getMessage(); + processingState = ProcessingState.PROCESSING_FINISHED_SUCCESSFULLY; + this.processingMessage = processorPassingMessage; + LOG.debug("Processor: {}, Successful Completion Message: {}, Incoming Message: {}", + getProcessorInfo().getProcessorName(), processorPassingMessage, message); + } + + +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/AbstractProcessorContext.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/AbstractProcessorContext.java new file mode 100644 index 0000000..15145b5 --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/AbstractProcessorContext.java @@ -0,0 +1,96 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.service.processor; + +import com.google.common.base.Objects; + +import java.util.LinkedList; +import java.util.List; + +/** + * <p> + * An abstract implementation for {@link ProcessorContext} which other DCAE Analytics Modules + * can extend to add module specific functionality + * </p> + * + * @author Rajiv Singla. Creation Date: 11/7/2016. + */ +public abstract class AbstractProcessorContext implements ProcessorContext { + + private final String message; + private List<? super MessageProcessor<? extends ProcessorContext>> messageProcessors; + private boolean canProcessingContinue; + + public AbstractProcessorContext(final String message, + boolean canProcessingContinue) { + this.message = message; + this.canProcessingContinue = canProcessingContinue; + this.messageProcessors = new LinkedList<>(); + } + + /** + * Returns JSON String of incoming CEF Message that needs to be processed + * + * @return incoming CEF message that needs to be processed + */ + @Override + public String getMessage() { + return message; + } + + /** + * Sets if it is ok to continue processing normally + * + * @return boolean which determines if it is ok to continue processing normally + */ + @Override + public boolean canProcessingContinue() { + return canProcessingContinue; + } + + + /** + * Set if it is ok to continue processing normally + * + * @param canProcessingContinue sets boolean which determines if it is ok to continue processing normally + */ + @Override + public void setProcessingContinueFlag(boolean canProcessingContinue) { + this.canProcessingContinue = canProcessingContinue; + } + + /** + * Provides List of message processors which were used in processing CEF message + * + * @return List of message processors which were used in processing CEF message + */ + @Override + public List<? super MessageProcessor<? extends ProcessorContext>> getMessageProcessors() { + return messageProcessors; + } + + @Override + public String toString() { + return Objects.toStringHelper(this) + .add("canProcessingContinue", canProcessingContinue) + .toString(); + } +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/GenericMessageChainProcessor.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/GenericMessageChainProcessor.java new file mode 100644 index 0000000..b86d3ad --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/GenericMessageChainProcessor.java @@ -0,0 +1,63 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.service.processor; + +import org.openecomp.dcae.analytics.common.utils.MessageProcessorUtils; + +import java.util.List; + +/** + * <p> + * A Generic Message Processor which passes the {@link ProcessorContext} from first to second + * {@link MessageProcessor} + * </p> + * + * @param <P> Processor Context sub classes + * + * @author Rajiv Singla. Creation Date: 11/8/2016. + */ +public class GenericMessageChainProcessor<P extends ProcessorContext> { + + private final List<? extends MessageProcessor<P>> messageProcessors; + private final P initialProcessorContext; + + public GenericMessageChainProcessor(List<? extends MessageProcessor<P>> messageProcessors, + P initialProcessorContext) { + this.messageProcessors = messageProcessors; + this.initialProcessorContext = initialProcessorContext; + } + + public P processChain() { + + final MessageProcessorUtils.MessageProcessorFunction<P> messageProcessorFunction = + new MessageProcessorUtils.MessageProcessorFunction<P>() { + @Override + public <M extends MessageProcessor<P>> P apply(P context, M processor) { + return processor.apply(context); + } + }; + + return MessageProcessorUtils.computeMessageProcessorChain(messageProcessors, initialProcessorContext, + messageProcessorFunction); + + } + +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/GenericProcessorInfo.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/GenericProcessorInfo.java new file mode 100644 index 0000000..665f787 --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/GenericProcessorInfo.java @@ -0,0 +1,55 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.service.processor; + +import javax.annotation.Nonnull; + +/** + * A Generic Implementation of {@link ProcessorInfo} + * + * @author Rajiv Singla. Creation Date: 11/7/2016. + */ +public class GenericProcessorInfo implements ProcessorInfo { + + private static final long serialVersionUID = -2840512323233649809L; + + private final String processorName; + private final String processorDescription; + + public GenericProcessorInfo(@Nonnull String processorName, @Nonnull String processorDescription) { + this.processorName = processorName; + this.processorDescription = processorDescription; + } + + public String getProcessorName() { + return processorName; + } + + public String getProcessorDescription() { + return processorDescription; + } + + + @Override + public String toString() { + return processorName; + } +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/MessageProcessor.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/MessageProcessor.java new file mode 100644 index 0000000..3c09da9 --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/MessageProcessor.java @@ -0,0 +1,84 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.service.processor; + +import com.google.common.base.Function; +import com.google.common.base.Optional; + +import java.io.Serializable; + +/** + * <p> + * A message processor can be used to process incoming messages. + * It uses implementations of {@link ProcessorContext} as input and output + * </p> + * + * @param <P> Message Processor Context implementations + * + * @author Rajiv Singla. Creation Date: 11/7/2016. + */ +public interface MessageProcessor<P extends ProcessorContext> extends Function<P, P>, Serializable { + + /** + * Returns processor information + * + * @return processor Information + */ + ProcessorInfo getProcessorInfo(); + + + /** + * Does pre-processing of {@link ProcessorContext} e.g. validate input conditions and return + * pre processed context + * + * @param processorContext incoming Processor Context + * @return Pre processed Processor Context + */ + P preProcessor(P processorContext); + + + /** + * Return processing state of a processor + * + * @return Processing State + */ + ProcessingState getProcessingState(); + + + /** + * May return a message from a processor which indicates the reason for {@link ProcessingState} especially if + * there was some failure in processing + * + * @return processing Message + */ + Optional<String> getProcessingMessage(); + + + /** + * Does post-processing of {@link ProcessorContext} + * + * @param processorContext incoming Processor Context + * @return processor Context after post processing is finished + */ + P postProcessor(P processorContext); + + +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/ProcessingState.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/ProcessingState.java new file mode 100644 index 0000000..c5090f7 --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/ProcessingState.java @@ -0,0 +1,36 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.service.processor; + +/** + * <p> + * Processing state of a {@link MessageProcessor} + * </p> + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +public enum ProcessingState { + + PROCESSING_STARTED, + PROCESSING_FINISHED_SUCCESSFULLY, + PROCESSING_TERMINATED_EARLY, + PROCESSING_NOT_REQUIRED; + +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/ProcessorContext.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/ProcessorContext.java new file mode 100644 index 0000000..74eabd7 --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/ProcessorContext.java @@ -0,0 +1,70 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.service.processor; + +import java.io.Serializable; +import java.util.List; + +/** + * <p> + * A Processor Context is used a an input and output to a {@link MessageProcessor} + * <br> + * DCAE Analytics sub projects should extend this interface and add specific fields + * required for input and output + * </p> + * + * @author Rajiv Singla. Creation Date: 11/7/2016. + */ +public interface ProcessorContext extends Serializable { + + /** + * Returns Processor Context message that will be processed by Chain of Processors + * + * @return message that need to be processed by processors + */ + String getMessage(); + + /** + * Processing Context flag which determines if Processing can continue in a processing + * chain + * + * @return true if ok to continue processing normally + */ + boolean canProcessingContinue(); + + + /** + * Sets new value for ProcessingContinue flag which will cause early termination of processing in chain if + * set to false + * + * @param canProcessingContinue set new value for canProcessing Continue flag + */ + void setProcessingContinueFlag(boolean canProcessingContinue); + + + /** + * Provides a List of previous processors which have completed processing + * + * @return list of previous processors + */ + List<? super MessageProcessor<? extends ProcessorContext>> getMessageProcessors(); + +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/ProcessorInfo.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/ProcessorInfo.java new file mode 100644 index 0000000..e657ed7 --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/service/processor/ProcessorInfo.java @@ -0,0 +1,49 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.service.processor; + +import java.io.Serializable; + +/** + * <p> + * Contains Information about a processor. For e.g. Processor name, processor description etc + * </p> + * + * @author Rajiv Singla. Creation Date: 11/7/2016. + */ +public interface ProcessorInfo extends Serializable { + + /** + * Returns a name which should uniquely identify a particular {@link MessageProcessor} + * + * @return processor name + */ + String getProcessorName(); + + + /** + * Returns description of a {@link MessageProcessor} + * + * @return processor description + */ + String getProcessorDescription(); + +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/utils/HTTPUtils.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/utils/HTTPUtils.java new file mode 100644 index 0000000..4c36cb3 --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/utils/HTTPUtils.java @@ -0,0 +1,57 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.utils; + +/** + * Contains common utils to check HTTP Related Utils + * + * @author Rajiv Singla. Creation Date: 11/2/2016. + */ +public abstract class HTTPUtils { + + /** + * HTTP Status code for successful HTTP call + */ + public static final Integer HTTP_SUCCESS_STATUS_CODE = 200; + + /** + * HTTP Response code when request has been accepted for processing, but the processing has not been completed + */ + public static final Integer HTTP_ACCEPTED_RESPONSE_CODE = 202; + + /** + * HTTP Response code when there is no content + */ + public static final Integer HTTP_NO_CONTENT_RESPONSE_CODE = 204; + + + public static final String JSON_APPLICATION_TYPE = "application/json"; + + /** + * Checks if HTTP Status code is less than or equal to 200 but less then 300 + * + * @param statusCode http status code + * @return true if response code between 200 and 300 + */ + public static boolean isSuccessfulResponseCode(Integer statusCode) { + return statusCode >= 200 && statusCode < 300; + } +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/utils/MessageProcessorUtils.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/utils/MessageProcessorUtils.java new file mode 100644 index 0000000..10c8d7c --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/utils/MessageProcessorUtils.java @@ -0,0 +1,114 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.utils; + +import org.openecomp.dcae.analytics.common.exception.MessageProcessingException; +import org.openecomp.dcae.analytics.common.service.processor.MessageProcessor; +import org.openecomp.dcae.analytics.common.service.processor.ProcessorContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Iterator; + + +/** + * Contains utility methods for {@link MessageProcessor} + * + * @author Rajiv Singla. Creation Date: 11/8/2016. + */ +public abstract class MessageProcessorUtils { + + private static final Logger LOG = LoggerFactory.getLogger(MessageProcessorUtils.class); + + /** + * Provides an abstraction how to apply {@link ProcessorContext} to next {@link MessageProcessor} + * in the message processor chain + * + * @param <P> Sub classes of Processor Context + */ + public interface MessageProcessorFunction<P extends ProcessorContext> { + + /** + * Method which provides accumulated {@link ProcessorContext} from previous processors and a reference + * to next processor in the chain + * + * @param p accumulated {@link ProcessorContext} from previous processors + * @param m current {@link MessageProcessor} in the chain + * @param <M> Message processor sub classes + * + * @return processing context after computing the current Message Processor + */ + <M extends MessageProcessor<P>> P apply(P p, M m); + } + + + /** + * Provides an abstraction to compute a chain of {@link MessageProcessor} + * + * @param messageProcessors An iterable containing one or more {@link MessageProcessor}s + * @param initialProcessorContext An initial processing Context + * @param messageProcessorFunction messageProcessor Function + * @param <P> Sub classes for Processor Context + * + * @return processing context which results after computing the whole chain + */ + public static <P extends ProcessorContext> P computeMessageProcessorChain( + final Iterable<? extends MessageProcessor<P>> messageProcessors, + final P initialProcessorContext, + final MessageProcessorFunction<P> messageProcessorFunction) { + + // Get message processor iterator + final Iterator<? extends MessageProcessor<P>> processorIterator = messageProcessors.iterator(); + + // If no next message processor - return initial processor context + if (!processorIterator.hasNext()) { + return initialProcessorContext; + } + + // An accumulator for processor Context + P processorContextAccumulator = initialProcessorContext; + + while (processorIterator.hasNext()) { + + final MessageProcessor<P> nextProcessor = processorIterator.next(); + + // If Initial Processor Context is null + if (processorContextAccumulator == null) { + final String errorMessage = + String.format("Processor Context must not be null for Message Process: %s", + nextProcessor.getProcessorInfo().getProcessorName()); + throw new MessageProcessingException(errorMessage, LOG, new IllegalStateException(errorMessage)); + } + + + if (!processorContextAccumulator.canProcessingContinue()) { + LOG.debug("Triggering Early Termination, before Message Processor: {}, Incoming Message: {}", + nextProcessor.getProcessorInfo().getProcessorName(), processorContextAccumulator.getMessage()); + break; + } + processorContextAccumulator = messageProcessorFunction.apply(processorContextAccumulator, nextProcessor); + } + + return processorContextAccumulator; + } + + +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/utils/PersistenceUtils.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/utils/PersistenceUtils.java new file mode 100644 index 0000000..e408171 --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/utils/PersistenceUtils.java @@ -0,0 +1,54 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.utils; + +import java.util.Date; + +/** + * Contains Utility methods for creating persistence row keys etc. + * + * @author Rajiv Singla. Creation Date: 11/16/2016. + */ +public abstract class PersistenceUtils { + + + /** + * Name of the column which will contain Table Key + */ + public static final String TABLE_ROW_KEY_COLUMN_NAME = "key"; + + /** + * Delimited to be used when creating a row key with multiple fields + */ + public static final String ROW_KEY_DELIMITER = "-"; + + /** + * Creates a decreasing number using current timestamp. Handy when you want to keep records most recent records + * close to the top of column table like HBase + * + * @return decreasing number + */ + public static String getCurrentTimeReverseSubKey() { + final long timeReverseLong = Long.MAX_VALUE - new Date().getTime(); + return String.format("%025d", timeReverseLong); + } + +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/utils/ValidationUtils.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/utils/ValidationUtils.java new file mode 100644 index 0000000..694529f --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/utils/ValidationUtils.java @@ -0,0 +1,89 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.utils; + +import org.openecomp.dcae.analytics.common.cdap.settings.CDAPAppSettings; +import org.openecomp.dcae.analytics.common.cdap.validation.CDAPAppSettingsValidator; +import org.openecomp.dcae.analytics.common.exception.CDAPSettingsException; +import org.openecomp.dcae.analytics.common.validation.ValidationResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import static com.google.common.base.Preconditions.checkNotNull; + +/** + * Contains utility methods to validate null checks, empty string etc + * + * @author Rajiv Singla. Creation Date: 10/24/2016. + */ +public abstract class ValidationUtils { + + private static final Logger LOG = LoggerFactory.getLogger(ValidationUtils.class); + + /** + * Checks if String is empty. For null string true is returned + * + * @param stringValue string value + * @return returns true is string is empty or null + */ + public static boolean isEmpty(final @Nullable String stringValue) { + return stringValue == null || stringValue.isEmpty() || stringValue.trim().isEmpty(); + } + + + /** + * Provides common functionality to Validates CDAP App Settings. Throws Runtime exception if validation fails + * + * @param appSettings app Settings e.g. App Config, App Preferences etc + * @param appSettingsValidator app Settings validator + * + * @param <T> Settings type e.g. AppConfig or AppPreferences + * @param <R> Validation Response type + * @param <V> Validator Type + */ + public static <T extends CDAPAppSettings, R extends ValidationResponse<T>, + V extends CDAPAppSettingsValidator<T, R>> void validateSettings(final @Nonnull T appSettings, + final @Nonnull V appSettingsValidator) { + checkNotNull(appSettings, "App Settings must not be null"); + checkNotNull(appSettingsValidator, "App Settings validator must not be null"); + + final String appSettingsClassName = appSettings.getClass().getSimpleName(); + final String appSettingsClassValidator = appSettingsValidator.getClass().getSimpleName(); + + LOG.debug("Validating App Settings for: {}, with App Settings Validator: {} ", + appSettingsClassName, appSettingsClassValidator); + + final R validationResponse = appSettingsValidator.validateAppSettings(appSettings); + + // If setting validation fails throw an exception + if (validationResponse.hasErrors()) { + throw new CDAPSettingsException( + validationResponse.getAllErrorMessage(), LOG, new IllegalArgumentException()); + } + + LOG.debug("App Settings Validation Successful for app Settings: {} with validator: {}", appSettingsClassName, + appSettingsClassValidator); + } + +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/validation/DCAEValidator.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/validation/DCAEValidator.java new file mode 100644 index 0000000..065411f --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/validation/DCAEValidator.java @@ -0,0 +1,29 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.validation; + +/** + * Marker interface for all DCAE Validators + * + * @author Rajiv Singla. Creation Date: 10/24/2016. + */ +public interface DCAEValidator { +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/validation/GenericValidationResponse.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/validation/GenericValidationResponse.java new file mode 100644 index 0000000..7015ffe --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/validation/GenericValidationResponse.java @@ -0,0 +1,84 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.validation; + +import com.google.common.base.Joiner; +import com.google.common.base.Objects; + +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; + +/** + * A generic implementation of Validation Response + * + * @param <T> Validation Entity Type + * + * @author Rajiv Singla. Creation Date: 10/24/2016. + */ +public class GenericValidationResponse<T> implements ValidationResponse<T> { + + private LinkedHashMap<String, String> errorMessageMap = new LinkedHashMap<>(); + + @Override + public boolean hasErrors() { + return errorMessageMap.size() != 0; + } + + @Override + public Set<String> getFieldNamesWithError() { + return errorMessageMap.keySet(); + } + + public Collection<String> getErrorMessageMap() { + return errorMessageMap.values(); + } + + @Override + public Map<String, String> getValidationResultsAsMap() { + return errorMessageMap; + } + + + @Override + public String getAllErrorMessage() { + return getAllErrorMessage(","); + } + + @Override + public String getAllErrorMessage(String delimiter) { + return Joiner.on(delimiter).join(errorMessageMap.values()); + } + + @Override + public void addErrorMessage(String fieldName, String filedErrorMessage) { + errorMessageMap.put(fieldName, filedErrorMessage); + } + + @Override + public String toString() { + return Objects.toStringHelper(this) + .add("hasErrors", hasErrors()) + .add("errorMessageMap", errorMessageMap) + .toString(); + } +} diff --git a/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/validation/ValidationResponse.java b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/validation/ValidationResponse.java new file mode 100644 index 0000000..b1b7a16 --- /dev/null +++ b/dcae-analytics-common/src/main/java/org/openecomp/dcae/analytics/common/validation/ValidationResponse.java @@ -0,0 +1,90 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.validation; + +import java.util.Collection; +import java.util.Map; +import java.util.Set; + +/** + * Validation Response contract + * + * @param <T> Entity class type which is being validated + * + * @author Rajiv Singla. Creation Date: 10/24/2016. + */ +public interface ValidationResponse<T> { + + /** + * Returns true if validation resulted in one or more errors + * + * @return true if validation has errors + */ + boolean hasErrors(); + + /** + * Returns all field names which have error + * + * @return names of fields which have error + */ + Set<String> getFieldNamesWithError(); + + /** + * Returns list of all error messages + * + * @return list of error messages + */ + Collection<String> getErrorMessageMap(); + + + /** + * Returns all error messages as string delimited by comma + * + * @return all error messages delimited by given delimiter + */ + String getAllErrorMessage(); + + /** + * Returns all error messages as string delimited by given delimited + * + * @param delimiter delimited to be used for error message + * @return all error messages delimited by given delimiter + */ + String getAllErrorMessage(String delimiter); + + /** + * Adds field name and error message to the validation response + * + * @param fieldName field name which has validation error + * @param filedErrorMessage validation error message + */ + void addErrorMessage(String fieldName, String filedErrorMessage); + + + /** + * Returns validation results as map containing values as keys and values + * as error Message + * + * @return Map containing field names and error message associated with those fields + */ + Map<String, String> getValidationResultsAsMap(); + +} diff --git a/dcae-analytics-common/src/test/java/org/openecomp/dcae/analytics/common/BaseAnalyticsCommonUnitTest.java b/dcae-analytics-common/src/test/java/org/openecomp/dcae/analytics/common/BaseAnalyticsCommonUnitTest.java new file mode 100644 index 0000000..06b7e63 --- /dev/null +++ b/dcae-analytics-common/src/test/java/org/openecomp/dcae/analytics/common/BaseAnalyticsCommonUnitTest.java @@ -0,0 +1,48 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common; + +import org.openecomp.dcae.analytics.common.service.processor.TestEarlyTerminatingProcessor; +import org.openecomp.dcae.analytics.common.service.processor.TestMessageProcessor1; +import org.openecomp.dcae.analytics.common.service.processor.TestMessageProcessor2; +import org.openecomp.dcae.analytics.common.service.processor.TestProcessorContext; +import org.openecomp.dcae.analytics.test.BaseDCAEAnalyticsUnitTest; + +/** + * Base class from all DCEA Analytics Common Module Unit Tests + * <p> + * @author Rajiv Singla. Creation Date: 10/6/2016. + */ +public abstract class BaseAnalyticsCommonUnitTest extends BaseDCAEAnalyticsUnitTest { + + + protected TestProcessorContext testProcessorContext = new TestProcessorContext("", true); + + protected TestMessageProcessor1 getTestMessageProcessor1() { + return new TestMessageProcessor1(); + } + protected TestMessageProcessor2 getTestMessageProcessor2() { + return new TestMessageProcessor2(); + } + protected TestEarlyTerminatingProcessor getTestEarlyTerminationProcessor() { + return new TestEarlyTerminatingProcessor(); + } +} diff --git a/dcae-analytics-common/src/test/java/org/openecomp/dcae/analytics/common/service/processor/GenericMessageChainProcessorTest.java b/dcae-analytics-common/src/test/java/org/openecomp/dcae/analytics/common/service/processor/GenericMessageChainProcessorTest.java new file mode 100644 index 0000000..2ab9d40 --- /dev/null +++ b/dcae-analytics-common/src/test/java/org/openecomp/dcae/analytics/common/service/processor/GenericMessageChainProcessorTest.java @@ -0,0 +1,96 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.service.processor; + +import com.google.common.collect.ImmutableList; +import org.junit.Test; +import org.openecomp.dcae.analytics.common.BaseAnalyticsCommonUnitTest; +import org.openecomp.dcae.analytics.common.exception.MessageProcessingException; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThat; + + +/** + * + * @author Rajiv Singla. Creation Date: 11/8/2016. + */ +public class GenericMessageChainProcessorTest extends BaseAnalyticsCommonUnitTest { + + + @Test + public void testProcessChainWhenProcessChainHasNoEarlyTermination() throws Exception { + + final TestMessageProcessor1 testMessageProcessor1 = getTestMessageProcessor1(); + final TestMessageProcessor2 testMessageProcessor2 = getTestMessageProcessor2(); + final ImmutableList<? extends MessageProcessor<TestProcessorContext>> testMessageChain = + ImmutableList.of(testMessageProcessor1, testMessageProcessor2); + + final TestProcessorContext testProcessorContext = new TestProcessorContext("Hello", true); + + final GenericMessageChainProcessor<TestProcessorContext> genericMessageChainProcessor = + new GenericMessageChainProcessor<>(testMessageChain, testProcessorContext); + + final TestProcessorContext finalProcessorContext = genericMessageChainProcessor.processChain(); + + final String result = finalProcessorContext.getResult(); + assertThat("Final Result must be Hello World! Again", result, is("Hello World! Again")); + assertThat("TestProcessor1 state is correct", testMessageProcessor1.getProcessingState(), + is(ProcessingState.PROCESSING_FINISHED_SUCCESSFULLY)); + assertThat("TestProcessor2 state is correct", testMessageProcessor2.getProcessingState(), + is(ProcessingState.PROCESSING_FINISHED_SUCCESSFULLY)); + } + + + @Test + public void testProcessChainWhenProcessChainEarlyTermination() throws Exception { + + final TestEarlyTerminatingProcessor testEarlyTerminatingProcessor = getTestEarlyTerminationProcessor(); + final ImmutableList<? extends MessageProcessor<TestProcessorContext>> testMessageChain = + ImmutableList.of(testEarlyTerminatingProcessor, getTestMessageProcessor2()); + final TestProcessorContext testProcessorContext = new TestProcessorContext("Hello", true); + + final GenericMessageChainProcessor<TestProcessorContext> genericMessageChainProcessor = + new GenericMessageChainProcessor<>(testMessageChain, testProcessorContext); + + final TestProcessorContext finalProcessorContext = genericMessageChainProcessor.processChain(); + final String result = finalProcessorContext.getResult(); + assertNull("Final Result must be null", result); + assertThat("TestEarlyTerminatingProcessor state is correct", + testEarlyTerminatingProcessor.getProcessingState(), is(ProcessingState.PROCESSING_TERMINATED_EARLY)); + } + + @Test(expected = MessageProcessingException.class) + public void testProcessChainWhenIncomingMessageContextIsNull() throws Exception { + + final TestEarlyTerminatingProcessor testEarlyTerminatingProcessor = getTestEarlyTerminationProcessor(); + final ImmutableList<? extends MessageProcessor<TestProcessorContext>> testMessageChain = + ImmutableList.of(testEarlyTerminatingProcessor, getTestMessageProcessor2()); + final TestProcessorContext testProcessorContext = null; + + final GenericMessageChainProcessor<TestProcessorContext> genericMessageChainProcessor = + new GenericMessageChainProcessor<>(testMessageChain, testProcessorContext); + + genericMessageChainProcessor.processChain(); + } + +} diff --git a/dcae-analytics-common/src/test/java/org/openecomp/dcae/analytics/common/service/processor/TestEarlyTerminatingProcessor.java b/dcae-analytics-common/src/test/java/org/openecomp/dcae/analytics/common/service/processor/TestEarlyTerminatingProcessor.java new file mode 100644 index 0000000..c5852de --- /dev/null +++ b/dcae-analytics-common/src/test/java/org/openecomp/dcae/analytics/common/service/processor/TestEarlyTerminatingProcessor.java @@ -0,0 +1,39 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.service.processor; + +/** + * + * @author Rajiv Singla. Creation Date: 11/8/2016. + */ +public class TestEarlyTerminatingProcessor extends AbstractMessageProcessor<TestProcessorContext> { + + @Override + public String getProcessorDescription() { + return "Terminates the chain early"; + } + + @Override + public TestProcessorContext processMessage(TestProcessorContext processorContext) { + setTerminatingProcessingMessage("Terminating early", processorContext); + return processorContext; + } +} diff --git a/dcae-analytics-common/src/test/java/org/openecomp/dcae/analytics/common/service/processor/TestMessageProcessor1.java b/dcae-analytics-common/src/test/java/org/openecomp/dcae/analytics/common/service/processor/TestMessageProcessor1.java new file mode 100644 index 0000000..6c56cb8 --- /dev/null +++ b/dcae-analytics-common/src/test/java/org/openecomp/dcae/analytics/common/service/processor/TestMessageProcessor1.java @@ -0,0 +1,41 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.service.processor; + +/** + * + * @author Rajiv Singla. Creation Date: 11/8/2016. + */ +public class TestMessageProcessor1 extends AbstractMessageProcessor<TestProcessorContext> { + + @Override + public String getProcessorDescription() { + return "Appends \" World!\" to the message string and set it to result string"; + } + + @Override + public TestProcessorContext processMessage(TestProcessorContext processorContext) { + final String message = processorContext.getMessage(); + processorContext.setResult(message + " World!"); + setFinishedProcessingMessage("Finished Appending world", processorContext); + return processorContext; + } +} diff --git a/dcae-analytics-common/src/test/java/org/openecomp/dcae/analytics/common/service/processor/TestMessageProcessor2.java b/dcae-analytics-common/src/test/java/org/openecomp/dcae/analytics/common/service/processor/TestMessageProcessor2.java new file mode 100644 index 0000000..0ecbedf --- /dev/null +++ b/dcae-analytics-common/src/test/java/org/openecomp/dcae/analytics/common/service/processor/TestMessageProcessor2.java @@ -0,0 +1,41 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.service.processor; + +/** + * + * @author Rajiv Singla. Creation Date: 11/8/2016. + */ +public class TestMessageProcessor2 extends AbstractMessageProcessor<TestProcessorContext> { + + @Override + public String getProcessorDescription() { + return "Appends \" Again\" to the result string"; + } + + @Override + public TestProcessorContext processMessage(TestProcessorContext processorContext) { + final String result = processorContext.getResult(); + processorContext.setResult(result + " Again"); + setFinishedProcessingMessage("Finished Appending again to result", processorContext); + return processorContext; + } +} diff --git a/dcae-analytics-common/src/test/java/org/openecomp/dcae/analytics/common/service/processor/TestProcessorContext.java b/dcae-analytics-common/src/test/java/org/openecomp/dcae/analytics/common/service/processor/TestProcessorContext.java new file mode 100644 index 0000000..9d9342f --- /dev/null +++ b/dcae-analytics-common/src/test/java/org/openecomp/dcae/analytics/common/service/processor/TestProcessorContext.java @@ -0,0 +1,84 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.common.service.processor; + +import java.util.LinkedList; +import java.util.List; + +/** + * + * @author Rajiv Singla. Creation Date: 11/8/2016. + */ +public class TestProcessorContext implements ProcessorContext { + + private String message; + private boolean continueProcessingFlag; + private String result; + private List<? super MessageProcessor<? extends ProcessorContext>> messageProcessors; + + public TestProcessorContext(String message, boolean continueProcessingFlag) { + this.message = message; + this.continueProcessingFlag = continueProcessingFlag; + this.messageProcessors = new LinkedList<>(); + } + + @Override + public String getMessage() { + return message; + } + + @Override + public boolean canProcessingContinue() { + return continueProcessingFlag; + } + + @Override + public void setProcessingContinueFlag(boolean canProcessingContinue) { + this.continueProcessingFlag = canProcessingContinue; + } + + @Override + public List<? super MessageProcessor<? extends ProcessorContext>> getMessageProcessors() { + return messageProcessors; + } + + + public void setMessage(String message) { + this.message = message; + } + + public boolean isContinueProcessingFlag() { + return continueProcessingFlag; + } + + public void setContinueProcessingFlag(boolean continueProcessingFlag) { + this.continueProcessingFlag = continueProcessingFlag; + } + + public String getResult() { + return result; + } + + public void setResult(String result) { + this.result = result; + } + +} diff --git a/dcae-analytics-common/src/test/resources/logback-test.xml b/dcae-analytics-common/src/test/resources/logback-test.xml new file mode 100644 index 0000000..2a874be --- /dev/null +++ b/dcae-analytics-common/src/test/resources/logback-test.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ ============LICENSE_START========================================================= + ~ dcae-analytics + ~ ================================================================================ + ~ Copyright © 2017 AT&T Intellectual Property. All rights reserved. + ~ ================================================================================ + ~ Licensed 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. + ~ ============LICENSE_END========================================================= + --> +<configuration> + + <!-- + Disabling some chatty loggers. + --> + <logger name="org.apache.commons.beanutils" level="ERROR"/> + <logger name="org.apache.zookeeper.server" level="ERROR"/> + <logger name="org.apache.zookeeper" level="ERROR"/> + <logger name="com.ning" level="WARN"/> + <logger name="org.apache.spark" level="WARN"/> + <logger name="org.spark-project" level="WARN"/> + <logger name="org.apache.hadoop" level="WARN"/> + <logger name="org.apache.hive" level="WARN"/> + <logger name="org.quartz.core" level="WARN"/> + <logger name="org.eclipse.jetty" level="WARN"/> + <logger name="io.netty.util.internal" level="WARN"/> + + <logger name="org.apache.twill" level="WARN"/> + <logger name="co.cask.cdap" level="INFO"/> + <logger name="com.openecomp" level="DEBUG"/> + + <appender name="Console" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <pattern>%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n</pattern> + </encoder> + </appender> + + <root level="ERROR"> + <appender-ref ref="Console"/> + </root> + + +</configuration> + diff --git a/dcae-analytics-dmaap/pom.xml b/dcae-analytics-dmaap/pom.xml new file mode 100644 index 0000000..ce54088 --- /dev/null +++ b/dcae-analytics-dmaap/pom.xml @@ -0,0 +1,109 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ ============LICENSE_START========================================================= + ~ dcae-analytics + ~ ================================================================================ + ~ Copyright © 2017 AT&T Intellectual Property. All rights reserved. + ~ ================================================================================ + ~ Licensed 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. + ~ ================================================================================ + ~ ECOMP and OpenECOMP are trademarks and service marks of AT&T Intellectual Property. + ~ ============LICENSE_END========================================================= + --> + +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.openecomp.dcae.analytics</groupId> + <artifactId>dcae-analytics</artifactId> + <version>1.0-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + + <artifactId>dcae-analytics-dmaap</artifactId> + <packaging>jar</packaging> + + <!-- THIS MODULE CONTAINS CODE FOR DMaaP API --> + <name>DCAE Analytics DMaaP</name> + <description> + DMaaP(Data Movement as a Platform) MR API using AAF(Authentication and Authorization Framework) + </description> + + + <properties> + <main.basedir>${project.parent.basedir}</main.basedir> + </properties> + + <dependencies> + + <!-- DCAE COMMON DEPENDENCIES --> + <dependency> + <groupId>org.openecomp.dcae.analytics</groupId> + <artifactId>dcae-analytics-common</artifactId> + <version>1.0-SNAPSHOT</version> + </dependency> + + <!-- APACHE CLIENT --> + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpclient</artifactId> + </dependency> + + <!-- UTILITIES --> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + </dependency> + + <!-- LOGGING --> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </dependency> + + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-core</artifactId> + </dependency> + + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-classic</artifactId> + </dependency> + + + <!-- JACKSON JSON --> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-core</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-databind</artifactId> + </dependency> + + <!-- TEST DEPENDENCIES --> + <dependency> + <groupId>org.openecomp.dcae.analytics</groupId> + <artifactId>dcae-analytics-test</artifactId> + <version>1.0-SNAPSHOT</version> + <scope>test</scope> + </dependency> + </dependencies> + + +</project> diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/DMaaPMRFactory.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/DMaaPMRFactory.java new file mode 100644 index 0000000..6966a46 --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/DMaaPMRFactory.java @@ -0,0 +1,112 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap; + +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.Injector; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRPublisherConfig; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRSubscriberConfig; +import org.openecomp.dcae.analytics.dmaap.module.AnalyticsDMaaPModule; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisher; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisherFactory; +import org.openecomp.dcae.analytics.dmaap.service.subscriber.DMaaPMRSubscriber; +import org.openecomp.dcae.analytics.dmaap.service.subscriber.DMaaPMRSubscriberFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.Nonnull; + +/** + * Creates pre injected implementations for {@link DMaaPMRPublisher} and {@link DMaaPMRSubscriber} + * <p> + * Usage: + * <p>Create an instance of DMaaP MR Factory</p> + * <pre> + * DMaaPFactory dmaapFactory = DMaaPFactory.initalize() + * </pre> + * <p>Create a new DMaaP MR Publisher</p> + * <pre> + * DMaaPMRPublisher publisher = dmaapFactory.createPublisher(publisherConfig) + * </pre> + * <p>Create new DMaaP MR Subscriber</p> + * <pre> + * DMaaPMRSubscriber subscriber = dmaapFactory.createSubscriber(subscriberConfig) + * </pre> + * <p> + * <strong>All Clients must use this Factory to initalize DMaaP Message Router Publishers and Subscribers</strong> + * </p> + * <p> + * @author Rajiv Singla. Creation Date: 10/20/2016. + */ +public class DMaaPMRFactory { + + private static final Logger LOG = LoggerFactory.getLogger(DMaaPMRFactory.class); + + private final Injector injector; + + public DMaaPMRFactory(AbstractModule guiceModule) { + injector = Guice.createInjector(guiceModule); + } + + /** + * Returns configured instance of {@link DMaaPMRPublisher} + * + * @param publisherConfig Publisher Config + * @return configured instance of DMaaP MR Publisher + */ + public DMaaPMRPublisher createPublisher(@Nonnull DMaaPMRPublisherConfig publisherConfig) { + final DMaaPMRPublisherFactory publisherFactory = injector.getInstance(DMaaPMRPublisherFactory.class); + LOG.debug("Creating new DMaaP MR Publisher Instance with configuration: {}", publisherConfig); + final DMaaPMRPublisher dMaaPMRPublisher = publisherFactory.create(publisherConfig); + LOG.info("Created new DMaaP MR Publisher Instance. Publisher creation time: {}", + dMaaPMRPublisher.getPublisherCreationTime()); + return dMaaPMRPublisher; + } + + /** + * Returns configured instance of {@link DMaaPMRSubscriber} + * + * @param subscriberConfig Subscriber Config + * @return configured instance of DMaaP MR Subscriber + */ + public DMaaPMRSubscriber createSubscriber(@Nonnull DMaaPMRSubscriberConfig subscriberConfig) { + final DMaaPMRSubscriberFactory subscriberFactory = injector.getInstance(DMaaPMRSubscriberFactory.class); + LOG.debug("Creating new DMaaP MR Subscriber Instance with configuration: {}", subscriberConfig); + final DMaaPMRSubscriber dMaaPMRSubscriber = subscriberFactory.create(subscriberConfig); + LOG.info("Created new DMaaP MR Subscriber Instance. Subscriber creation time: {}", + dMaaPMRSubscriber.getSubscriberCreationTime()); + return dMaaPMRSubscriber; + } + + /** + * Creates an instance of {@link DMaaPMRFactory} + * + * @return {@link DMaaPMRFactory} factory instance + */ + public static DMaaPMRFactory create() { + final DMaaPMRFactory dMaaPMRFactory = new DMaaPMRFactory(new AnalyticsDMaaPModule()); + LOG.info("Created new instance of DMaaP MR Factory"); + return dMaaPMRFactory; + } + + +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/config/DMaaPMRBaseConfig.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/config/DMaaPMRBaseConfig.java new file mode 100644 index 0000000..f2435f1 --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/config/DMaaPMRBaseConfig.java @@ -0,0 +1,193 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.domain.config; + +import com.google.common.base.Objects; +import org.openecomp.dcae.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Locale; + +import static org.openecomp.dcae.analytics.common.utils.HTTPUtils.JSON_APPLICATION_TYPE; + +/** + * <p> + * Contains common parameters for both DMaaP Message Router Publisher and Subscriber Configs + * <p> + * @author Rajiv Singla. Creation Date: 10/12/2016. + */ +public abstract class DMaaPMRBaseConfig implements DMaaPMRConfig { + + protected static final Logger LOG = LoggerFactory.getLogger(DMaaPMRBaseConfig.class); + + protected String hostName; + protected Integer portNumber; + protected String topicName; + protected String protocol; + protected String userName; + protected String userPassword; + protected String contentType; + + /** + * Provides host name e.g. mrlocal-mtnjftle01.homer.com + * + * @return host name + */ + public String getHostName() { + return hostName; + } + + + /** + * Provides Port Number of DMaaP MR Topic Host. Defaults to 80 + * + * @return host port number + */ + public Integer getPortNumber() { + return portNumber; + } + + /** + * Provides topic name + * + * @return topic name + */ + public String getTopicName() { + return topicName; + } + + /** + * Provides protocol type e.g. http or https + * + * @return protocol type + */ + public String getProtocol() { + return protocol; + } + + /** + * Provides content type e.g. application/json + * + * @return content type + */ + public String getContentType() { + return contentType; + } + + + /** + * Provides User name for the DMaaP MR Topic authentication + * + * @return user name + */ + public String getUserName() { + return userName; + } + + /** + * Provides User password for the DMaaP MR Topic authentication + * + * @return user Password + */ + public String getUserPassword() { + return userPassword; + } + + + /** + * Trims, adjusts casing and validates user input String for protocol selection + * + * @param protocol - User input for protocol String + * @return - network protocol e.g http or https + */ + protected static String normalizeValidateProtocol(final String protocol) { + // validate that only http and https are supported protocols are Supported for DMaaP MR + String normalizedProtocolString = protocol.trim().toLowerCase(Locale.ENGLISH); + if (normalizedProtocolString.isEmpty() || + !(normalizedProtocolString.equals("http") || normalizedProtocolString.equals("https"))) { + + final String errorMessage = + "Unsupported protocol selection. Only HTTPS and HTTPS are currently supported for DMaaP MR"; + + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, new IllegalArgumentException(errorMessage)); + } + return normalizedProtocolString; + } + + + /** + * Trims, adjust casing and validates content type is supported by DMaaP. + * + * NOTE: DMaaP currently only support application/json content type + * + * @param contentType content type that needs to checked for DMaaP MR support + * @return true if content type is supported by DMaaP MR + */ + protected static String normalizeValidateContentType(final String contentType) { + // Current DMaaP MR is only supporting "application/json" content type + String normalizedContentType = contentType.trim().toLowerCase(Locale.ENGLISH); + final boolean isSupported = contentType.equals(JSON_APPLICATION_TYPE); + if (!isSupported) { + final String errorMessage = + "Unsupported content type selection. Only application/json is currently supported for DMaaP MR"; + + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, new IllegalArgumentException(errorMessage)); + } + return normalizedContentType; + } + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof DMaaPMRBaseConfig)) { + return false; + } + DMaaPMRBaseConfig that = (DMaaPMRBaseConfig) o; + return Objects.equal(hostName, that.hostName) && + Objects.equal(portNumber, that.portNumber) && + Objects.equal(topicName, that.topicName) && + Objects.equal(protocol, that.protocol) && + Objects.equal(userName, that.userName) && + Objects.equal(userPassword, that.userPassword) && + Objects.equal(contentType, that.contentType); + } + + @Override + public int hashCode() { + return Objects.hashCode(hostName, portNumber, topicName, protocol, userName, userPassword, contentType); + } + + @Override + public String toString() { + return Objects.toStringHelper(this) + .add("hostName", hostName) + .add("portNumber", portNumber) + .add("topicName", topicName) + .add("protocol", protocol) + .add("userName", userName) + .add("contentType", contentType) + .toString(); + } +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/config/DMaaPMRConfig.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/config/DMaaPMRConfig.java new file mode 100644 index 0000000..f5ef71e --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/config/DMaaPMRConfig.java @@ -0,0 +1,38 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.domain.config; + +/** + * <p> + * Marker Interface for all DMaaP MR Configs. + * Holds Default configuration parameters for all Configs + * <p> + * @author Rajiv Singla. Creation Date: 10/12/2016. + */ +public interface DMaaPMRConfig { + + Integer DEFAULT_PORT_NUMBER = 80; // default port number + String DEFAULT_USER_NAME = null; // default to no username + String DEFAULT_USER_PASSWORD = null; // defaults to no userPassword + String DEFAULT_PROTOCOL = "https"; // defaults to using https protocol + String DEFAULT_CONTENT_TYPE = "application/json"; // defaults to json content type + +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/config/DMaaPMRPublisherConfig.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/config/DMaaPMRPublisherConfig.java new file mode 100644 index 0000000..4a08cd3 --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/config/DMaaPMRPublisherConfig.java @@ -0,0 +1,250 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.domain.config; + +import com.google.common.base.Objects; + +import javax.annotation.Nonnull; + +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.DEFAULT_PUBLISHER_MAX_BATCH_SIZE; +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.DEFAULT_PUBLISHER_MAX_RECOVERY_QUEUE_SIZE; + +/** + * <p> + * Immutable DMaaP MR Configuration for DMaaP MR Publisher. + * <p> + * Use {@link DMaaPMRPublisherConfig.Builder} to construct Subscriber Configuration + * </p> + * <p> + * @author Rajiv Singla. Creation Date: 10/12/2016. + */ +public class DMaaPMRPublisherConfig extends DMaaPMRBaseConfig { + + /** + * Publisher batching queue size + */ + private int maxBatchSize; + + /** + * Publisher Recovery Queue Size + */ + private int maxRecoveryQueueSize; + + + private DMaaPMRPublisherConfig(@Nonnull String hostName, + @Nonnull Integer portNumber, + @Nonnull String topicName, + @Nonnull String protocol, + @Nonnull String userName, + @Nonnull String userPassword, + @Nonnull String contentType, + int maxBatchSize, + int maxRecoveryQueueSize) { + this.hostName = hostName; + this.portNumber = portNumber; + this.topicName = topicName; + this.protocol = protocol; + this.userName = userName; + this.userPassword = userPassword; + this.contentType = contentType; + this.maxBatchSize = maxBatchSize; + this.maxRecoveryQueueSize = maxRecoveryQueueSize; + } + + + /** + * Builder to initialize immutable {@link DMaaPMRPublisherConfig} object + */ + public static class Builder { + + private String hostName; + private Integer portNumber; + private String topicName; + private String userName; + private String userPassword; + private String protocol; + private String contentType; + private int maxBatchSize; + private int maxRecoveryQueueSize; + + public Builder(@Nonnull String hostName, @Nonnull String topicName) { + // required values + this.hostName = hostName; + this.topicName = topicName; + // Default values + this.portNumber = DEFAULT_PORT_NUMBER; + this.userName = DEFAULT_USER_NAME; + this.userPassword = DEFAULT_USER_PASSWORD; + this.protocol = DEFAULT_PROTOCOL; + this.contentType = DEFAULT_CONTENT_TYPE; + this.maxBatchSize = DEFAULT_PUBLISHER_MAX_BATCH_SIZE; + this.maxRecoveryQueueSize = DEFAULT_PUBLISHER_MAX_RECOVERY_QUEUE_SIZE; + } + + /** + * Setup for custom host port number - Defaults to 80. + * + * @param portNumber custom port number + * @return Builder object itself for chaining + */ + public Builder setPortNumber(@Nonnull Integer portNumber) { + this.portNumber = portNumber; + return this; + } + + + /** + * Setup user name for authentication. If no username is provided authentication will be disabled + * + * @param userName user name for DMaaP Topic Authentication + * @return Builder object itself for chaining + */ + public Builder setUserName(@Nonnull String userName) { + this.userName = userName; + return this; + } + + + /** + * Setup user password for authentication. If no password is provided authentication will be disabled + * + * @param userPassword user password for DMaaP Topic Authentication + * @return Builder object itself for chaining + */ + public Builder setUserPassword(@Nonnull String userPassword) { + this.userPassword = userPassword; + return this; + } + + + /** + * Setup custom Publisher protocol - Defaults to https. + * Note: Only http and https are currently supported. + * + * @param protocol protocol e.g. https + * @return Builder object itself for chaining + */ + public Builder setProtocol(@Nonnull String protocol) { + this.protocol = normalizeValidateProtocol(protocol); + return this; + } + + + /** + * Setup custom Publisher content-type - Defaults to application/json + * + * @param contentType content type e.g. application/json + * @return Builder object itself for chaining + */ + public Builder setContentType(@Nonnull String contentType) { + final String normalizedContentType = normalizeValidateContentType(contentType); + this.contentType = normalizedContentType; + return this; + } + + + /** + * Setup custom Publisher Max Batch Size - Defaults to 100 + * + * @param maxBatchSize max Batch Size + * @return Builder object itself for chaining + */ + public Builder setMaxBatchSize(int maxBatchSize) { + this.maxBatchSize = maxBatchSize; + return this; + } + + + /** + * Setup custom Maximum Recovery Queue Size. Recovery Queue is used to hold messages temporarily in case + * DMaaP MR Publisher topic is not responding for any reason. Defaults to 100,000 + * + * @param maxRecoveryQueueSize max recovery queue size + * @return Builder object itself for chaining + */ + public Builder setMaxRecoveryQueueSize(int maxRecoveryQueueSize) { + this.maxRecoveryQueueSize = maxRecoveryQueueSize; + return this; + } + + /** + * Creates immutable instance of {@link DMaaPMRPublisherConfig} + * + * @return Builds and returns thread safe, immutable {@link DMaaPMRPublisherConfig} object + */ + public DMaaPMRPublisherConfig build() { + return new DMaaPMRPublisherConfig(hostName, portNumber, topicName, protocol, userName, userPassword, + contentType, maxBatchSize, maxRecoveryQueueSize); + } + + } + + + /** + * Returns max Publisher Batch Queue Size + * + * @return max Publisher Batch Queue size + */ + public int getMaxBatchSize() { + return maxBatchSize; + } + + /** + * Returns max Publisher Recovery Queue Size + * + * @return max Recovery Queue size + */ + public int getMaxRecoveryQueueSize() { + return maxRecoveryQueueSize; + } + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + if (!super.equals(o)) { + return false; + } + DMaaPMRPublisherConfig that = (DMaaPMRPublisherConfig) o; + return maxBatchSize == that.maxBatchSize && + maxRecoveryQueueSize == that.maxRecoveryQueueSize; + } + + @Override + public int hashCode() { + return Objects.hashCode(super.hashCode(), maxBatchSize, maxRecoveryQueueSize); + } + + + @Override + public String toString() { + return Objects.toStringHelper(this) + .add("baseConfig", super.toString()) + .add("maxBatchSize", maxBatchSize) + .add("maxRecoveryQueueSize", maxRecoveryQueueSize) + .toString(); + } +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/config/DMaaPMRSubscriberConfig.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/config/DMaaPMRSubscriberConfig.java new file mode 100644 index 0000000..9741fa5 --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/config/DMaaPMRSubscriberConfig.java @@ -0,0 +1,298 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.domain.config; + +import com.google.common.base.Objects; + +import java.util.UUID; + +import javax.annotation.Nonnull; + +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.DEFAULT_SUBSCRIBER_GROUP_PREFIX; +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.DEFAULT_SUBSCRIBER_MESSAGE_LIMIT; +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.DEFAULT_SUBSCRIBER_TIMEOUT_MS; + +/** + * <p> + * Immutable DMaaP MR Configuration for Subscriber. + * <p> + * Use {@link DMaaPMRSubscriberConfig.Builder} to construct Subscriber Configuration + * <p> + * + * @author Rajiv Singla. Creation Date: 10/12/2016. + */ +public final class DMaaPMRSubscriberConfig extends DMaaPMRBaseConfig { + + private final String consumerId; + private final String consumerGroup; + private final Integer timeoutMS; + private final Integer messageLimit; + + private DMaaPMRSubscriberConfig(@Nonnull String hostName, + @Nonnull Integer portNumber, + @Nonnull String topicName, + @Nonnull String protocol, + @Nonnull String userName, + @Nonnull String userPassword, + @Nonnull String contentType, + @Nonnull String consumerId, + @Nonnull String consumerGroup, + @Nonnull Integer timeoutMS, + @Nonnull Integer messageLimit) { + this.hostName = hostName; + this.portNumber = portNumber; + this.topicName = topicName; + this.protocol = protocol; + this.userName = userName; + this.userPassword = userPassword; + this.contentType = contentType; + this.consumerId = consumerId; + this.consumerGroup = consumerGroup; + this.timeoutMS = timeoutMS; + this.messageLimit = messageLimit; + } + + /** + * Builder to initialize immutable {@link DMaaPMRSubscriberConfig} object + */ + public static class Builder { + + private String hostName; + private Integer portNumber; + private String topicName; + private String userName; + private String userPassword; + private String protocol; + private String contentType; + private String consumerId; + private String consumerGroup; + private Integer timeoutMS; + private Integer messageLimit; + + public Builder(@Nonnull String hostName, + @Nonnull String topicName) { + // Required Values + this.hostName = hostName; + this.topicName = topicName; + + // Default values + this.portNumber = DEFAULT_PORT_NUMBER; + this.userName = DEFAULT_USER_NAME; + this.userPassword = DEFAULT_USER_PASSWORD; + this.protocol = DEFAULT_PROTOCOL; + this.contentType = DEFAULT_CONTENT_TYPE; + this.consumerId = UUID.randomUUID().toString(); // consumer is assigned a random id by default + this.consumerGroup = DEFAULT_SUBSCRIBER_GROUP_PREFIX + consumerId; // random group is assigned + this.timeoutMS = DEFAULT_SUBSCRIBER_TIMEOUT_MS; // defaults to 10ms timeout + this.messageLimit = DEFAULT_SUBSCRIBER_MESSAGE_LIMIT; // defaults to 1000 message limit + } + + + /** + * Setup for custom host port number - Defaults to 80. + * + * @param portNumber custom port number + * @return Builder object itself for chaining + */ + public Builder setPortNumber(@Nonnull Integer portNumber) { + this.portNumber = portNumber; + return this; + } + + + /** + * Setup user name for authentication. If no username is provided authentication will be disabled + * + * @param userName user name for DMaaP Topic Authentication + * @return Builder object itself for chaining + */ + public Builder setUserName(@Nonnull String userName) { + this.userName = userName; + return this; + } + + + /** + * Setup user password for authentication. If no password is provided authentication will be disabled + * + * @param userPassword user password for DMaaP Topic Authentication + * @return Builder object itself for chaining + */ + public Builder setUserPassword(@Nonnull String userPassword) { + this.userPassword = userPassword; + return this; + } + + + /** + * Setup custom Subscriber protocol - Defaults to https. + * Note: Only http and https are currently supported. + * + * @param protocol protocol e.g. https or http + * @return Builder object itself for chaining + */ + public Builder setProtocol(@Nonnull String protocol) { + + this.protocol = normalizeValidateProtocol(protocol); + return this; + } + + /** + * Setup custom Subscriber content-type - Defaults to application/json + * + * @param contentType content type e.g. application/json + * @return Builder object itself for chaining + */ + public Builder setContentType(@Nonnull String contentType) { + final String normalizedContentType = normalizeValidateContentType(contentType); + this.contentType = normalizedContentType; + return this; + } + + + /** + * Setup custom Consumer Id - Defaults to random Id + * + * @param consumerId - custom consumer ID + * @return Builder object itself for chaining + */ + public Builder setConsumerId(@Nonnull String consumerId) { + this.consumerId = consumerId; + return this; + } + + /** + * Setup custom Consumer Group - Default to OpenDCAE-DMaaPSub-ConsumerID + * + * @param consumerGroup - custom Consumer Group + * @return Builder object itself for chaining + */ + public Builder setConsumerGroup(@Nonnull String consumerGroup) { + this.consumerGroup = consumerGroup; + return this; + } + + /** + * Setup Custom Subscriber timeout in ms - Default to no timeout limit + * + * @param timeoutMS timeout in milliseconds + * @return Builder object itself for chaining + */ + public Builder setTimeoutMS(@Nonnull Integer timeoutMS) { + this.timeoutMS = timeoutMS; + return this; + } + + /** + * Setup custom Subscriber Message Limit - Default to no limit + * + * @param messageLimit message Limit + * @return Builder object itself for chaining + */ + public Builder setMessageLimit(@Nonnull Integer messageLimit) { + this.messageLimit = messageLimit; + return this; + } + + /** + * Builds Immutable instance of {@link DMaaPMRSubscriberConfig} + * + * @return immutable DMaaP Subscriber Config Object + */ + public DMaaPMRSubscriberConfig build() { + return new DMaaPMRSubscriberConfig(hostName, portNumber, topicName, protocol, userName, userPassword, + contentType, consumerId, consumerGroup, timeoutMS, messageLimit); + } + + } + + + /** + * DMaaP MR Subscriber Consumer Id + * + * @return consumer Id + */ + public String getConsumerId() { + return consumerId; + } + + /** + * DMaaP MR Subscriber Consumer Group + * + * @return consumer group + */ + public String getConsumerGroup() { + return consumerGroup; + } + + /** + * DMaaP MR Subscriber Timeout in ms + * + * @return subscriber timeout ms + */ + public Integer getTimeoutMS() { + return timeoutMS; + } + + /** + * DMaaP MR Subscriber message limit + * + * @return subscriber message limit + */ + public Integer getMessageLimit() { + return messageLimit; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + if (!super.equals(o)) { + return false; + } + DMaaPMRSubscriberConfig that = (DMaaPMRSubscriberConfig) o; + return Objects.equal(consumerId, that.consumerId) && + Objects.equal(consumerGroup, that.consumerGroup) && + Objects.equal(timeoutMS, that.timeoutMS) && + Objects.equal(messageLimit, that.messageLimit); + } + + @Override + public int hashCode() { + return Objects.hashCode(super.hashCode(), consumerId, consumerGroup, timeoutMS, messageLimit); + } + + + @Override + public String toString() { + return Objects.toStringHelper(this) + .add("baseConfig", super.toString()) + .add("consumerId", consumerId) + .add("consumerGroup", consumerGroup) + .add("timeoutMS", timeoutMS) + .add("messageLimit", messageLimit) + .toString(); + } +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/response/DMaaPMRPublisherResponse.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/response/DMaaPMRPublisherResponse.java new file mode 100644 index 0000000..ad6a86f --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/response/DMaaPMRPublisherResponse.java @@ -0,0 +1,38 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.domain.response; + +/** + * <p> + * Contract for all DMaaPMR Publisher Response + * <p> + * @author Rajiv Singla. Creation Date: 10/13/2016. + */ +public interface DMaaPMRPublisherResponse extends DMaaPMRResponse { + + + /** + * Gets number of pending messages + * + * @return pending messages in the batch queue + */ + int getPendingMessagesCount(); +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/response/DMaaPMRPublisherResponseImpl.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/response/DMaaPMRPublisherResponseImpl.java new file mode 100644 index 0000000..dd1dfe8 --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/response/DMaaPMRPublisherResponseImpl.java @@ -0,0 +1,70 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.domain.response; + +import com.google.common.base.Objects; + +import javax.annotation.Nonnull; + +/** + * <p> + * An simple implementation of {@link DMaaPMRPublisherResponse} + * <p> + * @author Rajiv Singla. Creation Date: 10/13/2016. + */ +public class DMaaPMRPublisherResponseImpl implements DMaaPMRPublisherResponse { + + private final Integer responseCode; + private final String responseMessage; + private final int pendingMessagesCount; + + public DMaaPMRPublisherResponseImpl(@Nonnull Integer responseCode, + @Nonnull String responseMessage, + int pendingMessagesCount) { + this.responseCode = responseCode; + this.responseMessage = responseMessage; + this.pendingMessagesCount = pendingMessagesCount; + } + + @Override + public Integer getResponseCode() { + return responseCode; + } + + @Override + public String getResponseMessage() { + return responseMessage; + } + + @Override + public int getPendingMessagesCount() { + return pendingMessagesCount; + } + + @Override + public String toString() { + return Objects.toStringHelper(this) + .add("responseCode", responseCode) + .add("responseMessage", responseMessage) + .add("pendingMessagesCount", pendingMessagesCount) + .toString(); + } +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/response/DMaaPMRResponse.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/response/DMaaPMRResponse.java new file mode 100644 index 0000000..7dc7523 --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/response/DMaaPMRResponse.java @@ -0,0 +1,46 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.domain.response; + +/** + * <p> + * Contract for DMaaP MR Responses + * <p> + * @author Rajiv Singla. Creation Date: 10/13/2016. + */ +public interface DMaaPMRResponse { + + /** + * Gets HTTP Response Code + * + * @return HTTP Response code as String + */ + Integer getResponseCode(); + + /** + * Gets Response Message + * + * @return Response Message + */ + String getResponseMessage(); + + +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/response/DMaaPMRSubscriberResponse.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/response/DMaaPMRSubscriberResponse.java new file mode 100644 index 0000000..fd1a9e3 --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/response/DMaaPMRSubscriberResponse.java @@ -0,0 +1,40 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.domain.response; + +import java.util.List; + +/** + * <p> + * Contract for all DMaaP MR Subscriber Responses + * </p> + * @author Rajiv Singla. Creation Date: 10/13/2016. + */ +public interface DMaaPMRSubscriberResponse extends DMaaPMRResponse { + + /** + * Returns message fetched from DMaaP MR Topic + * + * @return collection of actual message retrieved from DMaaP MR Topic + */ + List<String> getFetchedMessages(); + +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/response/DMaaPMRSubscriberResponseImpl.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/response/DMaaPMRSubscriberResponseImpl.java new file mode 100644 index 0000000..1254654 --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/domain/response/DMaaPMRSubscriberResponseImpl.java @@ -0,0 +1,80 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.domain.response; + +import com.google.common.base.Objects; +import com.google.common.collect.ImmutableList; + +import java.util.List; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import static java.util.Collections.unmodifiableList; + +/** + * <p> + * A simple implementation for {@link DMaaPMRSubscriberResponse} + * <p> + * @author Rajiv Singla. Creation Date: 10/13/2016. + */ +public class DMaaPMRSubscriberResponseImpl implements DMaaPMRSubscriberResponse { + + private final Integer responseCode; + private final String responseMessage; + private final List<String> fetchedMessages; + + public DMaaPMRSubscriberResponseImpl(@Nonnull Integer responseCode, + @Nonnull String responseMessage, + @Nullable List<String> fetchedMessages) { + this.responseCode = responseCode; + this.responseMessage = responseMessage; + this.fetchedMessages = fetchedMessages != null ? fetchedMessages : ImmutableList.<String>of(); + } + + public DMaaPMRSubscriberResponseImpl(Integer responseCode, String responseMessage) { + this(responseCode, responseMessage, null); + } + + @Override + public Integer getResponseCode() { + return responseCode; + } + + @Override + public String getResponseMessage() { + return responseMessage; + } + + @Override + public List<String> getFetchedMessages() { + return unmodifiableList(fetchedMessages); + } + + @Override + public String toString() { + return Objects.toStringHelper(this) + .add("responseCode", responseCode) + .add("responseMessage", responseMessage) + .add("fetchedMessages(size)", fetchedMessages.size()) + .toString(); + } +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/module/AnalyticsDMaaPModule.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/module/AnalyticsDMaaPModule.java new file mode 100644 index 0000000..1296798 --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/module/AnalyticsDMaaPModule.java @@ -0,0 +1,62 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.module; + +import com.google.inject.AbstractModule; +import com.google.inject.assistedinject.FactoryModuleBuilder; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisher; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisherFactory; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisherImpl; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisherQueue; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisherQueueFactory; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisherQueueImpl; +import org.openecomp.dcae.analytics.dmaap.service.subscriber.DMaaPMRSubscriber; +import org.openecomp.dcae.analytics.dmaap.service.subscriber.DMaaPMRSubscriberFactory; +import org.openecomp.dcae.analytics.dmaap.service.subscriber.DMaaPMRSubscriberImpl; + +/** + * Guice Module to wire concrete implementations with interfaces + * <p> + * @author Rajiv Singla. Creation Date: 10/20/2016. + */ +public class AnalyticsDMaaPModule extends AbstractModule { + + + @Override + protected void configure() { + + // Bind Http Client + bind(CloseableHttpClient.class).toInstance(HttpClients.createDefault()); + + // Bind Publishing queue + install(new FactoryModuleBuilder().implement(DMaaPMRPublisherQueue.class, DMaaPMRPublisherQueueImpl.class) + .build(DMaaPMRPublisherQueueFactory.class)); + + install(new FactoryModuleBuilder().implement(DMaaPMRPublisher.class, DMaaPMRPublisherImpl.class) + .build(DMaaPMRPublisherFactory.class)); + + install(new FactoryModuleBuilder().implement(DMaaPMRSubscriber.class, DMaaPMRSubscriberImpl.class) + .build(DMaaPMRSubscriberFactory.class)); + + } +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/BaseDMaaPMRComponent.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/BaseDMaaPMRComponent.java new file mode 100644 index 0000000..e7e8ea4 --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/BaseDMaaPMRComponent.java @@ -0,0 +1,356 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.base.Optional; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.lang3.StringEscapeUtils; +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Pair; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.util.EntityUtils; +import org.openecomp.dcae.analytics.common.AnalyticsConstants; +import org.openecomp.dcae.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.openecomp.dcae.analytics.common.utils.HTTPUtils; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRPublisherConfig; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRSubscriberConfig; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRPublisherResponse; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRPublisherResponseImpl; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRSubscriberResponse; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRSubscriberResponseImpl; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisherQueue; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.charset.Charset; +import java.util.LinkedList; +import java.util.List; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import static java.lang.String.format; + +/** + * Base class for DMaaP MR Publishers and Subscriber Implementations containing various utility methods + * + * @author Rajiv Singla. Creation Date: 11/1/2016. + */ +public abstract class BaseDMaaPMRComponent implements DMaaPMRComponent { + + private static final Logger LOG = LoggerFactory.getLogger(BaseDMaaPMRComponent.class); + + private static final ObjectMapper objectMapper = new ObjectMapper(); + + /** + * Creates Base64 encoded Auth Header for given userName and Password + * If either user name of password are null return absent + * + * @param userName username + * @param userPassword user password + * @return base64 encoded auth header if username or password are both non null + */ + protected static Optional<String> getAuthHeader(final @Nullable String userName, + final @Nullable String userPassword) { + if (userName == null || userPassword == null) { + return Optional.absent(); + } else { + final String auth = userName + ":" + userPassword; + final Charset isoCharset = Charset.forName("ISO-8859-1"); + byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(isoCharset)); + return Optional.of("Basic " + new String(encodedAuth, isoCharset)); + } + } + + + /** + * Creates Publisher URI for given {@link DMaaPMRPublisherConfig} + * + * @param publisherConfig publisher settings + * + * @return DMaaP MR Publisher Topic URI that can be used to post messages to MR Topic + */ + protected static URI createPublisherURI(final DMaaPMRPublisherConfig publisherConfig) { + final String hostName = publisherConfig.getHostName(); + final Integer portNumber = publisherConfig.getPortNumber(); + final String getProtocol = publisherConfig.getProtocol(); + final String topicName = publisherConfig.getTopicName(); + URI publisherURI = null; + try { + publisherURI = new URIBuilder().setScheme(getProtocol).setHost(hostName).setPort(portNumber) + .setPath(AnalyticsConstants.DMAAP_URI_PATH_PREFIX + topicName).build(); + } catch (URISyntaxException e) { + final String errorMessage = format("Error while creating publisher URI: %s", e); + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); + } + LOG.info("Created DMaaP MR Publisher URI: {}", publisherURI); + return publisherURI; + } + + + /** + * Creates Subscriber URI for given {@link DMaaPMRSubscriberConfig} + * + * @param subscriberConfig subscriber settings + * + * @return DMaaP MR Subscriber Topic URI that can be used to fetch messages from MR topic + */ + protected static URI createSubscriberURI(final DMaaPMRSubscriberConfig subscriberConfig) { + final String hostName = subscriberConfig.getHostName(); + final Integer portNumber = subscriberConfig.getPortNumber(); + final String getProtocol = subscriberConfig.getProtocol(); + final String topicName = subscriberConfig.getTopicName(); + final String consumerId = subscriberConfig.getConsumerId(); + final String consumerGroup = subscriberConfig.getConsumerGroup(); + final Integer timeoutMS = subscriberConfig.getTimeoutMS(); + final Integer messageLimit = subscriberConfig.getMessageLimit(); + URI subscriberURI = null; + try { + URIBuilder uriBuilder = new URIBuilder().setScheme(getProtocol).setHost(hostName).setPort(portNumber) + .setPath(AnalyticsConstants.DMAAP_URI_PATH_PREFIX + + topicName + "/" + + consumerGroup + "/" + + consumerId); + // add query params if present + if (timeoutMS > 0) { + uriBuilder.addParameter(AnalyticsConstants.SUBSCRIBER_TIMEOUT_QUERY_PARAM_NAME, timeoutMS.toString()); + } + if (messageLimit > 0) { + uriBuilder.addParameter(AnalyticsConstants.SUBSCRIBER_MSG_LIMIT_QUERY_PARAM_NAME, + messageLimit.toString()); + } + subscriberURI = uriBuilder.build(); + + } catch (URISyntaxException e) { + final String errorMessage = format("Error while creating subscriber URI: %s", e); + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); + } + + LOG.info("Created DMaaP MR Subscriber URI: {}", subscriberURI); + return subscriberURI; + } + + + /** + * Creates 202 (Accepted) Response code message + * + * @param batchQueueSize batch Queue size + * + * @return response with 202 message code + */ + protected static DMaaPMRPublisherResponse createPublisherAcceptedResponse(int batchQueueSize) { + return createPublisherResponse(HTTPUtils.HTTP_ACCEPTED_RESPONSE_CODE, + "Accepted - Messages queued for batch publishing to MR Topic", batchQueueSize); + } + + + /** + * Creates 204 (No Content) Response code message + * + * @return response with 204 message code + */ + protected static DMaaPMRPublisherResponse createPublisherNoContentResponse() { + return createPublisherResponse(HTTPUtils.HTTP_NO_CONTENT_RESPONSE_CODE, + "No Content - No Messages in batch queue for flushing to MR Topic", 0); + } + + + /** + * Creates Publisher Response for given response code, response Message and pending Message Count + * + * @param responseCode HTTP Status Code + * @param responseMessage response message + * @param pendingMessages pending messages in batch queue + * + * @return DMaaP MR Publisher Response + */ + protected static DMaaPMRPublisherResponse createPublisherResponse(int responseCode, String + responseMessage, int pendingMessages) { + return new DMaaPMRPublisherResponseImpl(responseCode, responseMessage, pendingMessages); + } + + + /** + * Returns weekly consistent pending messages in batch queue + * + * @param publisherQueue batch queue + * @param publisherConfig publisher settings + * + * @return pending messages to be published + */ + protected static int getPendingMessages(final @Nonnull DMaaPMRPublisherQueue publisherQueue, + final @Nonnull DMaaPMRPublisherConfig publisherConfig) { + return publisherConfig.getMaxBatchSize() - publisherQueue.getBatchQueueRemainingSize(); + } + + + /** + * Creates Subscriber Response for give response Code, response Message and fetch messages + * + * @param responseCode response Code + * @param responseMessage response Message + * @param fetchedMessages fetched messages + * + * @return DMaaP MR Subscriber Response + */ + protected static DMaaPMRSubscriberResponse createSubscriberResponse(int responseCode, String + responseMessage, List<String> fetchedMessages) { + if (fetchedMessages == null) { + return new DMaaPMRSubscriberResponseImpl(responseCode, responseMessage); + } else { + return new DMaaPMRSubscriberResponseImpl(responseCode, responseMessage, fetchedMessages); + } + } + + + /** + * Custom response handler which extract status code and response body + * + * @return Pair containing Response code and response body + */ + protected static ResponseHandler<Pair<Integer, String>> responseHandler() { + return new ResponseHandler<Pair<Integer, String>>() { + @Override + public Pair<Integer, String> handleResponse(HttpResponse response) throws IOException { + // Get Response status code + final int status = response.getStatusLine().getStatusCode(); + final HttpEntity responseEntity = response.getEntity(); + // If response entity is not null - extract response body as string + String responseEntityString = ""; + if (responseEntity != null) { + responseEntityString = EntityUtils.toString(responseEntity); + } + return new ImmutablePair<>(status, responseEntityString); + } + }; + } + + + /** + * Adds message to Publisher recovery queue. If recovery queue is full throws an error as messages will + * be lost + * + * @param publisherQueue publisher queue + * @param messages recoverable messages to be published to recovery queue + */ + protected static void addMessagesToRecoveryQueue(DMaaPMRPublisherQueue publisherQueue, + List<String> messages) { + try { + publisherQueue.addRecoverableMessages(messages); + + LOG.debug("Messages Added to Recovery Queue. Messages Size: {}, Recovery Queue Remaining Size: {}", + messages.size(), publisherQueue.getBatchQueueRemainingSize()); + + } catch (IllegalStateException e) { + final String errorMessage = format("Unable to put messages in recovery queue. Messages will be lost. " + + "Recovery Queue might be full. Message Size: %d, Recovery Queue Remaining Capacity: %d", + messages.size(), publisherQueue.getRecoveryQueueRemainingSize()); + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); + } + } + + + /** + * Converts List of messages to Json String Array which can be published to DMaaP MR topic. + * + * @param messages messages that need to parsed to Json Array representation + * @return json string representation of message + */ + protected static String convertToJsonString(final @Nullable List<String> messages) { + // If messages are null or empty just return empty array + if (messages == null || messages.size() == 0) { + return "[]"; + } + + + List<JsonNode> jsonMessageObjectsList = new LinkedList<>(); + + try { + for (String message : messages) { + final JsonNode jsonNode = objectMapper.readTree(message); + jsonMessageObjectsList.add(jsonNode); + } + return objectMapper.writeValueAsString(jsonMessageObjectsList); + } catch (JsonProcessingException e) { + final String errorMessage = + format("Unable to convert publisher messages to Json. Messages: %s, Json Error: %s", + messages, e); + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); + + } catch (IOException e) { + final String errorMessage = + format("IO Exception while converting publisher messages to Json. Messages: %s, Json Error: %s", + messages, e); + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); + } + } + + + /** + * Converts subscriber messages json string to List of messages. If message Json String is empty + * or null + * + * @param messagesJsonString json messages String + * + * @return List containing DMaaP MR Messages + */ + protected static List<String> convertJsonToStringMessages(final @Nullable String messagesJsonString) { + + final LinkedList<String> messages = new LinkedList<>(); + + // If message string is not null or not empty parse json message array to List of string messages + if (!(messagesJsonString == null) && !messagesJsonString.trim().isEmpty() + && !messagesJsonString.trim().equals("[]")) { + + try { + final List messageList = objectMapper.readValue(messagesJsonString, List.class); + for (Object message : messageList) { + final String jsonMessageString = objectMapper.writeValueAsString(message); + if (jsonMessageString.startsWith("\"") && jsonMessageString.endsWith("\"")) { + final String jsonSubString = jsonMessageString.substring(1, jsonMessageString.length() - 1); + messages.add(StringEscapeUtils.unescapeJson(jsonSubString)); + } else { + messages.add(StringEscapeUtils.unescapeJson(jsonMessageString)); + } + } + + } catch (IOException e) { + final String errorMessage = + format("Unable to convert subscriber Json String to Messages. Subscriber Response String: %s," + + " Json Error: %s", messagesJsonString, e); + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); + } + + } + return messages; + } + + +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/DMaaPMRComponent.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/DMaaPMRComponent.java new file mode 100644 index 0000000..6f9a0ce --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/DMaaPMRComponent.java @@ -0,0 +1,29 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.service; + +/** + * Marker interface for all DMaaP MR Components e.g. MR Publishers, MR Subscribers + * + * @author Rajiv Singla. Creation Date: 11/1/2016. + */ +public interface DMaaPMRComponent { +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisher.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisher.java new file mode 100644 index 0000000..afbdf9f --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisher.java @@ -0,0 +1,96 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.service.publisher; + +import org.openecomp.dcae.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRPublisherConfig; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRPublisherResponse; + +import java.util.Date; +import java.util.List; + +/** + * <p> + * DMaaP MR Publisher can be used to publish messages to DMaaP MR Topics. + * <p> + * + * @author Rajiv Singla. Creation Date: 10/13/2016. + */ +public interface DMaaPMRPublisher extends AutoCloseable { + + + /** + * <p> + * Adds collection of messages to DMaaP MR Topic Publishing Queue. + * <p> + * Note: Invoking this method may or may not cause publishing immediately + * as publishing in done is batch mode by default. Parameter maxBatchSize + * in {@link DMaaPMRPublisherConfig} is used to determine max batch queue size. + * If the maxBatchSize is reached all message will be published automatically + * during subsequent call. + * </p> + * + * @param messages messages to publish to DMaaP MR Publisher + * @return response which may contain Http Response code 202 (Accepted) as publishing + * will proceed when max batch size is reached + * + * @throws DCAEAnalyticsRuntimeException DCAEAnalyticsRuntimeException + */ + DMaaPMRPublisherResponse publish(List<String> messages) throws DCAEAnalyticsRuntimeException; + + + /** + * <p> + * Forces publishing of messages to DMaaP MR Topic and returns {@link DMaaPMRPublisherResponse} + * which can be inspected for HTTP status code of publishing call to DMaaP MR Topic. + * </p> + * + * @param messages messages to publish to DMaaP MR Publisher + * @return DMaaP Message Router Publisher Response + * + * @throws DCAEAnalyticsRuntimeException DCAEAnalyticsRuntimeException + */ + DMaaPMRPublisherResponse forcePublish(List<String> messages) throws DCAEAnalyticsRuntimeException; + + + /** + * <p> + * Forces publishing of messages in Publisher queue to DMaaP MR Topic and returns + * {@link DMaaPMRPublisherResponse}.If there are no messages were in the queue to + * be flushed response code 304 (Not Modified) will be returned + * </p> + * + * @return DMaaP Message Router Publisher Response + */ + DMaaPMRPublisherResponse flush(); + + + /** + * <p> + * Returns the creation time when Publisher instance was created. + * <p> + * + * @return creation time of Subscriber instance + */ + Date getPublisherCreationTime(); + + +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherFactory.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherFactory.java new file mode 100644 index 0000000..74245f8 --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherFactory.java @@ -0,0 +1,42 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.service.publisher; + +import org.openecomp.dcae.analytics.dmaap.DMaaPMRFactory; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRPublisherConfig; + +/** + * <p> + * Factory to initialize instance of {@link DMaaPMRPublisher} for Guice DI injection purposes. + * <p> + * <strong> + * NOTE: Client should not use this Factory to initialize {@link DMaaPMRPublisher} unless they + * are wiring dependencies using Guice. Client must use {@link DMaaPMRFactory} to initialize + * guice injected Publisher instances + * </strong> + * <p> + * @author Rajiv Singla. Creation Date: 10/20/2016. + */ +public interface DMaaPMRPublisherFactory { + + DMaaPMRPublisher create(DMaaPMRPublisherConfig publisherConfig); + +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherImpl.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherImpl.java new file mode 100644 index 0000000..425bead --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherImpl.java @@ -0,0 +1,211 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.service.publisher; + +import com.google.common.base.Optional; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.inject.Inject; +import com.google.inject.assistedinject.Assisted; +import org.apache.commons.lang3.tuple.Pair; +import org.apache.http.HttpHeaders; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.openecomp.dcae.analytics.common.AnalyticsConstants; +import org.openecomp.dcae.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRPublisherConfig; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRPublisherResponse; +import org.openecomp.dcae.analytics.dmaap.service.BaseDMaaPMRComponent; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.net.URI; +import java.util.Date; +import java.util.List; + +import static org.openecomp.dcae.analytics.common.utils.HTTPUtils.isSuccessfulResponseCode; +import static java.lang.String.format; + +/** + * Concrete Implementation of {@link DMaaPMRPublisher} which uses {@link HttpClient} + * + * @author Rajiv Singla. Creation Date: 10/13/2016. + */ +public class DMaaPMRPublisherImpl extends BaseDMaaPMRComponent implements DMaaPMRPublisher { + + private static final Logger LOG = LoggerFactory.getLogger(DMaaPMRPublisherImpl.class); + + private final DMaaPMRPublisherConfig publisherConfig; + private final CloseableHttpClient closeableHttpClient; + private final DMaaPMRPublisherQueue publisherQueue; + private final Date publisherCreationTime; + private URI publisherUri; + + @Inject + public DMaaPMRPublisherImpl(@Assisted DMaaPMRPublisherConfig publisherConfig, + DMaaPMRPublisherQueueFactory dMaaPMRPublisherQueueFactory, + CloseableHttpClient closeableHttpClient) { + + this.publisherConfig = publisherConfig; + this.publisherQueue = dMaaPMRPublisherQueueFactory.create( + publisherConfig.getMaxBatchSize(), publisherConfig.getMaxRecoveryQueueSize()); + this.closeableHttpClient = closeableHttpClient; + this.publisherUri = createPublisherURI(publisherConfig); + this.publisherCreationTime = new Date(); + } + + + @Override + public DMaaPMRPublisherResponse publish(List<String> messages) throws DCAEAnalyticsRuntimeException { + + final int batchQueueRemainingSize = publisherQueue.getBatchQueueRemainingSize(); + + // if messages size is less than batch queue size - just queue them for batch publishing + if (batchQueueRemainingSize > messages.size()) { + LOG.debug("Adding messages to batch Queue. No flushing required. Messages Size:{}. Batch Queue Size:{}", + messages.size(), batchQueueRemainingSize); + final int batchQueueSize = publisherQueue.addBatchMessages(messages); + return createPublisherAcceptedResponse(batchQueueSize); + + } else { + + // grab all already queued messages, append current messages and force publish them to DMaaP MR topic + final List<String> queueMessages = publisherQueue.getMessageForPublishing(); + LOG.debug("Batch Queue capacity exceeds messages size. Flushing of all pending messages to DMaaP MR " + + "Publisher Topic."); + final DMaaPMRPublisherResponse forcePublishResponse = + forcePublish(Lists.newLinkedList(Iterables.concat(queueMessages, messages))); + return forcePublishResponse; + } + + } + + @Override + public DMaaPMRPublisherResponse forcePublish(List<String> messages) throws DCAEAnalyticsRuntimeException { + + LOG.debug("Force publishing messages to DMaaP MR Topic. Messages Size: {}", messages.size()); + + final String contentType = publisherConfig.getContentType(); + final String userName = publisherConfig.getUserName(); + final String userPassword = publisherConfig.getUserPassword(); + final HttpPost postRequest = new HttpPost(publisherUri); + + // add Authorization Header if username and password are present + final Optional<String> authHeader = getAuthHeader(userName, userPassword); + if (authHeader.isPresent()) { + postRequest.addHeader(HttpHeaders.AUTHORIZATION, authHeader.get()); + } else { + LOG.debug("DMaaP MR Publisher Authentication is disabled as username or password is not present."); + } + + // Create post string entity + final String messagesJson = convertToJsonString(messages); + final StringEntity requestEntity = + new StringEntity(messagesJson, ContentType.create(contentType, "UTF-8")); + postRequest.setEntity(requestEntity); + + try { + final Pair<Integer, String> responsePair = closeableHttpClient.execute(postRequest, responseHandler()); + final Integer responseCode = responsePair.getLeft(); + final String responseBody = responsePair.getRight(); + // if messages were published successfully, return successful response + if (isSuccessfulResponseCode(responseCode)) { + LOG.debug("DMaaP MR Messages published successfully. DMaaP Response Code: {}. DMaaP Response " + + "Body: {}, Number of Messages published: {}", + responseCode, responseBody, messages.size()); + + } else { + LOG.warn("Unable to publish messages to DMaaP MR Topic. DMaaP Response Code: {}, DMaaP Response " + + "Body: {}. Messages will be queued in recovery queue", responseCode, responseBody); + addMessagesToRecoveryQueue(publisherQueue, messages); + } + + return createPublisherResponse(responseCode, responseBody, + getPendingMessages(publisherQueue, publisherConfig)); + + } catch (IOException e) { + // If IO Error then we need to also put messages in recovery queue + addMessagesToRecoveryQueue(publisherQueue, messages); + final String errorMessage = format("IO Exception while publishing messages to DMaaP Topic. " + + "Messages will be queued in recovery queue. Messages Size: %d", messages.size()); + + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); + } + + } + + + @Override + public DMaaPMRPublisherResponse flush() { + final List<String> queueMessages = publisherQueue.getMessageForPublishing(); + // If there are no message return 204 (No Content) response code + if (queueMessages.size() == 0) { + LOG.debug("No messages to publish to batch queue. Returning 204 status code"); + return createPublisherNoContentResponse(); + } else { + // force publish messages in queue + return forcePublish(queueMessages); + } + } + + @Override + public Date getPublisherCreationTime() { + return new Date(publisherCreationTime.getTime()); + } + + @Override + public void close() throws Exception { + + // flush current message in the queue + int retrialNumber = 0; + int flushResponseCode; + + // automatic retries if messages cannot be flushed + do { + retrialNumber++; + DMaaPMRPublisherResponse flushResponse = flush(); + flushResponseCode = flushResponse.getResponseCode(); + + if (!isSuccessfulResponseCode(flushResponseCode)) { + LOG.warn("Unable to flush batch messages to publisher due to DMaaP MR invalid Response: {}. " + + "Retrial No: {} of Max {} Retries", flushResponseCode, retrialNumber, + AnalyticsConstants.PUBLISHER_MAX_FLUSH_RETRIES_ON_CLOSE); + + Thread.sleep(AnalyticsConstants.PUBLISHER_DELAY_MS_ON_RETRIES_ON_CLOSE); + } + } while (retrialNumber <= AnalyticsConstants.PUBLISHER_MAX_FLUSH_RETRIES_ON_CLOSE && + !isSuccessfulResponseCode(flushResponseCode)); + + if (!isSuccessfulResponseCode(flushResponseCode)) { + LOG.error("Unable to flush batch messages to publisher. Messages loss cannot be prevented"); + } else { + LOG.info("Successfully published all batched messages to publisher."); + } + + // close http client + closeableHttpClient.close(); + + } +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherQueue.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherQueue.java new file mode 100644 index 0000000..cb3c113 --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherQueue.java @@ -0,0 +1,89 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.service.publisher; + +import java.util.List; + +/** + * <p> + * DMaaP MR Publisher Queue handles back pressure in case DMaaP MR Publisher topic + * is offline for some reason. It does so by having a recovery queue which keeps + * messages in order in case there is temporary interruption in DMaaP Publisher + * </p> + * + * @author Rajiv Singla. Creation Date: 11/1/2016. + */ +public interface DMaaPMRPublisherQueue { + + /** + * <p> + * Add batchMessages to Batch Queue + * </p> + * + * @param batchMessages messages that needs to be added to batch queue + * @return current size of batch queue + * + * @throws IllegalStateException if batch queue does not have enough space + */ + int addBatchMessages(List<String> batchMessages) throws IllegalStateException; + + + /** + * <p> + * Add recoverable messages to Recoverable Queue + * </p> + * + * @param recoverableMessages messages that needs to be added to recoverable queue + * @return current size of the recoverable queue + * + * @throws IllegalStateException if recoverable queue does not have enough space + */ + int addRecoverableMessages(List<String> recoverableMessages) throws IllegalStateException; + + /** + * <p> + * Get messages that need to be published to DMaaP topic. Messages in recoverable + * queue are appended if present. + * </p> + * + * @return List of messages from both batch and recovery queue + */ + List<String> getMessageForPublishing(); + + /** + * <p> + * Remaining capacity of Batch Queue + * </p> + * + * @return Remaining Batch Queue Size + */ + int getBatchQueueRemainingSize(); + + /** + * <p> + * Remaining capacity of Recovery Queue + * </p> + * + * @return Remaining Recovery Queue Size + */ + int getRecoveryQueueRemainingSize(); + +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherQueueFactory.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherQueueFactory.java new file mode 100644 index 0000000..bfc3dab --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherQueueFactory.java @@ -0,0 +1,37 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.service.publisher; + +import com.google.inject.assistedinject.Assisted; + +/** + * <p> + * Factory to initialize instance of {@link DMaaPMRPublisherQueue} for Guice DI injection purposes. + * <p> + * + * @author Rajiv Singla. Creation Date: 11/1/2016. + */ +public interface DMaaPMRPublisherQueueFactory { + + DMaaPMRPublisherQueue create(@Assisted("batchQueueSize") int batchQueueSize, + @Assisted("recoveryQueueSize") int recoveryQueueSize); + +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherQueueImpl.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherQueueImpl.java new file mode 100644 index 0000000..0367950 --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherQueueImpl.java @@ -0,0 +1,124 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.service.publisher; + +import com.google.inject.Inject; +import com.google.inject.assistedinject.Assisted; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.LinkedBlockingDeque; + +import static com.google.common.collect.Iterables.concat; +import static com.google.common.collect.Lists.newLinkedList; +import static java.util.Collections.unmodifiableList; + +/** + * <p> + * An implementation of {@link DMaaPMRPublisherQueue} which uses {@link java.util.concurrent.BlockingDeque} + * for batch and recovery queues + * </p> + * + * + * @author Rajiv Singla. Creation Date: 11/1/2016. + */ +public class DMaaPMRPublisherQueueImpl implements DMaaPMRPublisherQueue { + + private static final Logger LOG = LoggerFactory.getLogger(DMaaPMRPublisherQueueImpl.class); + + private final LinkedBlockingDeque<String> batchQueue; + private final LinkedBlockingDeque<String> recoveryQueue; + + @Inject + public DMaaPMRPublisherQueueImpl(@Assisted("batchQueueSize") int batchQueueSize, + @Assisted("recoveryQueueSize") int recoveryQueueSize) { + batchQueue = new LinkedBlockingDeque<>(batchQueueSize); + recoveryQueue = new LinkedBlockingDeque<>(recoveryQueueSize); + LOG.debug("Creating Instance of DMaaP Publisher Queue. BatchQueueSize: {}, RecoveryQueueSize: {}", + batchQueueSize, recoveryQueueSize); + } + + @Override + public synchronized int addBatchMessages(List<String> batchMessages) throws IllegalStateException { + + // checks if batchMessages size does not exceed batch queue capacity + if (batchMessages.size() > batchQueue.remainingCapacity()) { + throw new IllegalStateException("Not enough capacity to add batchMessages in batch queue"); + } + + // Add batchMessages to batch queue + for (String message : batchMessages) { + batchQueue.add(message); + } + + // returns current elements size in batch queue + return batchQueue.size(); + } + + @Override + public synchronized int addRecoverableMessages(List<String> recoverableMessages) throws IllegalStateException { + + // checks if messages size does not exceed recovery queue size + if (recoverableMessages.size() > recoveryQueue.remainingCapacity()) { + throw new IllegalStateException("Not enough capacity to add messages in recovery queue"); + } + + // add messages to recovery queue + for (String recoverableMessage : recoverableMessages) { + recoveryQueue.add(recoverableMessage); + } + + // returns current size of recovery queue + return recoveryQueue.size(); + } + + @Override + public synchronized List<String> getMessageForPublishing() { + + final List<String> recoveryMessageList = new LinkedList<>(); + final List<String> batchMessagesList = new LinkedList<>(); + + // get messages from recovery queue if present + if (recoveryQueue.size() > 0) { + recoveryQueue.drainTo(recoveryMessageList); + } + + // get messages from batch queue if present + if (batchQueue.size() > 0) { + batchQueue.drainTo(batchMessagesList); + } + + // concat recovery and batch queue elements + return unmodifiableList(newLinkedList(concat(recoveryMessageList, batchMessagesList))); + } + + @Override + public synchronized int getBatchQueueRemainingSize() { + return batchQueue.remainingCapacity(); + } + + @Override + public synchronized int getRecoveryQueueRemainingSize() { + return recoveryQueue.remainingCapacity(); + } +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/subscriber/DMaaPMRSubscriber.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/subscriber/DMaaPMRSubscriber.java new file mode 100644 index 0000000..096c0a9 --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/subscriber/DMaaPMRSubscriber.java @@ -0,0 +1,60 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.service.subscriber; + +import org.openecomp.dcae.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRPublisherConfig; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRSubscriberResponse; + +import java.util.Date; + +/** + * <p> + * DMaaP MR Subscriber can be used to subscribe messages from DMaaP MR Topics. + * <p> + * + * @author Rajiv Singla. Creation Date: 10/13/2016. + */ +public interface DMaaPMRSubscriber extends AutoCloseable { + + /** + * Fetches Messages from DMaaP MR Topic. {@link DMaaPMRPublisherConfig} settings parameters + * for messageLimit and message timeout are used + * + * @return DMaaP Message Router Subscriber Response + * + * @throws DCAEAnalyticsRuntimeException DCAE Analytics Exception + */ + DMaaPMRSubscriberResponse fetchMessages() throws DCAEAnalyticsRuntimeException; + + + /** + * Returns the Subscriber instance creation time + * <p> + * NOTE: Due to DMaaP API Design - Subscribers can only fetch messages which + * are published to the topic after the creation of the Subscriber. + * + * @return creation time of Subscriber instance + */ + Date getSubscriberCreationTime(); + + +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/subscriber/DMaaPMRSubscriberFactory.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/subscriber/DMaaPMRSubscriberFactory.java new file mode 100644 index 0000000..33c405e --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/subscriber/DMaaPMRSubscriberFactory.java @@ -0,0 +1,40 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.service.subscriber; + +import org.openecomp.dcae.analytics.dmaap.DMaaPMRFactory; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRSubscriberConfig; + +/** + * Factory to initialize instance of {@link DMaaPMRSubscriber} for Guice DI injection purposes. + * <p> + * <strong> + * NOTE: Client should not use this Factory to initialize {@link DMaaPMRSubscriber} unless they + * are wiring dependencies using Guice. Client must use {@link DMaaPMRFactory} to initialize + * guice injected Subscriber instances + * </strong> + * <p> + * @author Rajiv Singla. Creation Date: 10/20/2016. + */ +public interface DMaaPMRSubscriberFactory { + + DMaaPMRSubscriber create(DMaaPMRSubscriberConfig subscriberConfig); +} diff --git a/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/subscriber/DMaaPMRSubscriberImpl.java b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/subscriber/DMaaPMRSubscriberImpl.java new file mode 100644 index 0000000..6d98189 --- /dev/null +++ b/dcae-analytics-dmaap/src/main/java/org/openecomp/dcae/analytics/dmaap/service/subscriber/DMaaPMRSubscriberImpl.java @@ -0,0 +1,129 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.service.subscriber; + +import com.google.common.base.Optional; +import com.google.inject.Inject; +import com.google.inject.assistedinject.Assisted; +import org.apache.commons.lang3.tuple.Pair; +import org.apache.http.HttpHeaders; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.openecomp.dcae.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRSubscriberConfig; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRSubscriberResponse; +import org.openecomp.dcae.analytics.dmaap.service.BaseDMaaPMRComponent; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.net.URI; +import java.util.Date; +import java.util.LinkedList; +import java.util.List; + +import static org.openecomp.dcae.analytics.common.utils.HTTPUtils.isSuccessfulResponseCode; +import static java.lang.String.format; + +/** + * Concrete Implementation of {@link DMaaPMRSubscriber} which uses {@link HttpClient} + * + * @author Rajiv Singla. Creation Date: 10/13/2016. + */ +public class DMaaPMRSubscriberImpl extends BaseDMaaPMRComponent implements DMaaPMRSubscriber { + + private static final Logger LOG = LoggerFactory.getLogger(DMaaPMRSubscriberImpl.class); + + private final DMaaPMRSubscriberConfig subscriberConfig; + private final CloseableHttpClient closeableHttpClient; + private final URI subscriberUri; + private final Date subscriberCreationTime; + + @Inject + public DMaaPMRSubscriberImpl(@Assisted DMaaPMRSubscriberConfig subscriberConfig, + CloseableHttpClient closeableHttpClient) { + this.subscriberConfig = subscriberConfig; + this.closeableHttpClient = closeableHttpClient; + this.subscriberUri = createSubscriberURI(subscriberConfig); + this.subscriberCreationTime = new Date(); + } + + @Override + public DMaaPMRSubscriberResponse fetchMessages() throws DCAEAnalyticsRuntimeException { + + final String userName = subscriberConfig.getUserName(); + final String userPassword = subscriberConfig.getUserPassword(); + + final HttpGet getRequest = new HttpGet(subscriberUri); + + // add Authorization Header if username and password are present + final Optional<String> authHeader = getAuthHeader(userName, userPassword); + if (authHeader.isPresent()) { + getRequest.addHeader(HttpHeaders.AUTHORIZATION, authHeader.get()); + } else { + LOG.debug("DMaaP MR Subscriber Authentication is disabled as username or password is not present."); + } + + try { + + final Pair<Integer, String> responsePair = closeableHttpClient.execute(getRequest, responseHandler()); + final Integer responseCode = responsePair.getLeft(); + final String responseBody = responsePair.getRight(); + + List<String> fetchedMessages = new LinkedList<>(); + String responseMessage = responseBody; + + // if messages were published successfully, return successful response + if (isSuccessfulResponseCode(responseCode)) { + if (responseBody != null) { + fetchedMessages = convertJsonToStringMessages(responseBody); + responseMessage = "Messages Fetched Successfully"; + } else { + responseMessage = "DMaaP Response Body had no messages"; + } + } else { + LOG.error("Unable to fetch messages to DMaaP MR Topic. DMaaP MR unsuccessful Response Code: {}, " + + "DMaaP Response Body: {}", responseCode, responseBody); + } + + return createSubscriberResponse(responseCode, responseMessage, fetchedMessages); + + } catch (IOException e) { + + final String errorMessage = + format("IO Exception while fetching messages from DMaaP Topic. Exception %s", e); + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); + } + + + } + + @Override + public Date getSubscriberCreationTime() { + return new Date(subscriberCreationTime.getTime()); + } + + @Override + public void close() throws Exception { + closeableHttpClient.close(); + } +} diff --git a/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/BaseAnalyticsDMaaPGuiceUnitTest.java b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/BaseAnalyticsDMaaPGuiceUnitTest.java new file mode 100644 index 0000000..522b057 --- /dev/null +++ b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/BaseAnalyticsDMaaPGuiceUnitTest.java @@ -0,0 +1,31 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap; + +import org.junit.runner.RunWith; +import org.openecomp.dcae.analytics.test.runner.GuiceJUnitRunner; + +/** + * @author Rajiv Singla. Creation Date: 10/20/2016. + */ +@RunWith(GuiceJUnitRunner.class) +public abstract class BaseAnalyticsDMaaPGuiceUnitTest extends BaseAnalyticsDMaaPUnitTest { +} diff --git a/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/BaseAnalyticsDMaaPUnitTest.java b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/BaseAnalyticsDMaaPUnitTest.java new file mode 100644 index 0000000..75e3ec4 --- /dev/null +++ b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/BaseAnalyticsDMaaPUnitTest.java @@ -0,0 +1,99 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap; + +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRPublisherConfig; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRSubscriberConfig; +import org.openecomp.dcae.analytics.test.BaseDCAEAnalyticsUnitTest; + +import java.util.List; + +import static com.google.common.collect.ImmutableList.of; + +/** + * @author Rajiv Singla. Creation Date: 10/14/2016. + */ +public abstract class BaseAnalyticsDMaaPUnitTest extends BaseDCAEAnalyticsUnitTest { + + // Unit Test Settings + protected static final String HOST_NAME = "testHostName"; + protected static final Integer PORT_NUMBER = 8080; + protected static final String TOPIC_NAME = "testTopicName"; + protected static final String USERNAME = "testUserName"; + protected static final String PASSWORD = "testPassword"; + protected static final String HTTP_PROTOCOL = "https"; + protected static final String CONTENT_TYPE = "application/json"; + + protected static final int PUBLISHER_MAX_BATCH_QUEUE_SIZE = 200; + protected static final int PUBLISHER_MAX_RECOVERY_QUEUE_SIZE = 2000; + + protected static final String SUBSCRIBER_CONSUMER_ID = "123"; + protected static final String SUBSCRIBER_CONSUMER_GROUP_NAME = "testGonsumerName-" + SUBSCRIBER_CONSUMER_ID; + protected static final int SUBSCRIBER_TIMEOUT_MS = 2000; + protected static final int SUBSCRIBER_MESSAGE_LIMIT = 20; + + /** + * Creates Sample Publisher settings for unit testing purposes + * + * @return sample publisher settings for testing + */ + protected static DMaaPMRPublisherConfig getPublisherConfig() { + return new DMaaPMRPublisherConfig.Builder(HOST_NAME, TOPIC_NAME) + .setPortNumber(PORT_NUMBER) + .setProtocol(HTTP_PROTOCOL) + .setUserName(USERNAME) + .setUserPassword(PASSWORD) + .setContentType(CONTENT_TYPE) + .setMaxRecoveryQueueSize(PUBLISHER_MAX_RECOVERY_QUEUE_SIZE) + .setMaxBatchSize(PUBLISHER_MAX_BATCH_QUEUE_SIZE).build(); + } + + /** + * Creates Sample Subscriber settings for unit testing purposes + * + * @return sample subscriber settings for testing + */ + protected static DMaaPMRSubscriberConfig getSubscriberConfig(String consumerId, String consumerGroup) { + return new DMaaPMRSubscriberConfig.Builder(HOST_NAME, TOPIC_NAME) + .setPortNumber(PORT_NUMBER) + .setUserName(USERNAME) + .setUserPassword(PASSWORD) + .setProtocol(HTTP_PROTOCOL) + .setContentType(CONTENT_TYPE) + .setConsumerGroup(consumerGroup != null ? consumerGroup : SUBSCRIBER_CONSUMER_GROUP_NAME) + .setConsumerId(consumerId != null ? consumerId : SUBSCRIBER_CONSUMER_ID) + .setTimeoutMS(SUBSCRIBER_TIMEOUT_MS) + .setMessageLimit(SUBSCRIBER_MESSAGE_LIMIT).build(); + } + + /** + * Creates two sample message for publishing + * + * @return sample publish message list + */ + protected static List<String> getTwoSampleMessages() { + String message1 = "{ \"message\" : \"Test Message1\"}"; + String message2 = "{ \"message\" : \"Test Message2\"}"; + return of(message1, message2); + } + + +} diff --git a/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/DMaaPMRFactoryTest.java b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/DMaaPMRFactoryTest.java new file mode 100644 index 0000000..646b48d --- /dev/null +++ b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/DMaaPMRFactoryTest.java @@ -0,0 +1,67 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap; + +import org.junit.Before; +import org.junit.Test; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRPublisherResponse; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRSubscriberResponse; +import org.openecomp.dcae.analytics.dmaap.module.AnalyticsDMaaPTestModule; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisher; +import org.openecomp.dcae.analytics.dmaap.service.subscriber.DMaaPMRSubscriber; +import org.openecomp.dcae.analytics.test.annotation.GuiceModules; + +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +/** + * @author Manjesh Gowda. Creation Date: 11/7/2016. + */ +@GuiceModules(AnalyticsDMaaPTestModule.class) +public class DMaaPMRFactoryTest extends BaseAnalyticsDMaaPGuiceUnitTest { + + private DMaaPMRFactory dmaapMRFactory; + + @Before + public void setUp() throws Exception { + dmaapMRFactory = new DMaaPMRFactory(new AnalyticsDMaaPTestModule()); + } + + @Test + public void createPublisher() throws Exception { + DMaaPMRPublisher publisher = dmaapMRFactory.createPublisher(getPublisherConfig()); + DMaaPMRPublisherResponse response = publisher.publish(null); + assertThat(response.getResponseCode(), is(102)); + } + + @Test + public void createSubscriber() throws Exception { + DMaaPMRSubscriber dmaapMRSubscriber = dmaapMRFactory.createSubscriber(getSubscriberConfig("", "")); + DMaaPMRSubscriberResponse response = dmaapMRSubscriber.fetchMessages(); + assertThat(response.getResponseCode(), is(102)); + } + + @Test + public void create() throws Exception { + + } + +} diff --git a/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/domain/config/DMaaPMRPublisherConfigTest.java b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/domain/config/DMaaPMRPublisherConfigTest.java new file mode 100644 index 0000000..a66d3f2 --- /dev/null +++ b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/domain/config/DMaaPMRPublisherConfigTest.java @@ -0,0 +1,86 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.domain.config; + +import org.junit.Test; +import org.openecomp.dcae.analytics.dmaap.BaseAnalyticsDMaaPUnitTest; + +import static org.junit.Assert.assertTrue; +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.DEFAULT_PUBLISHER_MAX_BATCH_SIZE; +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.DEFAULT_PUBLISHER_MAX_RECOVERY_QUEUE_SIZE; +import static org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRConfig.DEFAULT_CONTENT_TYPE; +import static org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRConfig.DEFAULT_PORT_NUMBER; +import static org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRConfig.DEFAULT_PROTOCOL; +import static org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRConfig.DEFAULT_USER_NAME; +import static org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRConfig.DEFAULT_USER_PASSWORD; + +/** + * @author Rajiv Singla. Creation Date: 10/14/2016. + */ +public class DMaaPMRPublisherConfigTest extends BaseAnalyticsDMaaPUnitTest { + + + @Test + public void testPublisherConfigDefaults() throws Exception { + + final DMaaPMRPublisherConfig actualDefaultPublisherConfig = + new DMaaPMRPublisherConfig.Builder(HOST_NAME, TOPIC_NAME).build(); + + final DMaaPMRPublisherConfig expectedDefaultPublisherConfig = + new DMaaPMRPublisherConfig.Builder(HOST_NAME, TOPIC_NAME) + .setPortNumber(DEFAULT_PORT_NUMBER) + .setUserName(DEFAULT_USER_NAME) + .setUserPassword(DEFAULT_USER_PASSWORD) + .setContentType(DEFAULT_CONTENT_TYPE) + .setProtocol(DEFAULT_PROTOCOL) + .setMaxBatchSize(DEFAULT_PUBLISHER_MAX_BATCH_SIZE) + .setMaxRecoveryQueueSize(DEFAULT_PUBLISHER_MAX_RECOVERY_QUEUE_SIZE) + .build(); + + assertTrue("Default Publisher Config parameters must match", + actualDefaultPublisherConfig.equals(expectedDefaultPublisherConfig)); + + } + + + @Test + public void testPublisherCustomConfig() throws Exception { + + + final DMaaPMRPublisherConfig actualCustomPublisherConfig = getPublisherConfig(); + + final DMaaPMRPublisherConfig expectedCustomPublisherConfig = + new DMaaPMRPublisherConfig.Builder(HOST_NAME, TOPIC_NAME) + .setPortNumber(PORT_NUMBER) + .setUserName(USERNAME) + .setUserPassword(PASSWORD) + .setContentType(CONTENT_TYPE) + .setProtocol(HTTP_PROTOCOL) + .setMaxBatchSize(PUBLISHER_MAX_BATCH_QUEUE_SIZE) + .setMaxRecoveryQueueSize(PUBLISHER_MAX_RECOVERY_QUEUE_SIZE) + .build(); + + assertTrue("Custom Publisher Config parameters must match", + actualCustomPublisherConfig.equals(expectedCustomPublisherConfig)); + } + + +} diff --git a/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/domain/config/DMaaPMRSubscriberConfigTest.java b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/domain/config/DMaaPMRSubscriberConfigTest.java new file mode 100644 index 0000000..10edc0c --- /dev/null +++ b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/domain/config/DMaaPMRSubscriberConfigTest.java @@ -0,0 +1,91 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.domain.config; + +import org.junit.Test; +import org.openecomp.dcae.analytics.dmaap.BaseAnalyticsDMaaPUnitTest; + +import static org.junit.Assert.assertTrue; +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.DEFAULT_SUBSCRIBER_GROUP_PREFIX; +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.DEFAULT_SUBSCRIBER_MESSAGE_LIMIT; +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.DEFAULT_SUBSCRIBER_TIMEOUT_MS; +import static org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRConfig.DEFAULT_CONTENT_TYPE; +import static org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRConfig.DEFAULT_PORT_NUMBER; +import static org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRConfig.DEFAULT_PROTOCOL; +import static org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRConfig.DEFAULT_USER_NAME; + +/** + * @author Rajiv Singla. Creation Date: 10/14/2016. + */ +public class DMaaPMRSubscriberConfigTest extends BaseAnalyticsDMaaPUnitTest { + + @Test + public void testSubscriberConfigDefaults() throws Exception { + + DMaaPMRSubscriberConfig actualDefaultSubscriberConfig = + new DMaaPMRSubscriberConfig.Builder(HOST_NAME, TOPIC_NAME) + .setConsumerGroup(DEFAULT_SUBSCRIBER_GROUP_PREFIX + SUBSCRIBER_CONSUMER_ID) + .setConsumerId(SUBSCRIBER_CONSUMER_ID).build(); + + DMaaPMRSubscriberConfig expectedSubscriberConfig = + new DMaaPMRSubscriberConfig.Builder(HOST_NAME, TOPIC_NAME) + .setPortNumber(DEFAULT_PORT_NUMBER) + .setUserName(DEFAULT_USER_NAME) + .setContentType(DEFAULT_CONTENT_TYPE) + .setProtocol(DEFAULT_PROTOCOL) + .setConsumerGroup(DEFAULT_SUBSCRIBER_GROUP_PREFIX + SUBSCRIBER_CONSUMER_ID) + .setConsumerId(SUBSCRIBER_CONSUMER_ID) + .setMessageLimit(DEFAULT_SUBSCRIBER_MESSAGE_LIMIT) + .setTimeoutMS(DEFAULT_SUBSCRIBER_TIMEOUT_MS) + .build(); + + assertTrue("Default Subscriber Config parameters must match", + actualDefaultSubscriberConfig.equals(expectedSubscriberConfig)); + + } + + + @Test + public void testSubscriberCustomConfig() throws Exception { + + DMaaPMRSubscriberConfig actualSubscriberCustomConfig = getSubscriberConfig(SUBSCRIBER_CONSUMER_ID, + SUBSCRIBER_CONSUMER_GROUP_NAME); + + DMaaPMRSubscriberConfig expectedSubscriberCustomConfig = + new DMaaPMRSubscriberConfig.Builder(HOST_NAME, TOPIC_NAME) + .setPortNumber(PORT_NUMBER) + .setUserName(USERNAME) + .setUserPassword(PASSWORD) + .setContentType(CONTENT_TYPE) + .setProtocol(HTTP_PROTOCOL) + .setConsumerGroup(SUBSCRIBER_CONSUMER_GROUP_NAME) + .setConsumerId(SUBSCRIBER_CONSUMER_ID) + .setMessageLimit(SUBSCRIBER_MESSAGE_LIMIT) + .setTimeoutMS(SUBSCRIBER_TIMEOUT_MS) + .build(); + + assertTrue("Custom Subscriber Config parameters must match", + actualSubscriberCustomConfig.equals(expectedSubscriberCustomConfig)); + + } + + +} diff --git a/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/it/BaseAnalyticsDMaaPIT.java b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/it/BaseAnalyticsDMaaPIT.java new file mode 100644 index 0000000..987b57b --- /dev/null +++ b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/it/BaseAnalyticsDMaaPIT.java @@ -0,0 +1,110 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.it; + +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRPublisherConfig; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRSubscriberConfig; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRPublisherResponse; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisher; +import org.openecomp.dcae.analytics.test.BaseDCAEAnalyticsIT; + +import java.util.List; + +import static com.google.common.collect.ImmutableList.of; + +/** + * Base class for all DCAE DMaaP Integration Tests + * <p> + * @author Rajiv Singla. Creation Date: 10/13/2016. + */ +public abstract class BaseAnalyticsDMaaPIT extends BaseDCAEAnalyticsIT { + + // Integration Test Settings + protected static final String HOST_NAME = "mrlocal-mtnjftle01.homer.com"; + protected static final Integer PORT_NUMBER = 3905; + protected static final String TOPIC_NAME = "com.dcae.dmaap.mtnje2.DcaeTestVESPub"; + + protected static final String USERNAME = "m00502@tca.af.dcae.com"; + protected static final String PASSWORD = "Te5021abc"; + protected static final String HTTP_PROTOCOL = "https"; + protected static final String CONTENT_TYPE = "application/json"; + + protected static final int PUBLISHER_MAX_BATCH_QUEUE_SIZE = 20; + protected static final int PUBLISHER_MAX_RECOVERY_QUEUE_SIZE = 200; + + protected static final String SUBSCRIBER_CONSUMER_ID = "123"; + protected static final String SUBSCRIBER_CONSUMER_GROUP_NAME = "testGonsumerName-" + SUBSCRIBER_CONSUMER_ID; + protected static final int SUBSCRIBER_TIMEOUT_MS = 2000; + protected static final int SUBSCRIBER_MESSAGE_LIMIT = 20; + + /** + * Creates Sample Publisher settings for integration testing purposes + * + * @return + */ + protected static DMaaPMRPublisherConfig getPublisherConfig() { + return new DMaaPMRPublisherConfig.Builder(HOST_NAME, TOPIC_NAME) + .setPortNumber(PORT_NUMBER) + .setProtocol(HTTP_PROTOCOL) + .setContentType(CONTENT_TYPE) + .setUserName(USERNAME) + .setUserPassword(PASSWORD) + .setMaxBatchSize(PUBLISHER_MAX_BATCH_QUEUE_SIZE) + .setMaxRecoveryQueueSize(PUBLISHER_MAX_RECOVERY_QUEUE_SIZE) + .build(); + } + + /** + * Creates Sample Subscriber settings for integration testing purposes + * + * @return + */ + protected static DMaaPMRSubscriberConfig getSubscriberConfig(String consumerId) { + return new DMaaPMRSubscriberConfig.Builder(HOST_NAME, TOPIC_NAME) + .setPortNumber(PORT_NUMBER) + .setProtocol(HTTP_PROTOCOL) + .setContentType(CONTENT_TYPE) + .setUserName(USERNAME) + .setUserPassword(PASSWORD) + .setConsumerGroup(SUBSCRIBER_CONSUMER_GROUP_NAME) + .setConsumerId(consumerId != null ? consumerId : SUBSCRIBER_CONSUMER_ID) + .setTimeoutMS(SUBSCRIBER_TIMEOUT_MS) + .setMessageLimit(SUBSCRIBER_MESSAGE_LIMIT).build(); + } + + /** + * Publishes 2 sample message to DMaaP Topic for integration test purposes + * + * @param dMaaPMRPublisher + * @return + */ + protected static DMaaPMRPublisherResponse publishTwoSampleMessages(DMaaPMRPublisher dMaaPMRPublisher) { + DMaaPMRPublisherResponse dMaaPMRPublisherResponse = dMaaPMRPublisher.publish(getTwoSampleMessage()); + return dMaaPMRPublisherResponse; + } + + protected static List<String> getTwoSampleMessage() { + String message1 = "{ \"message\" : \"Test Message1\"}"; + String message2 = "{ \"message\" : \"Test Message2\"}"; + return of(message1, message2); + } + +} diff --git a/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/it/DMaaPMRPublisherImplIT.java b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/it/DMaaPMRPublisherImplIT.java new file mode 100644 index 0000000..a7e1f8c --- /dev/null +++ b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/it/DMaaPMRPublisherImplIT.java @@ -0,0 +1,56 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.it; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.openecomp.dcae.analytics.dmaap.DMaaPMRFactory; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRPublisherResponse; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisher; + +/** + * @author Rajiv Singla. Creation Date: 10/13/2016. + */ +public class DMaaPMRPublisherImplIT extends BaseAnalyticsDMaaPIT { + + private DMaaPMRPublisher dMaaPMRPublisher; + + @Before + public void before() throws Exception { + DMaaPMRFactory dMaaPMRFactory = DMaaPMRFactory.create(); + dMaaPMRPublisher = dMaaPMRFactory.createPublisher(getPublisherConfig()); + } + + @Test + public void testPublish() throws Exception { + long pendingMessageCount = publishTwoSampleMessages(dMaaPMRPublisher).getPendingMessagesCount(); + Assert.assertTrue("Published Message Count must be 2", pendingMessageCount == 2); + } + + @Test + public void testFlush() throws Exception { + publishTwoSampleMessages(dMaaPMRPublisher); + DMaaPMRPublisherResponse publisherResponse = dMaaPMRPublisher.flush(); + Integer responseCode = publisherResponse.getResponseCode(); + Assert.assertTrue("Server Response code must be 200", responseCode == 200); + } +} diff --git a/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/it/DMaaPMRSubscriberImplIT.java b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/it/DMaaPMRSubscriberImplIT.java new file mode 100644 index 0000000..4b32e96 --- /dev/null +++ b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/it/DMaaPMRSubscriberImplIT.java @@ -0,0 +1,85 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.it; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.openecomp.dcae.analytics.dmaap.DMaaPMRFactory; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRPublisherResponse; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRSubscriberResponse; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisher; +import org.openecomp.dcae.analytics.dmaap.service.subscriber.DMaaPMRSubscriber; + +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; + +import static org.junit.Assert.assertTrue; + +/** + * @author Rajiv Singla. Creation Date: 10/13/2016. + */ +public class DMaaPMRSubscriberImplIT extends BaseAnalyticsDMaaPIT { + + private DMaaPMRPublisher dMaaPMRPublisher; + private DMaaPMRSubscriber dMaaPMRSubscriber; + + @Before + public void before() throws Exception { + String randomConsumerID = UUID.randomUUID().toString(); + DMaaPMRFactory dMaaPMRFactory = DMaaPMRFactory.create(); + dMaaPMRSubscriber = dMaaPMRFactory.createSubscriber(getSubscriberConfig(randomConsumerID)); + dMaaPMRPublisher = dMaaPMRFactory.createPublisher(getPublisherConfig()); + } + + @After + public void after() throws Exception { + dMaaPMRSubscriber.close(); + dMaaPMRPublisher.close(); + } + + + @Test + public void testFetchMessages() throws Exception { + + // This call is used to just register a brand new subscriber with DMaaP + DMaaPMRSubscriberResponse subscriberRegistrationResponse = dMaaPMRSubscriber.fetchMessages(); + assertTrue("Subscriber Registration Response code must be 200 confirming subscriber was registered " + + "successfully", subscriberRegistrationResponse.getResponseCode() == 200); + assertTrue("Subscriber Registration Response must not contain any messages", subscriberRegistrationResponse + .getFetchedMessages().size() == 0); + + // Force push couple of test messages + DMaaPMRPublisherResponse publisherResponse = dMaaPMRPublisher.forcePublish(getTwoSampleMessage()); + assertTrue("Message must be posted successfully before subscriber can fetch it", publisherResponse + .getResponseCode() == 200); + + // Now fetch messages from DMaaP + DMaaPMRSubscriberResponse subscriberResponse = dMaaPMRSubscriber.fetchMessages(); + List<String> messageList = new LinkedList<>(); + for (String message : subscriberResponse.getFetchedMessages()) { + messageList.add(message); + } + assertTrue("Subscriber message count must be 2", messageList.size() == 2); + } + +} diff --git a/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/module/AnalyticsDMaaPTestModule.java b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/module/AnalyticsDMaaPTestModule.java new file mode 100644 index 0000000..7ef44aa --- /dev/null +++ b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/module/AnalyticsDMaaPTestModule.java @@ -0,0 +1,60 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.module; + +import com.google.inject.AbstractModule; +import com.google.inject.assistedinject.FactoryModuleBuilder; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisher; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisherFactory; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisherMockImpl; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisherQueue; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisherQueueFactory; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisherQueueImpl; +import org.openecomp.dcae.analytics.dmaap.service.subscriber.DMaaPMRSubscriber; +import org.openecomp.dcae.analytics.dmaap.service.subscriber.DMaaPMRSubscriberFactory; +import org.openecomp.dcae.analytics.dmaap.service.subscriber.DMaaPMRSubscriberMockImpl; + +/** + * DMaaP Guice Test Module + * <p> + * @author Rajiv Singla. Creation Date: 10/20/2016. + */ +public class AnalyticsDMaaPTestModule extends AbstractModule { + + + @Override + protected void configure() { +// Bind Http Client + bind(CloseableHttpClient.class).toInstance(HttpClients.createDefault()); + + // Bind Publishing queue + install(new FactoryModuleBuilder().implement(DMaaPMRPublisherQueue.class, DMaaPMRPublisherQueueImpl.class) + .build(DMaaPMRPublisherQueueFactory.class)); + + install(new FactoryModuleBuilder().implement(DMaaPMRPublisher.class, DMaaPMRPublisherMockImpl.class) + .build(DMaaPMRPublisherFactory.class)); + + install(new FactoryModuleBuilder().implement(DMaaPMRSubscriber.class, DMaaPMRSubscriberMockImpl.class) + .build(DMaaPMRSubscriberFactory.class)); + } +} diff --git a/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/BaseDMaaPMRComponentTest.java b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/BaseDMaaPMRComponentTest.java new file mode 100644 index 0000000..4cc3f1e --- /dev/null +++ b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/BaseDMaaPMRComponentTest.java @@ -0,0 +1,340 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.google.common.base.Optional; +import org.apache.commons.lang3.tuple.Pair; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.StatusLine; +import org.apache.http.client.ResponseHandler; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.mockito.Mockito; +import org.openecomp.dcae.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.openecomp.dcae.analytics.dmaap.BaseAnalyticsDMaaPUnitTest; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRPublisherConfig; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRSubscriberConfig; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRSubscriberResponse; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisherQueue; + +import java.io.IOException; +import java.net.URI; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isA; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; + +/** + * @author Manjesh Gowda. Creation Date: 11/4/2016. + */ +public class BaseDMaaPMRComponentTest extends BaseAnalyticsDMaaPUnitTest { + + //region Get Authorization Header Tests + @Test + public void testGetAuthHeaderWithGoodValues() { + String expectedEncodedString = "Basic bTAwNTAyQHRjYS5hZi5kY2FlLmNvbTpUZTUwMjFhYmM="; + Optional<String> actualOutput = BaseDMaaPMRComponent.getAuthHeader("m00502@tca.af.dcae.com", "Te5021abc"); + assertTrue(" Authentication Header has value ", actualOutput.isPresent()); + assertEquals(" Authentication Header has value ", expectedEncodedString, actualOutput.get()); + } + + @Test + public void testGetAuthHeaderWithNullValues() { + Optional<String> actualOutput = BaseDMaaPMRComponent.getAuthHeader(null, null); + assertFalse(" Authentication Header has value ", actualOutput.isPresent()); + } + + @Test + public void testGetAuthHeaderWithUserNullValue() { + Optional<String> actualOutput = BaseDMaaPMRComponent.getAuthHeader("m00502@tca.af.dcae.com", null); + assertFalse(" Authentication Header has value ", actualOutput.isPresent()); + } + + @Test + public void testGetAuthHeaderWithPasswordNullValue() { + Optional<String> actualOutput = BaseDMaaPMRComponent.getAuthHeader(null, "Te5021abc"); + assertFalse(" Authentication Header has value ", actualOutput.isPresent()); + } + + /* @Test + public void testGetAuthHeaderWithEmptyValues() { + Optional<String> actualOutput = BaseDMaaPMRComponent.getAuthHeader("", ""); + assertFalse(" Authentication Header has value ", actualOutput.isPresent()); + } + + @Test + public void testGetAuthHeaderWithUserEmptyValue() { + Optional<String> actualOutput = BaseDMaaPMRComponent.getAuthHeader("m00502@tca.af.dcae.com", ""); + assertFalse(" Authentication Header has value ", actualOutput.isPresent()); + } + + @Test + public void testGetAuthHeaderWithPasswordEmptyValue() { + Optional<String> actualOutput = BaseDMaaPMRComponent.getAuthHeader("", "Te5021abc"); + assertFalse(" Authentication Header has value ", actualOutput.isPresent()); + }*/ + //endregion + + //region Publisher URI Tests + @Test + public void testCreatePublishURIWithGoodValues() { + URI actualURI = BaseDMaaPMRComponent.createPublisherURI(getPublisherConfig()); + String test = actualURI.toString(); + assertEquals("Generated Publisher URL is correct", + "https://testHostName:8080/events/testTopicName", actualURI.toString()); + } + + @Test(expected = DCAEAnalyticsRuntimeException.class) + public void testCreatePublishURIWithURISyntaxException() { + DMaaPMRPublisherConfig badPublisherConfig = new DMaaPMRPublisherConfig + .Builder(" dav /gh. ss/ asd ", "///@$%#-htps:<>!##") + .setPortNumber(0) + .setProtocol("https").build(); + + URI actualURI = BaseDMaaPMRComponent.createPublisherURI(badPublisherConfig); + } + + //endregion + + //region Subscriber URI Tests + @Test + public void testCreateSubscribeURIWithGoodValues() { + URI actualURI = BaseDMaaPMRComponent.createSubscriberURI( + getSubscriberConfig("test-consumer-group", "test-consumer-id")); + assertEquals("Generated Subscriber URL is correct", + "https://testHostName:8080/events/testTopicName/" + + "test-consumer-id/test-consumer-group?timeout=2000&limit=20", + actualURI.toString()); + } + + @Test(expected = DCAEAnalyticsRuntimeException.class) + public void testCreateSubscribeURIWithURISyntaxException() { + DMaaPMRSubscriberConfig badSubscriberConfig = new DMaaPMRSubscriberConfig + .Builder(" dav /gh. ss/ asd ", "") + .setPortNumber(PORT_NUMBER) + .setProtocol(HTTP_PROTOCOL) + .setContentType(CONTENT_TYPE).build(); + + URI actualURI = BaseDMaaPMRComponent.createSubscriberURI(badSubscriberConfig); + } + + //endregion + + //region Convert toJSON String tests + @Test + public void testConvertToJsonStringGoodJsonStringList() { + List<String> jsonMessage = Arrays.asList( + "{\"message\":\"I'm Object 1 Message\"}", + "{\"message\":\"I'm Object 2 Message\"}"); + + String actualJSONMsg = BaseDMaaPMRComponent.convertToJsonString(jsonMessage); + + String expectedJSONMsg = "[{\"message\":\"I'm Object 1 Message\"}," + + "{\"message\":\"I'm Object 2 Message\"}]"; + assertEquals("Convert a List of Strings to JSON is working fine", expectedJSONMsg, actualJSONMsg); + + } + + @Rule + public ExpectedException expectedJsonProcessingException = ExpectedException.none(); + + @Test + public void testConvertToJsonStringBadJsonStringList() { + expectedJsonProcessingException.expect(DCAEAnalyticsRuntimeException.class); + expectedJsonProcessingException.expectCause(isA(JsonProcessingException.class)); + + List<String> jsonMessage = Arrays.asList( + "{\"message\":\"I'm Object 1 Message\"", + "\"message\":\"I'm Object 2 Message\""); + + BaseDMaaPMRComponent.convertToJsonString(jsonMessage); + } + + @Test + public void testConvertToJsonStringWithEmptyList() { + List<String> jsonMessage = Arrays.asList(); + String actualJSONMsg = BaseDMaaPMRComponent.convertToJsonString(jsonMessage); + String expectedJSONMsg = "[]"; + assertEquals("Convert a List of Strings to JSON is working fine", expectedJSONMsg, actualJSONMsg); + } + + @Test + public void testConvertToJsonStringWithNullList() { + String actualJSONMsg = BaseDMaaPMRComponent.convertToJsonString(null); + String expectedJSONMsg = "[]"; + assertEquals("Convert a List of Strings to JSON is working fine", expectedJSONMsg, actualJSONMsg); + } + + //endregion + + //region Convert JSONtoString String tests + + @Test + public void testConvertJsonToStringMessagesGoodValues() { + String inputJSONMsg = "[{\"message\":\"I'm Object 1 Message\"}," + + "{\"message\":\"I'm Object 2 Message\"}]"; + List<String> actualList = BaseDMaaPMRComponent.convertJsonToStringMessages(inputJSONMsg); + assertThat(actualList, hasSize(2)); + assertThat(actualList, containsInAnyOrder( + "{\"message\":\"I'm Object 1 Message\"}", + "{\"message\":\"I'm Object 2 Message\"}" + )); + } + + @Test + public void testConvertJsonToStringMessagesNoValues() { + String inputJSONMsg = "[]"; + List<String> actualList = BaseDMaaPMRComponent.convertJsonToStringMessages(inputJSONMsg); + assertThat(actualList, hasSize(0)); + } + + @Test + public void testConvertJsonToStringMessagesNullValues() { + List<String> actualList = BaseDMaaPMRComponent.convertJsonToStringMessages(null); + assertThat(actualList, hasSize(0)); + } + + @Test + public void testConvertJsonToStringMessagesEmptyValues() { + List<String> actualList = BaseDMaaPMRComponent.convertJsonToStringMessages(" "); + assertThat(actualList, hasSize(0)); + } + + @Rule + public ExpectedException convertToJSONIOException = ExpectedException.none(); + + @Test + public void testConvertJsonToStringMessagesException() { + convertToJSONIOException.expect(DCAEAnalyticsRuntimeException.class); + convertToJSONIOException.expectCause(isA(IOException.class)); + + String inputJSONMsg = "[\"{\"message\":\"I'm Object 1 Message\"}\"," + + "\"{\"message\":\"I'm Object 2 Message\"}\"]"; + List<String> actualList = BaseDMaaPMRComponent.convertJsonToStringMessages(inputJSONMsg); + assertThat(actualList, hasSize(2)); + assertThat(actualList, containsInAnyOrder( + "{\"message\":\"I'm Object 1 Message\"}", + "{\"message\":\"I'm Object 2 Message\"}" + )); + } + + //endregion + + //region Test add message to recovery queue + @Test + public void testAddMessagesToRecoveryQueueAllGood() { + DMaaPMRPublisherQueue dmaapMRPublisherQueue = mock(DMaaPMRPublisherQueue.class); + given(dmaapMRPublisherQueue.addRecoverableMessages(Mockito.<String>anyList())).willReturn(0); + given(dmaapMRPublisherQueue.getBatchQueueRemainingSize()).willReturn(0); + List<String> messages = new ArrayList<String>(); + BaseDMaaPMRComponent.addMessagesToRecoveryQueue(dmaapMRPublisherQueue, messages); + } + + @Rule + public ExpectedException addQueueIllegalException = ExpectedException.none(); + + @Test + public void testAddMessagesToRecoveryQueueException() { + addQueueIllegalException.expect(isA(DCAEAnalyticsRuntimeException.class)); + addQueueIllegalException.expectCause(isA(IllegalStateException.class)); + + DMaaPMRPublisherQueue dmaapMRPublisherQueue = mock(DMaaPMRPublisherQueue.class); + + given(dmaapMRPublisherQueue.addRecoverableMessages(Mockito.<String>anyList())) + .willThrow(IllegalStateException.class); + List<String> messages = new ArrayList<String>(); + + BaseDMaaPMRComponent.addMessagesToRecoveryQueue(dmaapMRPublisherQueue, messages); + } + + //endregion + + //region Miscellaneous tests + + @Test + public void testResponseHandler() { + HttpResponse mockHttpResponse = mock(HttpResponse.class); + StatusLine mockStatusLine = mock(StatusLine.class); + HttpEntity mockHttpEntity = mock(HttpEntity.class); + // Could not mock EntityUtils as it's final class + //EntityUtils mockEntityUtils = mock(EntityUtils.class); + + given(mockHttpResponse.getStatusLine()).willReturn(mockStatusLine); + given(mockStatusLine.getStatusCode()).willReturn(200); + given(mockHttpResponse.getEntity()).willReturn(null); + //given(mockEntityUtils.toString()).willReturn("Test value"); + + ResponseHandler<Pair<Integer, String>> responseHandler = BaseDMaaPMRComponent.responseHandler(); + try { + Pair<Integer, String> mappedResponse = responseHandler.handleResponse(mockHttpResponse); + assertTrue("Http response code returned properly ", mappedResponse.getLeft().equals(200)); + assertTrue("Http response body returned properly ", mappedResponse.getRight().equals("")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + + //endregion + + //region createSubscriberResponse tests + @Test + public void testCreateSubscriberResponse() { + DMaaPMRSubscriberResponse dmaapMRSubscriberResponse = + BaseDMaaPMRComponent.createSubscriberResponse(200, "Test Message", getTwoSampleMessages()); + + assertThat(dmaapMRSubscriberResponse.getResponseCode(), is(200)); + assertEquals(dmaapMRSubscriberResponse.getResponseMessage(), "Test Message"); + assertThat(dmaapMRSubscriberResponse.getFetchedMessages().size(), is(2)); + + } + + @Test + public void testCreateSubscriberResponse_no_message() { + DMaaPMRSubscriberResponse dmaapMRSubscriberResponse = + BaseDMaaPMRComponent.createSubscriberResponse(200, "Test Message", null); + + assertThat(dmaapMRSubscriberResponse.getResponseCode(), is(200)); + assertEquals(dmaapMRSubscriberResponse.getResponseMessage(), "Test Message"); + assertThat(dmaapMRSubscriberResponse.getFetchedMessages().size(), is(0)); + + } + + //endregion +} + + + + + diff --git a/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherImplTest.java b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherImplTest.java new file mode 100644 index 0000000..a24bb39 --- /dev/null +++ b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherImplTest.java @@ -0,0 +1,212 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.service.publisher; + +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpUriRequest; +import org.apache.http.impl.client.CloseableHttpClient; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; +import org.openecomp.dcae.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.openecomp.dcae.analytics.dmaap.BaseAnalyticsDMaaPUnitTest; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRPublisherConfig; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRPublisherResponse; + +import java.io.IOException; +import java.util.ArrayList; + +import static org.hamcrest.CoreMatchers.isA; +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.assertThat; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +/** + * @author Rajiv Singla. Creation Date: 10/21/2016. + */ +@RunWith(MockitoJUnitRunner.class) +public class DMaaPMRPublisherImplTest extends BaseAnalyticsDMaaPUnitTest { + + @Mock + DMaaPMRPublisherQueueFactory dmaapMRPublisherQueueFactory; + @Mock + CloseableHttpClient closeableHttpClient; + @Mock + DMaaPMRPublisherQueue dmaapMRPublisherQueue; + + @Before + public void setUp() throws Exception { + given(dmaapMRPublisherQueueFactory.create(Mockito.anyInt(), Mockito.anyInt())) + .willReturn(dmaapMRPublisherQueue); + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testPublishSmallMessageList() throws Exception { + given(dmaapMRPublisherQueue.getBatchQueueRemainingSize()).willReturn(10); + given(dmaapMRPublisherQueue.addBatchMessages(Mockito.<String>anyList())).willReturn(2); + + DMaaPMRPublisherImpl dmaapMRPublisherImpl = new DMaaPMRPublisherImpl( + getPublisherConfig(), dmaapMRPublisherQueueFactory, closeableHttpClient); + + DMaaPMRPublisherResponse dmaapMRPublisherResponse = dmaapMRPublisherImpl.publish(getTwoSampleMessages()); + + assertThat(dmaapMRPublisherResponse.getResponseCode(), is(202)); + assertThat(dmaapMRPublisherResponse.getPendingMessagesCount(), is(2)); + assertThat(dmaapMRPublisherResponse.getResponseMessage(), + is("Accepted - Messages queued for batch publishing to MR Topic")); + } + + @Test + public void testPublishBigMessageList() throws Exception { + + given(dmaapMRPublisherQueue.getBatchQueueRemainingSize()).willReturn(0); + given(dmaapMRPublisherQueue.getMessageForPublishing()).willReturn(getTwoSampleMessages()); + Mockito.when( + closeableHttpClient.execute(Mockito.any(HttpUriRequest.class), Mockito.any(ResponseHandler.class))) + .thenReturn(new ImmutablePair<>(200, "Message successfully posted")); + + DMaaPMRPublisherImpl dmaapMRPublisherImpl = new DMaaPMRPublisherImpl( + getPublisherConfig(), dmaapMRPublisherQueueFactory, closeableHttpClient); + + DMaaPMRPublisherResponse dmaapMRPublisherResponse = dmaapMRPublisherImpl.publish(getTwoSampleMessages()); + + assertThat(dmaapMRPublisherResponse.getResponseCode(), is(200)); + assertThat(dmaapMRPublisherResponse.getPendingMessagesCount(), is(200)); + assertThat(dmaapMRPublisherResponse.getResponseMessage(), is("Message successfully posted")); + } + + @Test + public void testForcePublishSuccessful() throws Exception { + DMaaPMRPublisherConfig dmaapMRPublisherConfig = new + DMaaPMRPublisherConfig.Builder(HOST_NAME, TOPIC_NAME) + .setPortNumber(PORT_NUMBER) + .setProtocol(HTTP_PROTOCOL) + .setContentType(CONTENT_TYPE) + .setMaxRecoveryQueueSize(PUBLISHER_MAX_RECOVERY_QUEUE_SIZE) + .setMaxBatchSize(PUBLISHER_MAX_BATCH_QUEUE_SIZE).build(); + + HttpPost httpPost = Mockito.mock(HttpPost.class); + Mockito.when(closeableHttpClient.execute( + Mockito.any(HttpUriRequest.class), Mockito.any(ResponseHandler.class))) + .thenReturn(new ImmutablePair<>(200, "Message successfully posted")); + + DMaaPMRPublisherImpl dmaapMRPublisherImpl = new DMaaPMRPublisherImpl( + dmaapMRPublisherConfig, dmaapMRPublisherQueueFactory, closeableHttpClient); + DMaaPMRPublisherResponse response = dmaapMRPublisherImpl.forcePublish(getTwoSampleMessages()); + assertThat(response.getResponseCode(), is(200)); + } + + @Test + public void testForcePublishFailure() throws Exception { + Mockito.when(closeableHttpClient.execute( + Mockito.any(HttpUriRequest.class), Mockito.any(ResponseHandler.class))) + .thenReturn(new ImmutablePair<>(503, "Message successfully posted")); + + DMaaPMRPublisherImpl dmaapMRPublisherImpl = new DMaaPMRPublisherImpl( + getPublisherConfig(), dmaapMRPublisherQueueFactory, closeableHttpClient); + DMaaPMRPublisherResponse response = dmaapMRPublisherImpl.forcePublish(getTwoSampleMessages()); + assertThat(response.getResponseCode(), is(503)); + } + + @Rule + public ExpectedException httpIOException = ExpectedException.none(); + + @Test + public void testForcePublishHttpFailure() throws Exception { + + httpIOException.expect(DCAEAnalyticsRuntimeException.class); + httpIOException.expectCause(isA(IOException.class)); + + given(closeableHttpClient.execute( + Mockito.any(HttpUriRequest.class), Mockito.any(ResponseHandler.class))).willThrow(IOException.class); + + DMaaPMRPublisherImpl dmaapMRPublisherImpl = new DMaaPMRPublisherImpl( + getPublisherConfig(), dmaapMRPublisherQueueFactory, closeableHttpClient); + DMaaPMRPublisherResponse response = dmaapMRPublisherImpl.forcePublish(getTwoSampleMessages()); + } + + @Test + public void testFlushSuccessful() throws Exception { + Mockito.when(closeableHttpClient.execute( + Mockito.any(HttpUriRequest.class), Mockito.any(ResponseHandler.class))) + .thenReturn(new ImmutablePair<>(200, "Message successfully posted")); + + Mockito.when(dmaapMRPublisherQueue.getMessageForPublishing()).thenReturn(getTwoSampleMessages()); + + DMaaPMRPublisherImpl dmaapMRPublisherImpl = new DMaaPMRPublisherImpl( + getPublisherConfig(), dmaapMRPublisherQueueFactory, closeableHttpClient); + DMaaPMRPublisherResponse response = dmaapMRPublisherImpl.flush(); + assertThat(response.getResponseCode(), is(200)); + } + + @Test + public void testFlushEmptyList() throws Exception { + Mockito.when(dmaapMRPublisherQueue.getMessageForPublishing()).thenReturn(new ArrayList()); + + DMaaPMRPublisherImpl dmaapMRPublisherImpl = new DMaaPMRPublisherImpl( + getPublisherConfig(), dmaapMRPublisherQueueFactory, closeableHttpClient); + DMaaPMRPublisherResponse response = dmaapMRPublisherImpl.flush(); + assertThat(response.getResponseCode(), is(204)); + } + + @Test + public void testClose() throws Exception { + Mockito.when(dmaapMRPublisherQueue.getMessageForPublishing()).thenReturn(new ArrayList()); + Mockito.when(closeableHttpClient.execute( + Mockito.any(HttpUriRequest.class), Mockito.any(ResponseHandler.class))) + .thenReturn(new ImmutablePair<>(200, "Message successfully posted")); + Mockito.when(dmaapMRPublisherQueue.getMessageForPublishing()).thenReturn(getTwoSampleMessages()); + + DMaaPMRPublisherImpl dmaapMRPublisherImpl = new DMaaPMRPublisherImpl( + getPublisherConfig(), dmaapMRPublisherQueueFactory, closeableHttpClient); + dmaapMRPublisherImpl.close(); + verify(closeableHttpClient).execute(Mockito.any(HttpUriRequest.class), Mockito.any(ResponseHandler.class)); + } + + @Test + public void testCloseUnsuccessful() throws Exception { + Mockito.when(dmaapMRPublisherQueue.getMessageForPublishing()).thenReturn(new ArrayList()); + Mockito.when(closeableHttpClient.execute( + Mockito.any(HttpUriRequest.class), Mockito.any(ResponseHandler.class))) + .thenReturn(new ImmutablePair<>(400, "Message successfully posted")); + Mockito.when(dmaapMRPublisherQueue.getMessageForPublishing()).thenReturn(getTwoSampleMessages()); + + DMaaPMRPublisherImpl dmaapMRPublisherImpl = new DMaaPMRPublisherImpl( + getPublisherConfig(), dmaapMRPublisherQueueFactory, closeableHttpClient); + dmaapMRPublisherImpl.close(); + verify(closeableHttpClient, times(6)).execute(Mockito.any(HttpUriRequest.class), + Mockito.any(ResponseHandler.class)); + } +} diff --git a/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherMockImpl.java b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherMockImpl.java new file mode 100644 index 0000000..333b816 --- /dev/null +++ b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherMockImpl.java @@ -0,0 +1,59 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.service.publisher; + +import org.openecomp.dcae.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRPublisherResponse; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRPublisherResponseImpl; + +import java.util.Date; +import java.util.List; + +/** + * @author Rajiv Singla. Creation Date: 10/21/2016. + */ +public class DMaaPMRPublisherMockImpl implements DMaaPMRPublisher { + + @Override + public DMaaPMRPublisherResponse publish(List<String> messages) throws DCAEAnalyticsRuntimeException { + return new DMaaPMRPublisherResponseImpl(102, "Mock Response", 100); + } + + @Override + public DMaaPMRPublisherResponse forcePublish(List<String> messages) throws DCAEAnalyticsRuntimeException { + return null; + } + + @Override + public DMaaPMRPublisherResponse flush() { + return null; + } + + @Override + public Date getPublisherCreationTime() { + return null; + } + + @Override + public void close() throws Exception { + + } +} diff --git a/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherQueueImplTest.java b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherQueueImplTest.java new file mode 100644 index 0000000..07622df --- /dev/null +++ b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherQueueImplTest.java @@ -0,0 +1,189 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.service.publisher; + +import org.junit.Test; +import org.openecomp.dcae.analytics.dmaap.BaseAnalyticsDMaaPUnitTest; + +import java.util.List; + +import static org.junit.Assert.assertTrue; + +/** + * + * @author Rajiv Singla. Creation Date: 11/2/2016. + */ +public class DMaaPMRPublisherQueueImplTest extends BaseAnalyticsDMaaPUnitTest { + + + @Test + public void testAddBatchMessages() throws Exception { + DMaaPMRPublisherQueue publisherQueue = new DMaaPMRPublisherQueueImpl(10, 20); + // add two messages to batch queue + final int batchMessagesSizeAfterFirstInsert = publisherQueue.addBatchMessages(getTwoSampleMessages()); + assertTrue("Batch Message Queue size must be 2", batchMessagesSizeAfterFirstInsert == 2); + // add two more message to batch queue + final int batchMessagesSizeAfterSecondInsert = publisherQueue.addBatchMessages(getTwoSampleMessages()); + assertTrue("Batch Message Queue size must be 4", batchMessagesSizeAfterSecondInsert == 4); + // Now get all messages which must drain out batch queue + final List<String> messagesToPublish = publisherQueue.getMessageForPublishing(); + assertTrue("There must be 4 messages to publish", messagesToPublish.size() == 4); + assertTrue("Batch Queue must be empty", publisherQueue.getBatchQueueRemainingSize() == 10); + + } + + @Test(expected = IllegalStateException.class) + public void testAddBatchMessagesWhenQueueSizeIsFull() throws Exception { + DMaaPMRPublisherQueue publisherQueue = new DMaaPMRPublisherQueueImpl(2, 20); + // add two messages to batch queue + final int batchMessagesSizeAfterFirstInsert = publisherQueue.addBatchMessages(getTwoSampleMessages()); + assertTrue("Batch Message Queue size must be 2", batchMessagesSizeAfterFirstInsert == 2); + // add 2 more messages should now throw IllegalStateException + publisherQueue.addBatchMessages(getTwoSampleMessages()); + } + + @Test + public void testAddRecoverableMessages() throws Exception { + DMaaPMRPublisherQueue publisherQueue = new DMaaPMRPublisherQueueImpl(10, 20); + // add two messages to batch queue + final int batchMessagesSizeAfterFirstInsert = publisherQueue.addBatchMessages(getTwoSampleMessages()); + assertTrue("Batch Message Queue size must be 2", batchMessagesSizeAfterFirstInsert == 2); + // add two recoverable messages + final int recoverableMessageSizeAfterFirstInsert = + publisherQueue.addRecoverableMessages(getTwoSampleMessages()); + assertTrue("Recovery Message Queue size must be 2 after first insert", + recoverableMessageSizeAfterFirstInsert == 2); + // add two more recoverable messages + final int recoverableMessageSizeAfterSecondInsert = + publisherQueue.addRecoverableMessages(getTwoSampleMessages()); + assertTrue("Recovery Message Queue size must be 4 after second insert", + recoverableMessageSizeAfterSecondInsert == 4); + // Now get all messages which must drain out batch queue + final List<String> messagesToPublish = publisherQueue.getMessageForPublishing(); + assertTrue("There must be 6 messages to publish", messagesToPublish.size() == 6); + assertTrue("Batch Queue must be empty", publisherQueue.getBatchQueueRemainingSize() == 10); + assertTrue("Recovery Queue must be empty", publisherQueue.getRecoveryQueueRemainingSize() == 20); + } + + + @Test(expected = IllegalStateException.class) + public void testAddRecoverableMessagesWhenRecoveryQueueIsFull() throws Exception { + DMaaPMRPublisherQueue publisherQueue = new DMaaPMRPublisherQueueImpl(10, 2); + // add two messages to batch queue + final int batchMessagesSizeAfterFirstInsert = publisherQueue.addBatchMessages(getTwoSampleMessages()); + assertTrue("Batch Message Queue size must be 2", batchMessagesSizeAfterFirstInsert == 2); + // add two recoverable messages + final int recoverableMessageSizeAfterFirstInsert = + publisherQueue.addRecoverableMessages(getTwoSampleMessages()); + assertTrue("Recovery Message Queue size must be 2 after first insert", + recoverableMessageSizeAfterFirstInsert == 2); + // add two more recoverable messages which should throw IllegalStateException + publisherQueue.addRecoverableMessages(getTwoSampleMessages()); + } + + @Test + public void testGetMessageForPublishing() throws Exception { + DMaaPMRPublisherQueue publisherQueue = new DMaaPMRPublisherQueueImpl(10, 20); + // add two messages to batch queue + final int batchMessagesSizeAfterFirstInsert = publisherQueue.addBatchMessages(getTwoSampleMessages()); + assertTrue("Batch Message Queue size must be 2", batchMessagesSizeAfterFirstInsert == 2); + // add two recoverable messages + final int recoverableMessageSizeAfterFirstInsert = + publisherQueue.addRecoverableMessages(getTwoSampleMessages()); + assertTrue("Recovery Message Queue size must be 2 after first insert", + recoverableMessageSizeAfterFirstInsert == 2); + // add two more recoverable messages + final int recoverableMessageSizeAfterSecondInsert = + publisherQueue.addRecoverableMessages(getTwoSampleMessages()); + assertTrue("Recovery Message Queue size must be 4 after second insert", + recoverableMessageSizeAfterSecondInsert == 4); + // Now get all messages which must drain out batch queue + final List<String> messagesToPublish = publisherQueue.getMessageForPublishing(); + assertTrue("There must be 6 messages to publish", messagesToPublish.size() == 6); + // add two more batch and recovery messages + final int batchQueueSize = publisherQueue.addBatchMessages(getTwoSampleMessages()); + final int recoveryQueueSize = publisherQueue.addRecoverableMessages(getTwoSampleMessages()); + final int messagePublishCount = publisherQueue.getMessageForPublishing().size(); + assertTrue("Batch Queue + Recovery Queue message total must batch publish message count", + messagePublishCount == (batchQueueSize + recoveryQueueSize)); + assertTrue("Batch Queue must be empty", publisherQueue.getBatchQueueRemainingSize() == 10); + assertTrue("Recovery Queue must be empty", publisherQueue.getRecoveryQueueRemainingSize() == 20); + + } + + @Test + public void testGetBatchQueueRemainingSize() throws Exception { + + DMaaPMRPublisherQueue publisherQueue = new DMaaPMRPublisherQueueImpl(10, 20); + // add two messages to batch queue + final int batchMessagesSizeAfterFirstInsert = publisherQueue.addBatchMessages(getTwoSampleMessages()); + assertTrue("Batch Message Queue size must be 2", batchMessagesSizeAfterFirstInsert == 2); + assertTrue("Batch remaining capacity should be reduced by 2", + publisherQueue.getBatchQueueRemainingSize() == 8); + + // add two recoverable messages + final int recoverableMessageSizeAfterFirstInsert = + publisherQueue.addRecoverableMessages(getTwoSampleMessages()); + assertTrue("Recovery Message Queue size must be 2 after first insert", + recoverableMessageSizeAfterFirstInsert == 2); + + // recoverable message should not change batch queue capacity + assertTrue("Adding recoverable Message must not have any impact on batch queue remaining capacity ", + publisherQueue.getBatchQueueRemainingSize() == 8); + // Now get all messages which must drain out batch queue + final List<String> messagesToPublish = publisherQueue.getMessageForPublishing(); + assertTrue("There must be exactly 4 messages to publish", messagesToPublish.size() == 4); + + // Batch queue remaining capacity should now match original batch size + assertTrue("Batch Queue remaining capacity must match original batch queue size", publisherQueue + .getBatchQueueRemainingSize() == 10); + } + + @Test + public void testGetRecoveryQueueRemainingSize() throws Exception { + DMaaPMRPublisherQueue publisherQueue = new DMaaPMRPublisherQueueImpl(10, 20); + + // add two recoverable messages + final int recoverableMessageSizeAfterFirstInsert = + publisherQueue.addRecoverableMessages(getTwoSampleMessages()); + assertTrue("Recovery Message Queue size must be 2 after first insert", + recoverableMessageSizeAfterFirstInsert == 2); + assertTrue("Recovery Queue remaining capacity should be reduced by 2", + publisherQueue.getRecoveryQueueRemainingSize() == 18); + + // add two messages to batch queue + final int batchMessagesSizeAfterFirstInsert = publisherQueue.addBatchMessages(getTwoSampleMessages()); + assertTrue("Batch Message Queue size must be 2", batchMessagesSizeAfterFirstInsert == 2); + + // batch message should not change recoverable queue capacity + assertTrue("Adding batch queue Message must not have any impact on recovery queue remaining capacity ", + publisherQueue.getRecoveryQueueRemainingSize() == 18); + + // Now get all messages which must drain out recovery queue + final List<String> messagesToPublish = publisherQueue.getMessageForPublishing(); + assertTrue("There must be exactly 4 messages to publish", messagesToPublish.size() == 4); + + // Recoverable queue remaining capacity should now match original recovery queue size + assertTrue("Recoverable Queue remaining capacity must match original batch queue size", publisherQueue + .getRecoveryQueueRemainingSize() == 20); + } + +} diff --git a/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherQueueMockImpl.java b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherQueueMockImpl.java new file mode 100644 index 0000000..585d0ba --- /dev/null +++ b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/publisher/DMaaPMRPublisherQueueMockImpl.java @@ -0,0 +1,53 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.service.publisher; + +import java.util.List; + +/** + * @author Manjesh Gowda. Creation Date: 11/7/2016. + */ +public class DMaaPMRPublisherQueueMockImpl implements DMaaPMRPublisherQueue { + @Override + public int addBatchMessages(List<String> batchMessages) throws IllegalStateException { + return 100; + } + + @Override + public int addRecoverableMessages(List<String> recoverableMessages) throws IllegalStateException { + return 0; + } + + @Override + public List<String> getMessageForPublishing() { + return null; + } + + @Override + public int getBatchQueueRemainingSize() { + return 0; + } + + @Override + public int getRecoveryQueueRemainingSize() { + return 0; + } +} diff --git a/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/subscriber/DMaaPMRSubscriberImplTest.java b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/subscriber/DMaaPMRSubscriberImplTest.java new file mode 100644 index 0000000..6d8c79a --- /dev/null +++ b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/subscriber/DMaaPMRSubscriberImplTest.java @@ -0,0 +1,158 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.service.subscriber; + +import com.jayway.jsonassert.impl.matcher.IsCollectionWithSize; +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.methods.HttpUriRequest; +import org.apache.http.impl.client.CloseableHttpClient; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; +import org.openecomp.dcae.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.openecomp.dcae.analytics.dmaap.BaseAnalyticsDMaaPUnitTest; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRSubscriberConfig; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRSubscriberResponse; + +import java.io.IOException; +import java.util.Random; +import java.util.UUID; + +import static org.hamcrest.CoreMatchers.isA; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.Is.is; +import static org.mockito.BDDMockito.given; + +/** + * @author Rajiv Singla. Creation Date: 10/21/2016. + */ +@RunWith(MockitoJUnitRunner.class) +public class DMaaPMRSubscriberImplTest extends BaseAnalyticsDMaaPUnitTest { + + @Mock + CloseableHttpClient closeableHttpClient; + + private String consumerGroup, consumerId; + + @Before + public void setUp() throws Exception { + Random random = new Random(10000L); + consumerGroup = "Test-Consumer-Group" + Long.toString(random.nextLong()); + consumerId = UUID.randomUUID().toString(); + } + + @After + public void tearDown() throws Exception { + + } + + @Test + public void testSubscriberSuccessfullyReceiveDmaapMessage() throws Exception { + + String testMessages = "[{\"message\":\"I'm Object 1 Message\"}," + + "{\"message\":\"I'm Object 2 Message\"}]"; + Mockito.when( + closeableHttpClient.execute(Mockito.any(HttpUriRequest.class), Mockito.any(ResponseHandler.class))) + .thenReturn(new ImmutablePair<>(200, testMessages)); + + DMaaPMRSubscriberImpl dmaapMRSubscriberImpl = new DMaaPMRSubscriberImpl( + getSubscriberConfig(consumerId, consumerGroup), closeableHttpClient); + DMaaPMRSubscriberResponse dmaapMRSubscriberResponse = dmaapMRSubscriberImpl.fetchMessages(); + assertThat(dmaapMRSubscriberResponse.getResponseCode(), is(200)); + assertThat(dmaapMRSubscriberResponse.getFetchedMessages(), IsCollectionWithSize.hasSize(2)); + } + + @Test + public void testSubscriberSuccessfullyReceiveDmaapMessageWithNoUsername() throws Exception { + + DMaaPMRSubscriberConfig dmaapMRSubscriberConfig = new DMaaPMRSubscriberConfig.Builder(HOST_NAME, TOPIC_NAME) + .setPortNumber(PORT_NUMBER) + .setProtocol(HTTP_PROTOCOL) + .setContentType(CONTENT_TYPE) + .setConsumerGroup(consumerGroup != null ? consumerGroup : SUBSCRIBER_CONSUMER_GROUP_NAME) + .setConsumerId(consumerId != null ? consumerId : SUBSCRIBER_CONSUMER_ID) + .setTimeoutMS(SUBSCRIBER_TIMEOUT_MS) + .setMessageLimit(SUBSCRIBER_MESSAGE_LIMIT).build(); + + String testMessages = "[{\"message\":\"I'm Object 1 Message\"}," + + "{\"message\":\"I'm Object 2 Message\"}]"; + Mockito.when( + closeableHttpClient.execute(Mockito.any(HttpUriRequest.class), Mockito.any(ResponseHandler.class))) + .thenReturn(new ImmutablePair<>(200, testMessages)); + + DMaaPMRSubscriberImpl dmaapMRSubscriberImpl = new DMaaPMRSubscriberImpl( + dmaapMRSubscriberConfig, closeableHttpClient); + DMaaPMRSubscriberResponse dmaapMRSubscriberResponse = dmaapMRSubscriberImpl.fetchMessages(); + assertThat(dmaapMRSubscriberResponse.getResponseCode(), is(200)); + assertThat(dmaapMRSubscriberResponse.getFetchedMessages(), IsCollectionWithSize.hasSize(2)); + } + + @Test + public void testSubscriberSuccessfullyReceiveNoDmaapMessage() throws Exception { + Mockito.when( + closeableHttpClient.execute(Mockito.any(HttpUriRequest.class), Mockito.any(ResponseHandler.class))) + .thenReturn(new ImmutablePair<>(200, null)); + + DMaaPMRSubscriberImpl dmaapMRSubscriberImpl = new DMaaPMRSubscriberImpl( + getSubscriberConfig(consumerId, consumerGroup), closeableHttpClient); + DMaaPMRSubscriberResponse dmaapMRSubscriberResponse = dmaapMRSubscriberImpl.fetchMessages(); + assertThat(dmaapMRSubscriberResponse.getResponseCode(), is(200)); + assertThat(dmaapMRSubscriberResponse.getFetchedMessages(), IsCollectionWithSize.hasSize(0)); + } + + @Test + public void testSubscriberSuccessfullyReceiveErrorMessage() throws Exception { + Mockito.when( + closeableHttpClient.execute(Mockito.any(HttpUriRequest.class), Mockito.any(ResponseHandler.class))) + .thenReturn(new ImmutablePair<>(400, "Bad Request")); + + DMaaPMRSubscriberImpl dmaapMRSubscriberImpl = new DMaaPMRSubscriberImpl( + getSubscriberConfig(consumerId, consumerGroup), closeableHttpClient); + DMaaPMRSubscriberResponse dmaapMRSubscriberResponse = dmaapMRSubscriberImpl.fetchMessages(); + assertThat(dmaapMRSubscriberResponse.getResponseCode(), is(400)); + assertThat(dmaapMRSubscriberResponse.getFetchedMessages(), IsCollectionWithSize.hasSize(0)); + } + + @Rule + public ExpectedException httpIOException = ExpectedException.none(); + + @Test + public void testSubscriberSuccessfullyReceiveException() throws Exception { + + httpIOException.expect(DCAEAnalyticsRuntimeException.class); + httpIOException.expectCause(isA(IOException.class)); + + given(closeableHttpClient.execute( + Mockito.any(HttpUriRequest.class), Mockito.any(ResponseHandler.class))).willThrow(IOException.class); + + DMaaPMRSubscriberImpl dmaapMRSubscriberImpl = new DMaaPMRSubscriberImpl( + getSubscriberConfig(consumerId, consumerGroup), closeableHttpClient); + DMaaPMRSubscriberResponse dmaapMRSubscriberResponse = dmaapMRSubscriberImpl.fetchMessages(); + } + +} diff --git a/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/subscriber/DMaaPMRSubscriberMockImpl.java b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/subscriber/DMaaPMRSubscriberMockImpl.java new file mode 100644 index 0000000..87a76d0 --- /dev/null +++ b/dcae-analytics-dmaap/src/test/java/org/openecomp/dcae/analytics/dmaap/service/subscriber/DMaaPMRSubscriberMockImpl.java @@ -0,0 +1,48 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.dmaap.service.subscriber; + +import org.openecomp.dcae.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRSubscriberResponse; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRSubscriberResponseImpl; + +import java.util.Date; + +/** + * @author Rajiv Singla. Creation Date: 10/21/2016. + */ +public class DMaaPMRSubscriberMockImpl implements DMaaPMRSubscriber { + + @Override + public DMaaPMRSubscriberResponse fetchMessages() throws DCAEAnalyticsRuntimeException { + return new DMaaPMRSubscriberResponseImpl(102, "Mock Response", null); + } + + @Override + public Date getSubscriberCreationTime() { + return null; + } + + @Override + public void close() throws Exception { + + } +} diff --git a/dcae-analytics-dmaap/src/test/resources/logback-test.xml b/dcae-analytics-dmaap/src/test/resources/logback-test.xml new file mode 100644 index 0000000..e1cb987 --- /dev/null +++ b/dcae-analytics-dmaap/src/test/resources/logback-test.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ ============LICENSE_START========================================================= + ~ dcae-analytics + ~ ================================================================================ + ~ Copyright © 2017 AT&T Intellectual Property. All rights reserved. + ~ ================================================================================ + ~ Licensed 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. + ~ ============LICENSE_END========================================================= + --> +<configuration debug="false"> + + <!-- + Disabling some chatty loggers. + --> + <logger name="org.apache.commons.beanutils" level="ERROR"/> + <logger name="org.apache.zookeeper.server" level="ERROR"/> + <logger name="org.apache.zookeeper" level="ERROR"/> + <logger name="com.ning" level="WARN"/> + <logger name="org.apache.spark" level="WARN"/> + <logger name="org.spark-project" level="WARN"/> + <logger name="org.apache.hadoop" level="WARN"/> + <logger name="org.apache.hive" level="WARN"/> + <logger name="org.quartz.core" level="WARN"/> + <logger name="org.eclipse.jetty" level="WARN"/> + <logger name="io.netty.util.internal" level="WARN"/> + + <logger name="org.apache.twill" level="WARN"/> + <logger name="co.cask.cdap" level="INFO"/> + <logger name="org.openecomp" level="DEBUG"/> + + <appender name="Console" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <pattern>%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n</pattern> + </encoder> + </appender> + + <root level="ERROR"> + <appender-ref ref="Console"/> + </root> + + +</configuration> + diff --git a/dcae-analytics-model/pom.xml b/dcae-analytics-model/pom.xml new file mode 100644 index 0000000..58e1da8 --- /dev/null +++ b/dcae-analytics-model/pom.xml @@ -0,0 +1,126 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ ============LICENSE_START========================================================= + ~ dcae-analytics + ~ ================================================================================ + ~ Copyright © 2017 AT&T Intellectual Property. All rights reserved. + ~ ================================================================================ + ~ Licensed 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. + ~ ================================================================================ + ~ ECOMP and OpenECOMP are trademarks and service marks of AT&T Intellectual Property. + ~ ============LICENSE_END========================================================= + --> + +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.openecomp.dcae.analytics</groupId> + <artifactId>dcae-analytics</artifactId> + <version>1.0-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + + <artifactId>dcae-analytics-model</artifactId> + <packaging>jar</packaging> + + <!-- THIS MODULE CONTAINS MODELS COMMON FOR ALL DCAE ANALYTICS MODULES. + NOTE: THIS MODULE MUST NOT DEPEND ON ANY OTHER ANALYTICS MODULE IN COMPILE SCOPE. --> + <name>DCAE Analytics Model</name> + <description>Contains models (e.g. Common Event Format) which are common to DCAE Analytics</description> + + + <properties> + <main.basedir>${project.parent.basedir}</main.basedir> + </properties> + + <dependencies> + + <!-- LOGGING --> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </dependency> + + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-core</artifactId> + </dependency> + + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-classic</artifactId> + </dependency> + + <!-- UTILITIES --> + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + </dependency> + <dependency> + <groupId>com.google.code.findbugs</groupId> + <artifactId>jsr305</artifactId> + </dependency> + <dependency> + <groupId>com.google.code.findbugs</groupId> + <artifactId>annotations</artifactId> + </dependency> + + <!-- CODE GENERATION --> + <!-- NOTE: Lombok must remain in provided scope. Use delomok to generate code --> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + </dependency> + + <!-- JACKSON JSON --> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-core</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-databind</artifactId> + </dependency> + + <!-- JSON PATH --> + <dependency> + <groupId>com.jayway.jsonpath</groupId> + <artifactId>json-path</artifactId> + </dependency> + + <!-- TEST DEPENDENCIES --> + <dependency> + <groupId>org.openecomp.dcae.analytics</groupId> + <artifactId>dcae-analytics-test</artifactId> + <version>1.0-SNAPSHOT</version> + <scope>test</scope> + </dependency> + + </dependencies> + + <build> + <sourceDirectory>${project.build.directory}/generated-sources/delombok</sourceDirectory> + <plugins> + <plugin> + <groupId>org.projectlombok</groupId> + <artifactId>lombok-maven-plugin</artifactId> + </plugin> + </plugins> + </build> + + +</project> diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/BaseDynamicPropertiesProvider.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/BaseDynamicPropertiesProvider.java new file mode 100644 index 0000000..59c2a46 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/BaseDynamicPropertiesProvider.java @@ -0,0 +1,64 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain; + +import lombok.Data; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * <p> + * Base Dynamic Provider provide functionality so that all the + * additional dynamic Properties can be accumalated in a map. + * </p> + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +@Data +public abstract class BaseDynamicPropertiesProvider implements DynamicPropertiesProvider { + + /** + * All non-required properties should be captured in additional properties + * + * @param dynamicProperties Dynamic properties + * @return dynamic properties + */ + private Map<String, Object> dynamicProperties = new LinkedHashMap<>(); + + + /** + * Add a dynamic property to Common Event Format Entity + * + * @param propertyName property name + * @param propertyValue property value + */ + public void addDynamicProperties(String propertyName, Object propertyValue) { + dynamicProperties.put(propertyName, propertyValue); + } + + /** + * Determines if dynamic properties are present for the CEF Entity + * + * @return return true if Dynamic Properties are present + */ + public boolean isDynamicPropertiesPresent() { + return dynamicProperties.size() == 0; + } + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/DCAEAnalyticsModel.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/DCAEAnalyticsModel.java new file mode 100644 index 0000000..79650b5 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/DCAEAnalyticsModel.java @@ -0,0 +1,28 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain; + +import java.io.Serializable; + +/** + * <p> + * Marker Interface for all DCAE Analytics Model implementations + * </p> + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +public interface DCAEAnalyticsModel extends Serializable { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/DynamicPropertiesProvider.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/DynamicPropertiesProvider.java new file mode 100644 index 0000000..55eef6b --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/DynamicPropertiesProvider.java @@ -0,0 +1,41 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain; + +import java.util.Map; + +/** + * <p> + * Problem: Many Entities have dynamic properties as well as known properties. + * Known properites can be binded explicitly with all dynamic properties need + * to be captured also ensuring that there must not be any loss in information + * during deserialization / serialization process. + * </p> + * <p> + * This contract allows the deserialization mechanism to catch those dynamic properties + * in a Map so that deserialization mechanism will not loose any information and + * can be serialized back with no loss in dynamic properties information + * </p> + * @author Rajiv Singla. Creation Date: 10/18/2016. + */ +public interface DynamicPropertiesProvider extends DCAEAnalyticsModel { + + + void addDynamicProperties(String propertyName, Object propertyValue); + + Map<String, Object> getDynamicProperties(); +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/AlertAction.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/AlertAction.java new file mode 100644 index 0000000..a0e68f3 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/AlertAction.java @@ -0,0 +1,28 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.cef; + +/** + * Common Event Format Alert Action + * + * @author Rajiv Singla. Creation Date: 11/3/2016. + */ +public enum AlertAction implements CEFModel { + + CLEAR, CONT, SET; + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/AlertType.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/AlertType.java new file mode 100644 index 0000000..2dcce07 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/AlertType.java @@ -0,0 +1,41 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.cef; + +/** + * + * @author Rajiv Singla. Creation Date: 11/3/2016. + */ +public enum AlertType implements CEFModel { + + CARD_ANOMALY("CARD-ANOMALY"), + ELEMENT_ANOMALY("ELEMENT-ANOMALY"), + INTERFACE_ANOMALY("INTERFACE-ANOMALY"), + SERVICE_ANOMALY("SERVICE-ANOMALY"), + UNKNOWN(null); + + private String name; + + AlertType(String name) { + this.name = name; + } + + public String getName() { + return name; + } + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/BaseCEFModel.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/BaseCEFModel.java new file mode 100644 index 0000000..dbf4e83 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/BaseCEFModel.java @@ -0,0 +1,37 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.cef; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.openecomp.dcae.analytics.model.domain.BaseDynamicPropertiesProvider; + +/** + * <p> + * Base CEF Model should be extended by all CEF Model Entities. + * By extending CEF Model all the additional dynamic Properties + * can be accumalated in a map. + * </p> + * + * @author Rajiv Singla. Creation Date: 10/18/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public abstract class BaseCEFModel extends BaseDynamicPropertiesProvider implements CEFModel { + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/CEFModel.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/CEFModel.java new file mode 100644 index 0000000..b7f1328 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/CEFModel.java @@ -0,0 +1,30 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.cef; + +import org.openecomp.dcae.analytics.model.domain.DCAEAnalyticsModel; + +/** + * <p> + * Marker interface for all DCAE Analytics Common Event Format Model implementations + * </p> + * @author Rajiv Singla. Creation Date: 10/17/2016. + */ +public interface CEFModel extends DCAEAnalyticsModel { + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/CommonEventHeader.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/CommonEventHeader.java new file mode 100644 index 0000000..427e947 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/CommonEventHeader.java @@ -0,0 +1,113 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.cef; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * Fields common to all Events + * <p> + * @author Rajiv Singla. Creation Date: 10/17/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class CommonEventHeader extends BaseCEFModel { + + + private static final long serialVersionUID = -7114956462480792282L; + + /** + * The eventing domain associated with this event + * + * @param domain New value for domain + * @return The eventing domain associated with this event + */ + private String domain; + + /** + * Event key that is unique to the event source + * + * @param eventId New value for event key + * @return Event key that is unique to the event source + */ + private String eventId; + + /** + * Function of the source e.g. eNodeB, MME, PCRF + * + * @param functionalRole New value for functional Role + * @return Function of the source e.g. eNodeB, MME, PCRF + */ + private String functionalRole; + + + /** + * The latest unix time aka epoch time associated with the event from any component--as microseconds elapsed since + * 1 Jan 1970 not including leap seconds + * + * @param lastEpochMicrosec New value for last Epoc Microsec + * @return The latest unix time associated with the event from any component + */ + private Long lastEpochMicrosec; + + + /** + * Processing Priority + * + * @param priority New value for processing Priority + * @return Processing Priority + */ + private Priority priority; + + + /** + * Name of the entity reporting the event, for example, an OAM VM + * + * @param reportingEntityName New value for reporting Entity Name + * @return Name of the entity reporting the event, for example, an OAM VM + */ + private String reportingEntityName; + + + /** + * Ordering of events communicated by an event source instance or 0 if not needed + * + * @param sequence New value for Sequence + * @return Ordering of events communicated by an event source instance or 0 if not needed + */ + private Integer sequence; + + + /** + * Name of the entity experiencing the event issue + * + * @param sourceName New value for source name + * @return Name of the entity experiencing the event issue + */ + private String sourceName; + + + /** + * the earliest unix time aka epoch time associated with the event from any component--as microseconds elapsed + * since 1 Jan 1970 not including leap seconds + * + * @param startEpochMicrosec New value for start Epoc Microsec + * @return The earliest unix time associated with the event from any component + */ + private Long startEpochMicrosec; +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/Criticality.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/Criticality.java new file mode 100644 index 0000000..51b7bee --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/Criticality.java @@ -0,0 +1,27 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.cef; + +/** + * Performance Criticality + * + * @author Rajiv Singla. Creation Date: 11/3/2016. + */ +public enum Criticality implements CEFModel { + + CRIT, MAJ; +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/Event.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/Event.java new file mode 100644 index 0000000..9c5ff2e --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/Event.java @@ -0,0 +1,59 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.cef; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * Generic Event Format + * <p> + * @author Rajiv Singla. Creation Date: 10/17/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class Event extends BaseCEFModel { + + + private static final long serialVersionUID = 136409326067482936L; + + /** + * Fields common to all Events + * + * @param commonEventHeader New value for common Event Header + * @return Fields common to all Events + */ + private CommonEventHeader commonEventHeader; + + /** + * MeasurementsForVfScaling fields + * + * @param measurementsForVfScalingFields New value for MeasurementsForVfScaling + * @return MeasurementsForVfScaling fields + */ + private MeasurementsForVfScalingFields measurementsForVfScalingFields; + + /** + * Threshold crossing Fields + * + * @param thresholdCrossingAlertFields New value for Threshold crossing Fields + * @return Threshold crossing Fields + */ + private ThresholdCrossingAlertFields thresholdCrossingAlertFields; + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/EventListener.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/EventListener.java new file mode 100644 index 0000000..ec9e64b --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/EventListener.java @@ -0,0 +1,42 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.cef; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * Common Event Format - Base Event Listener + * <p> + * @author Rajiv Singla. Creation Date: 10/17/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class EventListener extends BaseCEFModel { + + + private static final long serialVersionUID = -2173233681841558721L; + /** + * Common Event Format - Event + * + * @param event New value for Event + * @return Common Event Format Event + */ + private Event event; + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/EventSeverity.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/EventSeverity.java new file mode 100644 index 0000000..178c49f --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/EventSeverity.java @@ -0,0 +1,32 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.cef; + +/** + * CEF Event severity or priority + * + * @author Rajiv Singla. Creation Date: 11/3/2016. + */ +public enum EventSeverity implements CEFModel { + + //NOTE: enum order must not be changed. Events severity is ordered from high to low + CRITICAL, + MAJOR, + MINOR, + WARNING, + NORMAL; +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/MeasurementsForVfScalingFields.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/MeasurementsForVfScalingFields.java new file mode 100644 index 0000000..d859f97 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/MeasurementsForVfScalingFields.java @@ -0,0 +1,53 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.cef; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * Common Event Format - MeasurementsForVfScaling fields + * <p> + * @author Rajiv Singla. Creation Date: 10/17/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class MeasurementsForVfScalingFields extends BaseCEFModel { + + + private static final long serialVersionUID = 243977479034730554L; + + /** + * Interval over which measurements are being reported in seconds + * + * @param measurementInterval New value for measurement Interval + * @return Interval over which measurements are being reported in seconds + */ + private Long measurementInterval; + + /** + * Virtual Network Card Usage Array + * + * @param vNicUsageArray New value for Virtual Network Card Usage Array + * @return Virtual Network Card Usage Array + */ + private List<VNicUsageArray> vNicUsageArray; + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/PerformanceCounter.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/PerformanceCounter.java new file mode 100644 index 0000000..1c8367a --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/PerformanceCounter.java @@ -0,0 +1,61 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.cef; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * Common Event Format - Performance PerformanceCounter + * + * @author Rajiv Singla. Creation Date: 11/3/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class PerformanceCounter extends BaseCEFModel { + + private static final long serialVersionUID = -8170148763083554044L; + /** + * Performance Counter Criticality + * + * @param criticality New value for Criticality + * @return Performance Counter Criticality + */ + private Criticality criticality; + /** + * Performance Counter Name + * + * @param name New value for Performance counter name + * @return Performance Counter Name + */ + private String name; + /** + * Performance Counter Threshold Crossed + * + * @param thresholdCrossed New value for Performance Counter Threshold Crossed + * @return Performance Counter Threshold Crossed + */ + private String thresholdCrossed; + /** + * Performance Counter Value + * + * @param value New Performance Counter Value + * @return Performance Counter Value + */ + private String value; + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/Priority.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/Priority.java new file mode 100644 index 0000000..d6d1a7b --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/Priority.java @@ -0,0 +1,28 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.cef; + +/** + * Common Event Format - Event processing priority + * <p> + * @author Rajiv Singla. Creation Date: 10/17/2016. + */ +public enum Priority implements CEFModel { + + High, Medium, Normal, Low; + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/ThresholdCrossingAlertFields.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/ThresholdCrossingAlertFields.java new file mode 100644 index 0000000..575d5c6 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/ThresholdCrossingAlertFields.java @@ -0,0 +1,157 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.cef; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * Common Event Format - Fields Specific to threshold crossing alert events + * + * @author Rajiv Singla. Creation Date: 11/3/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class ThresholdCrossingAlertFields extends BaseCEFModel { + + private static final long serialVersionUID = 1847494357841191942L; + + /** + * Additional Performance counters + * + * @param additionalParameters New value for Additional Performance counters + * @return Additional Performance counters + */ + private List<PerformanceCounter> additionalParameters; + + /** + * Event Action + * + * @param alertAction New Event Action + * @return Event Action + */ + private AlertAction alertAction; + + /** + * Unique short alert description such as IF-SHUB-ERRDROP + * + * @param alertDescription New value for Unique short alert description + * @return Unique short alert description + */ + private String alertDescription; + + /** + * Alert type + * + * @param alertType New value for Alert Type + * @return Alert Type + */ + private AlertType alertType; + + /** + * Calculated API value (if applicable) + * + * @param alertValue New Calculated API value + * @return Calculated API value (if applicable) + */ + private String alertValue; + + /** + * List of eventIds associated with the event being reported + * + * @param associatedAlertIdList New value for eventIds associated with the event + * @return List of eventIds associated with the event being reported + */ + private List<String> associatedAlertIdList; + + /** + * Time when the performance collector picked up the data; with RFC 2822 compliant format: + * ‘Sat, 13 Mar 2010 11:29:05 -0800’ + * + * @param collectionTimestamp Set new value for time when the performance collector picked up the data + * @return Time when the performance collector picked up the data + */ + private String collectionTimestamp; + + /** + * Specific performance collector instance used + * + * @param dataCollector New value for specific performance collector instance used + * @return Specific performance collector instance used + */ + private String dataCollector; + + /** + * Type of network element + * + * @param elementType New value for type of network element + * @return Type of network element + */ + private String elementType; + + /** + * Event severity or priority + * + * @param eventSeverity New value for event severity or priority + * @return Event severity or priority + */ + private EventSeverity eventSeverity; + + /** + * Time closest to when the measurement was made; with RFC 2822 compliant format: ‘Sat, 13 Mar 2010 11:29:05 -0800’ + * + * @param eventStartTimestamp New value for time closest to when the measurement was made + * @return Time closest to when the measurement was made + */ + private String eventStartTimestamp; + + /** + * Physical or logical port or card (if applicable) + * + * @param interfaceName New value for Physical or logical port or card (if applicable) + * @return Physical or logical port or card (if applicable) + */ + private String interfaceName; + + /** + * Network name + * + * @param networkService New value for network name + * @return Network name + */ + private String networkService; + + /** + * Possible Root Cause (reserved for future use) + * + * @param possibleRootCause New value for possible root cause (reserved for future) + * @return Possible Root Cause (reserved for future use) + */ + private String possibleRootCause; + + /** + * Version of the thresholdCrossingAlertFields block + * + * @param thresholdCrossingFieldsVersion New value for version of the thresholdCrossingAlertFields block + * @return Version of the thresholdCrossingAlertFields block + */ + private Integer thresholdCrossingFieldsVersion; + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/VNicUsageArray.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/VNicUsageArray.java new file mode 100644 index 0000000..c4630ba --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/cef/VNicUsageArray.java @@ -0,0 +1,75 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.cef; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * Usage of an array of virtual network interface cards + * <p> + * @author Rajiv Singla. Creation Date: 10/17/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class VNicUsageArray extends BaseCEFModel { + + + private static final long serialVersionUID = -5710133694409971093L; + + /** + * Virtual Network Card - Bytes In + * + * @param bytesIn New value for Virtual Network Card - Bytes In + * @return Virtual Network Card - Bytes In + */ + private Long bytesIn; + + /** + * Virtual Network Card - Bytes Out + * + * @param bytesOut New value for Virtual Network Card - Bytes Out + * @return Virtual Network Card - Bytes Out + */ + private Long bytesOut; + + /** + * Virtual Network Card - Packets In + * + * @param packetsIn New value for Virtual Network Card - Packets In + * @return Virtual Network Card - Packets In + */ + private Long packetsIn; + + /** + * Virtual Network Card - Packets Out + * + * @param packetsOut New value for Virtual Network Card - Packets Out + * @return Virtual Network Card - Packets Out + */ + private Long packetsOut; + + /** + * Virtual Network Card Identifier + * + * @param vNicIdentifier New value for Virtual Network Card Identifier + * @return Virtual Network Card Identifier + */ + private String vNicIdentifier; + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/PolicyModel.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/PolicyModel.java new file mode 100644 index 0000000..1825390 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/PolicyModel.java @@ -0,0 +1,29 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.policy; + +import org.openecomp.dcae.analytics.model.domain.DCAEAnalyticsModel; + +/** + * <p> + * Marker Interface all DCAE Analytics Policy Model implementations + * </p> + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +public interface PolicyModel extends DCAEAnalyticsModel { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/tca/BaseTCAPolicyModel.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/tca/BaseTCAPolicyModel.java new file mode 100644 index 0000000..b2a9d21 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/tca/BaseTCAPolicyModel.java @@ -0,0 +1,33 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.policy.tca; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.openecomp.dcae.analytics.model.domain.BaseDynamicPropertiesProvider; + +/** + * <p> + * A Base TCA Policy Model which accumulates all dynamic properties in a dynamicProperties Map + * </p> + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public abstract class BaseTCAPolicyModel extends BaseDynamicPropertiesProvider implements TCAPolicyModel { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/tca/Direction.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/tca/Direction.java new file mode 100644 index 0000000..8d3a8b0 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/tca/Direction.java @@ -0,0 +1,52 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.policy.tca; + +import javax.annotation.Nonnull; + +/** + * <p> + * Enum for Threshold Direction + * </p> + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +public enum Direction implements TCAPolicyModel { + + LESS { + public Boolean operate(@Nonnull Long value1, @Nonnull Long value2) { + return value1 < value2; + } + }, + LESS_OR_EQUAL { + public Boolean operate(@Nonnull Long value1, @Nonnull Long value2) { + return value1 <= value2; + } + }, + GREATER { + public Boolean operate(@Nonnull Long value1, @Nonnull Long value2) { + return value1 > value2; + } + }, + GREATER_OR_EQUAL { + public Boolean operate(@Nonnull Long value1, @Nonnull Long value2) { + return value1 >= value2; + } + }; + + public abstract Boolean operate(@Nonnull Long value1, @Nonnull Long value2); + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/tca/MetricsPerFunctionalRole.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/tca/MetricsPerFunctionalRole.java new file mode 100644 index 0000000..4d35ed4 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/tca/MetricsPerFunctionalRole.java @@ -0,0 +1,77 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.policy.tca; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * TCA Metrics that need to applied to each functional Role + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class MetricsPerFunctionalRole extends BaseTCAPolicyModel{ + + + private static final long serialVersionUID = -8819830294328242262L; + + /** + * Functional Role to which TCA Policy needs to applied. + * + * @param functionalRole New value for Functional Role to which TCA Policy needs to applied + * @return Functional Role to which TCA Policy needs to applied + */ + private String functionalRole; + + /** + * Policy Scope + * + * @param policyScope New value for Policy Scope + * @return Policy Scope + */ + private String policyScope; + + /** + * Policy Name + * + * @param policyName New value for Policy Name + * @return Policy Name + */ + private String policyName; + + /** + * Policy Version + * + * @param policyVersion New value for Policy Version + * @return Policy Version + */ + private String policyVersion; + + /** + * Policy Thresholds + * + * @param thresholds New value for Policy Thresholds + * @return Policy Thresholds + */ + private List<Threshold> thresholds; + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/tca/TCAPolicy.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/tca/TCAPolicy.java new file mode 100644 index 0000000..031ccb0 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/tca/TCAPolicy.java @@ -0,0 +1,55 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.policy.tca; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.openecomp.dcae.analytics.model.domain.cef.CommonEventHeader; + +import java.util.List; + +/** + * <p> + * TCA (Threshold Crossing Alert) Root + * </p> + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class TCAPolicy extends BaseTCAPolicyModel { + + private static final long serialVersionUID = 9186451218579196970L; + + /** + * TCA Policy domain which is associated with TCA incoming CEF message {@link CommonEventHeader#getDomain()} + * + * @param domain New value for domain + * @return Policy domain which is associated with incoming CEF message + */ + private String domain; + + /** + * Contains TCA Policy metrics that needs to be applied to each Functional Role + * + * @param metricsPerFunctionalRole New value for metrics that needs to be applied to each Functional Role + * @return Contains TCA Policy metrics that needs to be applied to each Functional Role + */ + private List<MetricsPerFunctionalRole> metricsPerFunctionalRole; + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/tca/TCAPolicyModel.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/tca/TCAPolicyModel.java new file mode 100644 index 0000000..ceec46d --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/tca/TCAPolicyModel.java @@ -0,0 +1,31 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.policy.tca; + +import org.openecomp.dcae.analytics.model.domain.policy.PolicyModel; + +/** + * <p> + * Marker interface for all TCA Policy Models + * </p> + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +public interface TCAPolicyModel extends PolicyModel { + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/tca/Threshold.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/tca/Threshold.java new file mode 100644 index 0000000..0905730 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/domain/policy/tca/Threshold.java @@ -0,0 +1,82 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.domain.policy.tca; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.openecomp.dcae.analytics.model.domain.cef.EventSeverity; + +/** + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class Threshold extends BaseTCAPolicyModel { + + private static final long serialVersionUID = 5714225046339409812L; + + /** + * Closed Loop Control Name + * + * @param closedLoopControlName New value for Closed Loop Control Name + * @return Closed Loop Control Name + */ + private String closedLoopControlName; + + /** + * Threshold Version + * + * @param version New value for Threshold Version + * @return Threshold Version + */ + private String version; + + /** + * Path of the field inside Common Event Format which needs to be monitored by TCA App + * for threshold crossing + * + * @param fieldPath New value for Path of the field inside CEF which needs to be monitored for TCA + * @return Path of the field inside Common Event Format which needs to be monitored by TCA App + */ + private String fieldPath; + + /** + * Threshold Value + * + * @param thresholdValue New value for Threshold Value + * @return Threshold Value + */ + private Long thresholdValue; + + /** + * Direction of threshold + * + * @param direction New value for Direction of threshold + * @return Direction of threshold + */ + private Direction direction; + + /** + * Severity of Event based on CEF Convention + * + * @param severity New value for Severity of Event based on CEF Convention + * @return Severity of Event based on CEF Convention + */ + private EventSeverity severity; + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/facade/FacadeModel.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/facade/FacadeModel.java new file mode 100644 index 0000000..abf6d36 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/facade/FacadeModel.java @@ -0,0 +1,29 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.facade; + +import java.io.Serializable; + +/** + * <p> + * Marker Interface for all Facade (outgoing) DCAE Analytics Model + * </p> + * + * @author Rajiv Singla. Creation Date: 11/9/2016. + */ +public interface FacadeModel extends Serializable { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/facade/tca/AAI.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/facade/tca/AAI.java new file mode 100644 index 0000000..fa08f07 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/facade/tca/AAI.java @@ -0,0 +1,34 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.facade.tca; + +import lombok.Data; + +/** + * + * @author Rajiv Singla. Creation Date: 11/9/2016. + */ +@Data +public class AAI implements TCAFacadeModel { + + private static final long serialVersionUID = 1255011931120081985L; + + private String genericVNFId; + + private String genericServerId; + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/facade/tca/TCAFacadeModel.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/facade/tca/TCAFacadeModel.java new file mode 100644 index 0000000..78c4ae7 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/facade/tca/TCAFacadeModel.java @@ -0,0 +1,27 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.facade.tca; + +import org.openecomp.dcae.analytics.model.facade.FacadeModel; + +/** + * Marker Interface for all TCA Facade Models + * + * @author Rajiv Singla. Creation Date: 11/9/2016. + */ +public interface TCAFacadeModel extends FacadeModel { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/facade/tca/TCAVESResponse.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/facade/tca/TCAVESResponse.java new file mode 100644 index 0000000..f5a5b4e --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/facade/tca/TCAVESResponse.java @@ -0,0 +1,45 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.facade.tca; + +import lombok.Data; + +/** + * Response generated by TCA for VES Message + * + * @author Rajiv Singla. Creation Date: 11/9/2016. + */ +@Data +public class TCAVESResponse implements TCAFacadeModel { + + private static final long serialVersionUID = 8505119543756702710L; + + private String closedLoopControlName; + private String version; + private String requestID; + private Long closedLoopAlarmStart; + private String closedLoopEventClient; + private String targetType; + private AAI aai; + private String target; + private String from; + private String policyScope; + private String policyName; + private String policyVersion; + private String closedLoopEventStatus; + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/AnalyticsModelIOUtils.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/AnalyticsModelIOUtils.java new file mode 100644 index 0000000..0eddd20 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/AnalyticsModelIOUtils.java @@ -0,0 +1,142 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.Charset; +import java.util.Properties; + +/** + * Utility class containing methods for IO related operations + * <p> + * @author Rajiv Singla. Creation Date: 10/17/2016. + */ +public abstract class AnalyticsModelIOUtils extends AnalyticsModelJsonUtils { + + private static final Logger LOG = LoggerFactory.getLogger(AnalyticsModelIOUtils.class); + + /** + * Parses given valid JSON file Location to object of given binding class type. + * + * @param fileLocation - Valid JSON File Location + * @param bindingClass - Class Type of Binding object + * @param <T> - Binding Class Type + * @return - Binding Class Object which properties populated from JSON File Location + */ + public static final <T> T convertToJsonObject(String fileLocation, Class<T> bindingClass) { + + // Load Resource from give path + final InputStream resourceAsStream = loadResourceAsStream(fileLocation); + + // If resource is null throw an exception + if (resourceAsStream == null) { + final String errorMessage = String.format("Invalid File location: %s", fileLocation); + logAndThrowFileNotFoundException(errorMessage); + } + + // Parse input stream + try (InputStreamReader inputStreamReader = new InputStreamReader(resourceAsStream, Charset.forName("UTF-8"))) { + + return ANALYTICS_MODEL_OBJECT_MAPPER.readValue(inputStreamReader, bindingClass); + + } catch (IOException e) { + + // If parsing fails due to IO Issues throw an exception + final String errorMessage = String.format("IO Error while parsing Json File location: %s", fileLocation); + LOG.error(errorMessage); + throw new RuntimeException(errorMessage, e); + + } catch (Exception e) { + + //If parsing fails due to Invalid Json or Json IO Issues throw an exception + final String errorMessage = String.format("Json parsing error while parsing Json File location: %s", + fileLocation); + LOG.error(errorMessage); + throw new RuntimeException(errorMessage, e); + + } + + } + + public static Properties loadPropertiesFile(String propertiesFileLocation) { + + // Load Resource from give properties file path + final InputStream propertiesFileInputStream = loadResourceAsStream(propertiesFileLocation); + + // If properties file is not present throw an exception + if (propertiesFileInputStream == null) { + final String errorMessage = String.format("Invalid Properties File at location: %s", + propertiesFileLocation); + logAndThrowFileNotFoundException(errorMessage); + } + + final Properties properties = new Properties(); + + try { + properties.load(propertiesFileInputStream); + } catch (IOException e) { + final String errorMessage = String.format("IO Exception while reading Properties File at location: %s", + propertiesFileLocation); + logAndThrowRuntimeException(errorMessage, e); + } + + return properties; + + } + + /** + * Loads Input file from the given classpath file location and returns file InputStream + * + * @param fileLocation - classpath file location + * @return - {@link InputStream} for classpath file + */ + public static InputStream loadResourceAsStream(String fileLocation) { + // Load Resource from give path + return Thread.currentThread().getContextClassLoader().getResourceAsStream(fileLocation); + } + + + /** + * Throws a new Runtime exception for new {@link FileNotFoundException} and logs it as an error + * + * @param errorMessage + */ + private static void logAndThrowFileNotFoundException(String errorMessage) { + logAndThrowRuntimeException(errorMessage, new FileNotFoundException(errorMessage)); + } + + /** + * Wraps checked exception into a runtime exception and log it as an error + * + * @param errorMessage + * @param actualException + */ + private static void logAndThrowRuntimeException(String errorMessage, Exception actualException) { + + LOG.error(errorMessage); + throw new RuntimeException(errorMessage, actualException); + + } + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/AnalyticsModelJsonUtils.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/AnalyticsModelJsonUtils.java new file mode 100644 index 0000000..9e6b719 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/AnalyticsModelJsonUtils.java @@ -0,0 +1,100 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.base.Suppliers; +import org.openecomp.dcae.analytics.model.util.json.AnalyticsModelObjectMapperSupplier; + +import java.io.IOException; +import java.io.InputStream; + +/** + * + * @author Rajiv Singla. Creation Date: 11/7/2016. + */ +public abstract class AnalyticsModelJsonUtils { + + /** + * Object mapper to be used for all TCA Json Parsing + */ + protected static final ObjectMapper ANALYTICS_MODEL_OBJECT_MAPPER = + Suppliers.memoize(new AnalyticsModelObjectMapperSupplier()).get(); + + + /** + * Converts Input Stream to given type reference object + * + * @param inputStream input stream + * @param valueTypeRef type reference + * @param <T> type of type reference + * + * @return parsed json object + * + * @throws IOException IO Exception + */ + public static <T> T readValue(InputStream inputStream, TypeReference<T> valueTypeRef) throws IOException { + return ANALYTICS_MODEL_OBJECT_MAPPER.readValue(inputStream, valueTypeRef); + } + + + /** + * Converts Input Stream to given target class object + * + * @param inputStream input stream + * @param targetClass target class type + * @param <T> type of class + * + * @return parsed json object + * + * @throws IOException IO Exception + */ + public static <T> T readValue(InputStream inputStream, Class<T> targetClass) throws IOException { + return ANALYTICS_MODEL_OBJECT_MAPPER.readValue(inputStream, targetClass); + } + + + /** + * Converts given object to JSON string + * + * @param value object that needs to converted to json string + * + * @return json string + * @throws JsonProcessingException Json Processing exception + */ + public static String writeValueAsString(Object value) throws JsonProcessingException { + return ANALYTICS_MODEL_OBJECT_MAPPER.writeValueAsString(value); + } + + + /** + * Method to deserialize JSON content from given JSON content String. + * + * @param jsonString JSON String + * @param objectClass target object class + * @param <T> object class type + * + * @return converted Object from JSON String + * + * @throws IOException IO Exception + */ + public static <T> T readValue(final String jsonString, final Class<T> objectClass) throws IOException { + return ANALYTICS_MODEL_OBJECT_MAPPER.readValue(jsonString, objectClass); + } +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/AnalyticsModelObjectMapperSupplier.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/AnalyticsModelObjectMapperSupplier.java new file mode 100644 index 0000000..63857fc --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/AnalyticsModelObjectMapperSupplier.java @@ -0,0 +1,108 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.base.Supplier; +import com.jayway.jsonpath.Configuration; +import com.jayway.jsonpath.JsonPath; +import com.jayway.jsonpath.Option; +import com.jayway.jsonpath.spi.json.JacksonJsonProvider; +import com.jayway.jsonpath.spi.json.JsonProvider; +import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider; +import com.jayway.jsonpath.spi.mapper.MappingProvider; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + +import java.util.EnumSet; +import java.util.Set; + +/** + *<p> + * {@link Supplier} that can be used by clients to get Object Mapper which specializes + * in serialize and deserialize - DCAE Analytics Model JSON Objects. Clients can + * choose to memoize this Supplier for performance enhancements + * <br> + * NOTE: This supplier also setups up {@link JsonPath} default + * config to make use of this Supplier object mapper + *</p> + * @author Rajiv Singla. Creation Date: 11/10/2016. + */ +@SuppressFBWarnings("SIC_INNER_SHOULD_BE_STATIC_ANON") +public class AnalyticsModelObjectMapperSupplier implements Supplier<ObjectMapper> { + + @Override + public ObjectMapper get() { + + final ObjectMapper objectMapper = new ObjectMapper(); + + // Don't Serialize null values + objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + + // Don't fail on unknown properties + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + // Register Common Event Format Module + objectMapper.registerModule(new CommonEventFormatModule()); + // Register TCA Policy Module + objectMapper.registerModule(new TCAPolicyModule()); + // Register TCA Facade Module + objectMapper.registerModule(new TCAFacadeModelModule()); + + + // Setup JsonPath default config + setupJsonPathDefaultConfig(objectMapper); + + return objectMapper; + } + + + /** + * Setups up default Config for {@link JsonPath} + * + * @param objectMapper + */ + private void setupJsonPathDefaultConfig(final ObjectMapper objectMapper) { + + Configuration.setDefaults(new Configuration.Defaults() { + + private final JsonProvider jsonProvider = new JacksonJsonProvider(objectMapper); + private final MappingProvider mappingProvider = new JacksonMappingProvider(objectMapper); + + @Override + public JsonProvider jsonProvider() { + return jsonProvider; + } + + @Override + public MappingProvider mappingProvider() { + return mappingProvider; + } + + @Override + public Set<Option> options() { + + // Json Path exceptions are suppressed, also missing properties are tolerated + return EnumSet.of(Option.DEFAULT_PATH_LEAF_TO_NULL, Option.SUPPRESS_EXCEPTIONS); + } + }); + + + } + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/CommonEventFormatModule.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/CommonEventFormatModule.java new file mode 100644 index 0000000..190289d --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/CommonEventFormatModule.java @@ -0,0 +1,80 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json; + +import com.fasterxml.jackson.core.Version; +import com.fasterxml.jackson.databind.module.SimpleModule; +import org.openecomp.dcae.analytics.model.domain.cef.AlertAction; +import org.openecomp.dcae.analytics.model.domain.cef.AlertType; +import org.openecomp.dcae.analytics.model.domain.cef.BaseCEFModel; +import org.openecomp.dcae.analytics.model.domain.cef.CommonEventHeader; +import org.openecomp.dcae.analytics.model.domain.cef.Criticality; +import org.openecomp.dcae.analytics.model.domain.cef.Event; +import org.openecomp.dcae.analytics.model.domain.cef.EventListener; +import org.openecomp.dcae.analytics.model.domain.cef.EventSeverity; +import org.openecomp.dcae.analytics.model.domain.cef.MeasurementsForVfScalingFields; +import org.openecomp.dcae.analytics.model.domain.cef.PerformanceCounter; +import org.openecomp.dcae.analytics.model.domain.cef.Priority; +import org.openecomp.dcae.analytics.model.domain.cef.ThresholdCrossingAlertFields; +import org.openecomp.dcae.analytics.model.domain.cef.VNicUsageArray; +import org.openecomp.dcae.analytics.model.util.json.mixin.cef.AlertActionMixin; +import org.openecomp.dcae.analytics.model.util.json.mixin.cef.AlertTypeMixin; +import org.openecomp.dcae.analytics.model.util.json.mixin.cef.BaseCEFModelMixin; +import org.openecomp.dcae.analytics.model.util.json.mixin.cef.CommonEventHeaderMixin; +import org.openecomp.dcae.analytics.model.util.json.mixin.cef.CriticalityMixin; +import org.openecomp.dcae.analytics.model.util.json.mixin.cef.EventListenerMixin; +import org.openecomp.dcae.analytics.model.util.json.mixin.cef.EventMixin; +import org.openecomp.dcae.analytics.model.util.json.mixin.cef.EventSeverityMixin; +import org.openecomp.dcae.analytics.model.util.json.mixin.cef.MeasurementsForVfScalingFieldsMixin; +import org.openecomp.dcae.analytics.model.util.json.mixin.cef.PerformanceCounterMixin; +import org.openecomp.dcae.analytics.model.util.json.mixin.cef.PriorityMixin; +import org.openecomp.dcae.analytics.model.util.json.mixin.cef.ThresholdCrossingAlertFieldsMixin; +import org.openecomp.dcae.analytics.model.util.json.mixin.cef.VNicUsageArrayMixin; + +/** + * @author Rajiv Singla. Creation Date: 10/18/2016. + */ +public class CommonEventFormatModule extends SimpleModule { + + private static final long serialVersionUID = -6347258586478923257L; + + public CommonEventFormatModule() { + super("Common Event Format", + new Version(25, 0, 0, null, "org.openecomp.dcae.analytics.model", "dcae-analytics-model")); + } + + @Override + public void setupModule(final SetupContext setupContext) { + + setupContext.setMixInAnnotations(AlertAction.class, AlertActionMixin.class); + setupContext.setMixInAnnotations(AlertType.class, AlertTypeMixin.class); + setupContext.setMixInAnnotations(BaseCEFModel.class, BaseCEFModelMixin.class); + setupContext.setMixInAnnotations(CommonEventHeader.class, CommonEventHeaderMixin.class); + setupContext.setMixInAnnotations(Criticality.class, CriticalityMixin.class); + setupContext.setMixInAnnotations(EventListener.class, EventListenerMixin.class); + setupContext.setMixInAnnotations(Event.class, EventMixin.class); + setupContext.setMixInAnnotations(EventSeverity.class, EventSeverityMixin.class); + setupContext.setMixInAnnotations(MeasurementsForVfScalingFields.class, + MeasurementsForVfScalingFieldsMixin.class); + setupContext.setMixInAnnotations(PerformanceCounter.class, PerformanceCounterMixin.class); + setupContext.setMixInAnnotations(Priority.class, PriorityMixin.class); + setupContext.setMixInAnnotations(ThresholdCrossingAlertFields.class, ThresholdCrossingAlertFieldsMixin.class); + setupContext.setMixInAnnotations(VNicUsageArray.class, VNicUsageArrayMixin.class); + + } + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/TCAFacadeModelModule.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/TCAFacadeModelModule.java new file mode 100644 index 0000000..09385f9 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/TCAFacadeModelModule.java @@ -0,0 +1,45 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json; + +import com.fasterxml.jackson.core.Version; +import com.fasterxml.jackson.databind.module.SimpleModule; +import org.openecomp.dcae.analytics.model.facade.tca.AAI; +import org.openecomp.dcae.analytics.model.facade.tca.TCAVESResponse; +import org.openecomp.dcae.analytics.model.util.json.mixin.facade.tca.AAIMixin; +import org.openecomp.dcae.analytics.model.util.json.mixin.facade.tca.VESCEFMessageResponseMixin; + +/** + * + * @author Rajiv Singla. Creation Date: 11/9/2016. + */ +public class TCAFacadeModelModule extends SimpleModule { + + private static final long serialVersionUID = -5895573053812042524L; + + public TCAFacadeModelModule() { + super("Threshold Crossing Alert Facade", + new Version(1, 0, 0, null, "org.openecomp.dcae.analytics.model", "dcae-analytics-model")); + } + + @Override + public void setupModule(final SetupContext setupContext) { + setupContext.setMixInAnnotations(TCAVESResponse.class, VESCEFMessageResponseMixin.class); + setupContext.setMixInAnnotations(AAI.class, AAIMixin.class); + } + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/TCAPolicyModule.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/TCAPolicyModule.java new file mode 100644 index 0000000..0f3bd7f --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/TCAPolicyModule.java @@ -0,0 +1,57 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json; + +import com.fasterxml.jackson.core.Version; +import com.fasterxml.jackson.databind.module.SimpleModule; +import org.openecomp.dcae.analytics.model.domain.policy.tca.BaseTCAPolicyModel; +import org.openecomp.dcae.analytics.model.domain.policy.tca.Direction; +import org.openecomp.dcae.analytics.model.domain.policy.tca.MetricsPerFunctionalRole; +import org.openecomp.dcae.analytics.model.domain.policy.tca.TCAPolicy; +import org.openecomp.dcae.analytics.model.domain.policy.tca.Threshold; +import org.openecomp.dcae.analytics.model.util.json.mixin.policy.tca.BaseTCAPolicyModelMixin; +import org.openecomp.dcae.analytics.model.util.json.mixin.policy.tca.DirectionMixin; +import org.openecomp.dcae.analytics.model.util.json.mixin.policy.tca.MetricsPerFunctionalRoleMixin; +import org.openecomp.dcae.analytics.model.util.json.mixin.policy.tca.TCAPolicyMixin; +import org.openecomp.dcae.analytics.model.util.json.mixin.policy.tca.ThresholdMixin; + +/** + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +public class TCAPolicyModule extends SimpleModule { + + private static final long serialVersionUID = -5895573053812042524L; + + public TCAPolicyModule() { + super("Threshold Crossing Alert Policy", + new Version(1, 0, 0, null, "org.openecomp.dcae.analytics.model", "dcae-analytics-model")); + } + + @Override + public void setupModule(final SetupContext setupContext) { + + setupContext.setMixInAnnotations(BaseTCAPolicyModel.class, BaseTCAPolicyModelMixin.class); + setupContext.setMixInAnnotations(Direction.class, DirectionMixin.class); + setupContext.setMixInAnnotations(TCAPolicy.class, TCAPolicyMixin.class); + setupContext.setMixInAnnotations(MetricsPerFunctionalRole.class, MetricsPerFunctionalRoleMixin.class); + setupContext.setMixInAnnotations(Threshold.class, ThresholdMixin.class); + setupContext.setMixInAnnotations(TCAPolicy.class, TCAPolicyMixin.class); + + + } +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/BaseDynamicPropertiesProviderMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/BaseDynamicPropertiesProviderMixin.java new file mode 100644 index 0000000..1b4a5fe --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/BaseDynamicPropertiesProviderMixin.java @@ -0,0 +1,41 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.openecomp.dcae.analytics.model.domain.BaseDynamicPropertiesProvider; + +import java.util.Map; + +/** + * Json Mixin for {@link BaseDynamicPropertiesProvider} + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +public abstract class BaseDynamicPropertiesProviderMixin implements JsonMixin { + + @JsonAnySetter + public abstract void addDynamicProperties(String propertyName, Object propertyValue); + + @JsonAnyGetter + public abstract Map<String, Object> getDynamicProperties(); + + @JsonIgnore + public abstract boolean isDynamicPropertiesPresent(); +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/JsonMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/JsonMixin.java new file mode 100644 index 0000000..fab85ba --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/JsonMixin.java @@ -0,0 +1,27 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin; + +import java.io.Serializable; + +/** + * Marker Interface for all Json Mixin classes + * + * @author Rajiv Singla. Creation Date: 11/3/2016. + */ +public interface JsonMixin extends Serializable { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/AlertActionMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/AlertActionMixin.java new file mode 100644 index 0000000..a94d1f5 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/AlertActionMixin.java @@ -0,0 +1,26 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.cef; + +import org.openecomp.dcae.analytics.model.util.json.mixin.JsonMixin; + +/** + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +public abstract class AlertActionMixin implements JsonMixin { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/AlertTypeMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/AlertTypeMixin.java new file mode 100644 index 0000000..e7f83a6 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/AlertTypeMixin.java @@ -0,0 +1,57 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.cef; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import org.openecomp.dcae.analytics.model.domain.cef.AlertType; +import org.openecomp.dcae.analytics.model.util.json.mixin.JsonMixin; + +/** + * Mixin for Alert Type + * + * @author Rajiv Singla. Creation Date: 11/3/2016. + */ +public abstract class AlertTypeMixin implements JsonMixin { + + private String name; + + @JsonCreator + public static AlertType forValue(String name) { + + switch (name) { + case "CARD-ANOMALY": + return AlertType.CARD_ANOMALY; + case "ELEMENT-ANOMALY": + return AlertType.ELEMENT_ANOMALY; + case "INTERFACE-ANOMALY": + return AlertType.INTERFACE_ANOMALY; + case "SERVICE-ANOMALY": + return AlertType.SERVICE_ANOMALY; + default: + return AlertType.UNKNOWN; + } + + } + + @JsonValue + public String getName() { + return name; + } + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/BaseCEFModelMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/BaseCEFModelMixin.java new file mode 100644 index 0000000..77f4e8e --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/BaseCEFModelMixin.java @@ -0,0 +1,29 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.cef; + +import org.openecomp.dcae.analytics.model.util.json.mixin.BaseDynamicPropertiesProviderMixin; + +/** + * Abstract Mixin for all CEF Model Mixins + * + * @author Rajiv Singla. Creation Date: 10/18/2016. + */ +public abstract class BaseCEFModelMixin extends BaseDynamicPropertiesProviderMixin { + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/CommonEventHeaderMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/CommonEventHeaderMixin.java new file mode 100644 index 0000000..8bee579 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/CommonEventHeaderMixin.java @@ -0,0 +1,23 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.cef; + +/** + * @author Rajiv Singla. Creation Date: 10/18/2016. + */ +public abstract class CommonEventHeaderMixin extends BaseCEFModelMixin { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/CriticalityMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/CriticalityMixin.java new file mode 100644 index 0000000..5a7e983 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/CriticalityMixin.java @@ -0,0 +1,26 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.cef; + +import org.openecomp.dcae.analytics.model.util.json.mixin.JsonMixin; + +/** + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +public abstract class CriticalityMixin implements JsonMixin { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/EventListenerMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/EventListenerMixin.java new file mode 100644 index 0000000..9222909 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/EventListenerMixin.java @@ -0,0 +1,27 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.cef; + +/** + * Event Listener Json Mixin class + * <p> + * @author Rajiv Singla. Creation Date: 10/18/2016. + */ +public abstract class EventListenerMixin extends BaseCEFModelMixin { + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/EventMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/EventMixin.java new file mode 100644 index 0000000..fa1090c --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/EventMixin.java @@ -0,0 +1,27 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.cef; + +/** + * Event Json Mixin class + * <p> + * @author Rajiv Singla. Creation Date: 10/18/2016. + */ +public abstract class EventMixin extends BaseCEFModelMixin { + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/EventSeverityMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/EventSeverityMixin.java new file mode 100644 index 0000000..6cc7616 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/EventSeverityMixin.java @@ -0,0 +1,26 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.cef; + +import org.openecomp.dcae.analytics.model.util.json.mixin.JsonMixin; + +/** + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +public abstract class EventSeverityMixin implements JsonMixin { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/MeasurementsForVfScalingFieldsMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/MeasurementsForVfScalingFieldsMixin.java new file mode 100644 index 0000000..f54c844 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/MeasurementsForVfScalingFieldsMixin.java @@ -0,0 +1,35 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.cef; + +import com.fasterxml.jackson.annotation.JsonGetter; +import com.fasterxml.jackson.annotation.JsonSetter; +import org.openecomp.dcae.analytics.model.domain.cef.VNicUsageArray; + +import java.util.List; + +/** + * @author Rajiv Singla. Creation Date: 10/18/2016. + */ +public abstract class MeasurementsForVfScalingFieldsMixin extends BaseCEFModelMixin { + + @JsonSetter("vNicUsageArray") + public abstract void setVNicUsageArray(List<VNicUsageArray> vNicUsageArrays); + + @JsonGetter("vNicUsageArray") + public abstract List<VNicUsageArray> getVNicUsageArray(); +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/PerformanceCounterMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/PerformanceCounterMixin.java new file mode 100644 index 0000000..808c6fd --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/PerformanceCounterMixin.java @@ -0,0 +1,25 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.cef; + +/** + * CEF Performance Counter Mixin + * + * @author Rajiv Singla. Creation Date: 11/3/2016. + */ +public abstract class PerformanceCounterMixin extends BaseCEFModelMixin { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/PriorityMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/PriorityMixin.java new file mode 100644 index 0000000..94460d0 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/PriorityMixin.java @@ -0,0 +1,26 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.cef; + +import org.openecomp.dcae.analytics.model.util.json.mixin.JsonMixin; + +/** + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +public abstract class PriorityMixin implements JsonMixin { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/ThresholdCrossingAlertFieldsMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/ThresholdCrossingAlertFieldsMixin.java new file mode 100644 index 0000000..f81e3cb --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/ThresholdCrossingAlertFieldsMixin.java @@ -0,0 +1,25 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.cef; + +/** + * Mixin class for ThresholdCrossingAlertFields + * + * @author Rajiv Singla. Creation Date: 11/3/2016. + */ +public abstract class ThresholdCrossingAlertFieldsMixin extends BaseCEFModelMixin { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/VNicUsageArrayMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/VNicUsageArrayMixin.java new file mode 100644 index 0000000..6e06f09 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/VNicUsageArrayMixin.java @@ -0,0 +1,32 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.cef; + +import com.fasterxml.jackson.annotation.JsonSetter; + +/** + * @author Rajiv Singla. Creation Date: 10/18/2016. + */ +public abstract class VNicUsageArrayMixin extends BaseCEFModelMixin { + + @JsonSetter("vNicIdentifier") + public abstract void setVNicIdentifier(String name); + + @JsonSetter("vNicIdentifier") + public abstract String setVNicIdentifier(); + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/facade/tca/AAIMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/facade/tca/AAIMixin.java new file mode 100644 index 0000000..a2d583b --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/facade/tca/AAIMixin.java @@ -0,0 +1,50 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.facade.tca; + +import com.fasterxml.jackson.annotation.JsonGetter; +import com.fasterxml.jackson.annotation.JsonSetter; +import org.openecomp.dcae.analytics.model.util.json.mixin.JsonMixin; + +/** + * + * @author Rajiv Singla. Creation Date: 11/9/2016. + */ +public abstract class AAIMixin implements JsonMixin { + + private String genericVNFId; + private String genericServerId; + + @JsonGetter("generic-vnf.vnf-id") + public String getGenericVNFId() { + return genericVNFId; + } + + @JsonSetter("generic-vnf.vnf-id") + public void setGenericVNFId(String genericVNFId) { + this.genericVNFId = genericVNFId; + } + + @JsonGetter("vserver.vserver-name") + public String getGenericServerId() { + return genericServerId; + } + @JsonSetter("vserver.vserver-name") + public void setGenericServerId(String genericServerId) { + this.genericServerId = genericServerId; + } +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/facade/tca/VESCEFMessageResponseMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/facade/tca/VESCEFMessageResponseMixin.java new file mode 100644 index 0000000..4852aad --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/facade/tca/VESCEFMessageResponseMixin.java @@ -0,0 +1,52 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.facade.tca; + +import com.fasterxml.jackson.annotation.JsonGetter; +import com.fasterxml.jackson.annotation.JsonSetter; +import org.openecomp.dcae.analytics.model.facade.tca.AAI; +import org.openecomp.dcae.analytics.model.util.json.mixin.JsonMixin; + +/** + * + * @author Rajiv Singla. Creation Date: 11/9/2016. + */ +public abstract class VESCEFMessageResponseMixin implements JsonMixin { + + private String targetType; + private AAI aai; + + @JsonGetter("target_type") + public String getTargetType() { + return targetType; + } + + @JsonSetter("target_type") + public void setTargetType(String targetType) { + this.targetType = targetType; + } + + @JsonGetter("AAI") + public AAI getAai() { + return aai; + } + + @JsonSetter("AAI") + public void setAai(AAI aai) { + this.aai = aai; + } +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/policy/tca/BaseTCAPolicyModelMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/policy/tca/BaseTCAPolicyModelMixin.java new file mode 100644 index 0000000..af12f62 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/policy/tca/BaseTCAPolicyModelMixin.java @@ -0,0 +1,26 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.policy.tca; + +import org.openecomp.dcae.analytics.model.util.json.mixin.BaseDynamicPropertiesProviderMixin; + +/** + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +public abstract class BaseTCAPolicyModelMixin extends BaseDynamicPropertiesProviderMixin { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/policy/tca/DirectionMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/policy/tca/DirectionMixin.java new file mode 100644 index 0000000..1c364c7 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/policy/tca/DirectionMixin.java @@ -0,0 +1,26 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.policy.tca; + +import org.openecomp.dcae.analytics.model.util.json.mixin.JsonMixin; + +/** + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +public abstract class DirectionMixin implements JsonMixin { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/policy/tca/MetricsPerFunctionalRoleMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/policy/tca/MetricsPerFunctionalRoleMixin.java new file mode 100644 index 0000000..fc8246b --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/policy/tca/MetricsPerFunctionalRoleMixin.java @@ -0,0 +1,24 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.policy.tca; + +/** + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +public abstract class MetricsPerFunctionalRoleMixin extends BaseTCAPolicyModelMixin { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/policy/tca/TCAPolicyMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/policy/tca/TCAPolicyMixin.java new file mode 100644 index 0000000..f27375a --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/policy/tca/TCAPolicyMixin.java @@ -0,0 +1,24 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.policy.tca; + +/** + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +public abstract class TCAPolicyMixin extends BaseTCAPolicyModelMixin { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/policy/tca/ThresholdMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/policy/tca/ThresholdMixin.java new file mode 100644 index 0000000..046f336 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/analytics/model/util/json/mixin/policy/tca/ThresholdMixin.java @@ -0,0 +1,24 @@ +/* + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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.openecomp.dcae.analytics.model.util.json.mixin.policy.tca; + +/** + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +public abstract class ThresholdMixin extends BaseTCAPolicyModelMixin { +} diff --git a/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/BaseAnalyticsModelUnitTest.java b/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/BaseAnalyticsModelUnitTest.java new file mode 100644 index 0000000..55e615a --- /dev/null +++ b/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/BaseAnalyticsModelUnitTest.java @@ -0,0 +1,148 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.model; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.base.Suppliers; +import org.json.JSONException; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.openecomp.dcae.analytics.model.util.json.AnalyticsModelObjectMapperSupplier; +import org.openecomp.dcae.analytics.test.BaseDCAEAnalyticsUnitTest; + +import java.io.IOException; +import java.io.InputStream; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +/** + * @author Rajiv Singla. Creation Date: 10/17/2016. + */ +public abstract class BaseAnalyticsModelUnitTest extends BaseDCAEAnalyticsUnitTest { + + + protected static ObjectMapper objectMapper; + + @BeforeClass + public static void beforeClass() { + final AnalyticsModelObjectMapperSupplier analyticsModelObjectMapperSupplier = + new AnalyticsModelObjectMapperSupplier(); + objectMapper = Suppliers.memoize(analyticsModelObjectMapperSupplier).get(); + } + + + /** + * Deserialize given Json file location to given model class and returns it back without any validation check + * + * @param jsonFileLocation Classpath location of the json file + * @param modelClass Model Class type + * @param <T> Json Model Type + * @return Deserialized Model Object + */ + public static <T> T deserializeJsonFileToModel(String jsonFileLocation, Class<T> modelClass) { + final InputStream jsonFileInputStream = + BaseDCAEAnalyticsUnitTest.class.getClassLoader().getResourceAsStream(jsonFileLocation); + Assert.assertNotNull("Json File Location must be valid", jsonFileInputStream); + try { + return objectMapper.readValue(jsonFileInputStream, modelClass); + } catch (IOException ex) { + LOG.error("Error while doing assert Json for fileLocation: {}, modelClass: {}, Exception {}", + jsonFileLocation, modelClass, ex); + throw new RuntimeException(ex); + } finally { + try { + jsonFileInputStream.close(); + } catch (IOException e) { + LOG.error("Error while closing input stream at file location: {}", jsonFileLocation); + throw new RuntimeException(e); + } + } + } + + /** + * Deserialize given Json file location to given model class and then validates deserialization by comparing it + * with given expected Object + * + * @param jsonFileLocation Classpath location of the json file + * @param modelClass Model Class type + * @param expectedJsonObject Expected Json Object + * @param <T> Json Model Type + * @return deserialized actual value if expected Json Object matches deserialized object + */ + public static <T> T assertJsonDeserialization(String jsonFileLocation, Class<T> modelClass, T expectedJsonObject) { + final T actualValue = deserializeJsonFileToModel(jsonFileLocation, modelClass); + assertThat(actualValue, is(expectedJsonObject)); + return actualValue; + } + + public static String serializeModelToJson(Object model) throws JsonProcessingException { + return objectMapper.writeValueAsString(model); + } + + /** + * Converts given model to json string and compare it with json present at given file location + * + * @param model Model which needs to be compared + * @param expectedJsonFileLocation Location of file containing expected json string + * + * @return If assertion passes returns the input model + */ + public static <T> T assertJsonSerialization(T model, String expectedJsonFileLocation) { + try { + final String actualModelString = serializeModelToJson(model); + final String expectedModelString = fromStream(expectedJsonFileLocation); + assertJson(expectedModelString, actualModelString); + return model; + } catch (IOException | JSONException ex) { + LOG.error("Error while doing assert Json serialization Assertion: model: {}, " + + "expected Json File Location: {}, Exception {}", model, expectedJsonFileLocation, ex); + throw new RuntimeException(ex); + } + + } + + + /** + * Checks both serialization and deserialization. + * + * First checks deserialization and then serialize the deserialized object back to json + * and check if matches the given json file location string + * + * @param jsonFileLocation Classpath location of the json file + * @param modelClass Class type + * @param <T> Json Model Type + * + * @return If assertion passes, returns deserialized object + */ + + public static <T> T assertJsonConversions(String jsonFileLocation, Class<T> modelClass) { + //first check deserialization + final T actualValue = deserializeJsonFileToModel(jsonFileLocation, modelClass); + //then check serialization + assertJsonSerialization(actualValue, jsonFileLocation); + + return actualValue; + } + + +} diff --git a/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/domain/cef/EventSeverityTest.java b/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/domain/cef/EventSeverityTest.java new file mode 100644 index 0000000..5c8d870 --- /dev/null +++ b/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/domain/cef/EventSeverityTest.java @@ -0,0 +1,71 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.model.domain.cef; + +import org.junit.Assert; +import org.junit.Test; +import org.openecomp.dcae.analytics.test.BaseDCAEAnalyticsUnitTest; + +import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedList; +import java.util.List; + +/** + * + * @author Rajiv Singla. Creation Date: 11/10/2016. + */ +public class EventSeverityTest extends BaseDCAEAnalyticsUnitTest { + + private static Comparator<EventSeverity> eventSeverityComparator = new Comparator<EventSeverity>() { + @Override + public int compare(EventSeverity eventSeverity1, EventSeverity eventSeverity2) { + return eventSeverity1.compareTo(eventSeverity2); + } + }; + + @Test + public void testEventSeverityOrdering() throws Exception { + + List<EventSeverity> eventSeverities = new LinkedList<>(); + Collections.addAll(eventSeverities, + EventSeverity.NORMAL, + EventSeverity.WARNING, + EventSeverity.MINOR, + EventSeverity.MAJOR, + EventSeverity.CRITICAL); + + Collections.sort(eventSeverities); + + List<EventSeverity> expectedEventSeverities = new LinkedList<>(); + Collections.addAll(expectedEventSeverities, + EventSeverity.CRITICAL, + EventSeverity.MAJOR, + EventSeverity.MINOR, + EventSeverity.WARNING, + EventSeverity.NORMAL + ); + + Assert.assertTrue("Severity Order must be CRITICAL, MAJOR, MINOR, WARNING, NORMAL", + eventSeverities.equals(expectedEventSeverities)); + + } +} diff --git a/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/AnalyticsModelIOUtilsTest.java b/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/AnalyticsModelIOUtilsTest.java new file mode 100644 index 0000000..ff929ba --- /dev/null +++ b/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/AnalyticsModelIOUtilsTest.java @@ -0,0 +1,75 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.model.util; + + +import org.junit.Test; +import org.openecomp.dcae.analytics.model.BaseAnalyticsModelUnitTest; + +import java.util.Properties; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + +/** + * @author Rajiv Singla. Creation Date: 10/17/2016. + */ +public class AnalyticsModelIOUtilsTest extends BaseAnalyticsModelUnitTest { + + private static final String TEST_CONFIG_FILE_LOCATION = "data/json/config/testAppConfig.json"; + private static final String INVALID_TEST_CONFIG_FILE_LOCATION = "data/json/config/invalidJsonConfig.json"; + private static final String TEST_PROPERTIES_FILE_LOCATION = "data/testApp.properties"; + + @Test + public void testConvertToJsonObjectWhenFileLocationIsValid() throws Exception { + ConfigHolder configHolder = + AnalyticsModelIOUtils.convertToJsonObject(TEST_CONFIG_FILE_LOCATION, ConfigHolder.class); + String appName = configHolder.getConfig().getAppName(); + assertEquals("App Name must match with json settings file value", "TestAppName", appName); + String appDescription = configHolder.getConfig().getAppDescription(); + assertEquals("App Description much with json settings file value", "Test App Description", appDescription); + } + + @Test(expected = RuntimeException.class) + public void testConvertToJsonObjectWhenFileLocationIsInvValid() throws Exception { + AnalyticsModelIOUtils.convertToJsonObject("InvalidFileLocation", ConfigHolder.class); + } + + @Test(expected = RuntimeException.class) + public void testConvertToJsonObjectWhenJsonFileHasInvalidJson() throws Exception { + AnalyticsModelIOUtils.convertToJsonObject(INVALID_TEST_CONFIG_FILE_LOCATION, ConfigHolder.class); + } + + + @Test + public void testValidPropertiesFileLoading() throws Exception { + final Properties properties = AnalyticsModelIOUtils.loadPropertiesFile(TEST_PROPERTIES_FILE_LOCATION); + assertThat("Properties File must contain 2 properties", properties.size(), is(2)); + } + + @Test(expected = RuntimeException.class) + public void testNonExistingProperitesFileLoading() throws Exception { + AnalyticsModelIOUtils.loadPropertiesFile("InvalidPropertiesFileLocation"); + } + +} + diff --git a/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/ConfigHolder.java b/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/ConfigHolder.java new file mode 100644 index 0000000..35d6c80 --- /dev/null +++ b/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/ConfigHolder.java @@ -0,0 +1,33 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.model.util; + +/** + * Created by Rajiv Singla on 10/5/2016. + */ +public class ConfigHolder { + + private TestAppConfig config; + + public TestAppConfig getConfig() { + return config; + } +} diff --git a/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/TestAppConfig.java b/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/TestAppConfig.java new file mode 100644 index 0000000..d5a6a1e --- /dev/null +++ b/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/TestAppConfig.java @@ -0,0 +1,40 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.model.util; + +/** + * Created by Rajiv Singla on 10/5/2016. + */ +public class TestAppConfig { + + private String appName; + private String appDescription; + + public String getAppName() { + return appName; + } + + public String getAppDescription() { + return appDescription; + } +} + + diff --git a/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/AlertTypeMixinTest.java b/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/AlertTypeMixinTest.java new file mode 100644 index 0000000..078dae4 --- /dev/null +++ b/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/AlertTypeMixinTest.java @@ -0,0 +1,51 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.model.util.json.mixin.cef; + +import org.hamcrest.CoreMatchers; +import org.junit.Test; +import org.openecomp.dcae.analytics.model.BaseAnalyticsModelUnitTest; +import org.openecomp.dcae.analytics.model.domain.cef.AlertType; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +/** + * + * @author Rajiv Singla. Creation Date: 11/3/2016. + */ +public class AlertTypeMixinTest extends BaseAnalyticsModelUnitTest { + + // NOTE: Alert type enum has some special customizations in AlertTypeMixin class + // as Java enum names does not allow for "-" so actual values are coded as enum names + @Test + public void testAlertTypeJsonConversions() throws Exception { + + final String alertTypeJson = serializeModelToJson(AlertType.CARD_ANOMALY); + assertThat("Alert Type Json for CARD ANOMALY must have hyphen in it", alertTypeJson, + is("\"CARD-ANOMALY\"")); + // convert parsed alert type back to enum + final AlertType alertType = objectMapper.readValue(alertTypeJson, AlertType.class); + LOG.debug(alertType.toString()); + assertThat("Json String for CARD ANOMALY with hyphen can be converted back to Alert Type", alertType, + CoreMatchers.is(AlertType.CARD_ANOMALY)); + } +} diff --git a/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/EventListenerMixinTest.java b/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/EventListenerMixinTest.java new file mode 100644 index 0000000..2bf4a6a --- /dev/null +++ b/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/json/mixin/cef/EventListenerMixinTest.java @@ -0,0 +1,88 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.model.util.json.mixin.cef; + +import com.fasterxml.jackson.core.type.TypeReference; +import org.junit.Test; +import org.openecomp.dcae.analytics.model.BaseAnalyticsModelUnitTest; +import org.openecomp.dcae.analytics.model.domain.cef.EventListener; +import org.openecomp.dcae.analytics.model.domain.cef.MeasurementsForVfScalingFields; +import org.openecomp.dcae.analytics.model.domain.cef.VNicUsageArray; + +import java.util.List; +import java.util.Map; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +/** + * @author Rajiv Singla. Creation Date: 10/18/2016. + */ +public class EventListenerMixinTest extends BaseAnalyticsModelUnitTest { + + final String eventListenerJsonFileLocation = "data/json/cef/event_listener.json"; + final String cefMessagesJsonFileLocation = "data/json/cef/cef_messages.json"; + + @Test + public void testEventListenerJsonConversions() throws Exception { + + final EventListener eventListener = assertJsonConversions(eventListenerJsonFileLocation, EventListener.class); + + Map<String, Object> dynamicProperties = eventListener.getDynamicProperties(); + + assertThat("Dynamic Properties size must be 1", dynamicProperties.size(), is(1)); + + + } + + @Test + public void testCollectionOfEventListenersJsonConversion() throws Exception { + + final String cefMessageAsString = fromStream(cefMessagesJsonFileLocation); + + final TypeReference<List<EventListener>> eventListenerListTypeReference = + new TypeReference<List<EventListener>>() { + }; + List<EventListener> eventListeners = objectMapper.readValue(cefMessageAsString, eventListenerListTypeReference); + assertThat("Event Listeners size must be 350", eventListeners.size(), is(350)); + + final MeasurementsForVfScalingFields measurementsForVfScalingFields = eventListeners.get(0).getEvent() + .getMeasurementsForVfScalingFields(); + + // Note: vNicUsageArray - due to odd naming convention have to be explicitly resolved with Mixin annotations + assertThat("vNicUsageArray is present on the first measurementForVfScaling", + measurementsForVfScalingFields.getVNicUsageArray().size(), is(1)); + final VNicUsageArray vNicUsageArray = measurementsForVfScalingFields.getVNicUsageArray().get(0); + assertThat("ByesIn is present on vNicUsageArray", vNicUsageArray.getBytesIn(), is(6086L)); + + // Note: vNicIdentifier - due to odd naming convention have to be explicity resolved with Mixin annotations + assertThat("vNicIdentifier is present on vNicUsageArray", vNicUsageArray.getVNicIdentifier(), is("eth0")); + + // Check serialized json will match deserialized json + final String eventListenerString = objectMapper.writeValueAsString(eventListeners); + assertJson(cefMessageAsString, eventListenerString); + + // Checks serialization + testSerialization(eventListeners, getClass()); + + } + +} diff --git a/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/json/mixin/facade/tca/TCAVESResponseMixinTest.java b/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/json/mixin/facade/tca/TCAVESResponseMixinTest.java new file mode 100644 index 0000000..c853c57 --- /dev/null +++ b/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/json/mixin/facade/tca/TCAVESResponseMixinTest.java @@ -0,0 +1,57 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.model.util.json.mixin.facade.tca; + +import org.junit.Test; +import org.openecomp.dcae.analytics.model.BaseAnalyticsModelUnitTest; +import org.openecomp.dcae.analytics.model.facade.tca.TCAVESResponse; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +/** + * + * @author Rajiv Singla. Creation Date: 11/9/2016. + */ +public class TCAVESResponseMixinTest extends BaseAnalyticsModelUnitTest { + + final String tcaVESCEFResponseJsonFileLocation = "data/json/facade/tca_ves_cef_response.json"; + + @Test + public void testTCAPolicyJsonConversions() throws Exception { + + final TCAVESResponse vesCEFMessageResponse = + assertJsonConversions(tcaVESCEFResponseJsonFileLocation, TCAVESResponse.class); + + assertThat("VES CEF Message Response AAI generics VNF Id must match", + vesCEFMessageResponse.getAai().getGenericVNFId(), is("vpp-test(?)")); + + assertThat("VES CEF Message Response AAI generic Server Id must match", + vesCEFMessageResponse.getAai().getGenericServerId(), is("dfw1lb01lb01")); + + assertThat("VES CEF Message target type must be parsed correctly as VNF", + vesCEFMessageResponse.getTargetType(), is("VNF")); + + testSerialization(vesCEFMessageResponse, getClass()); + + } + +} diff --git a/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/json/mixin/policy/tca/TCAPolicyMixinTest.java b/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/json/mixin/policy/tca/TCAPolicyMixinTest.java new file mode 100644 index 0000000..1490563 --- /dev/null +++ b/dcae-analytics-model/src/test/java/org/openecomp/dcae/analytics/model/util/json/mixin/policy/tca/TCAPolicyMixinTest.java @@ -0,0 +1,56 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.model.util.json.mixin.policy.tca; + +import org.junit.Test; +import org.openecomp.dcae.analytics.model.BaseAnalyticsModelUnitTest; +import org.openecomp.dcae.analytics.model.domain.policy.tca.TCAPolicy; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +/** + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +public class TCAPolicyMixinTest extends BaseAnalyticsModelUnitTest { + + final String tcaPolicyJsonFileLocation = "data/json/policy/tca_policy.json"; + + @Test + public void testTCAPolicyJsonConversions() throws Exception { + + final TCAPolicy tcaPolicy = assertJsonConversions(tcaPolicyJsonFileLocation, TCAPolicy.class); + + assertThat("TCA Policy Metrics Per functional role must be 2", + tcaPolicy.getMetricsPerFunctionalRole().size(), is(2)); + + assertThat("TCA Policy Thresholds for first functional role must be 2", + tcaPolicy.getMetricsPerFunctionalRole().get(0).getThresholds().size(), is(2)); + + testSerialization(tcaPolicy, getClass()); + + } + + + + +} diff --git a/dcae-analytics-model/src/test/resources/data/json/cef/cef_messages.json b/dcae-analytics-model/src/test/resources/data/json/cef/cef_messages.json new file mode 100644 index 0000000..bc7a924 --- /dev/null +++ b/dcae-analytics-model/src/test/resources/data/json/cef/cef_messages.json @@ -0,0 +1,12952 @@ +[ + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6086, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7156, + "packetsIn": 93, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070210290442, + "eventId": "375", + "lastEpochMicrosec": 1477070220290442, + "priority": "Normal", + "sequence": 375, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5403, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 4530, + "packetsIn": 78, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070260383311, + "eventId": "380", + "lastEpochMicrosec": 1477070270383311, + "priority": "Normal", + "sequence": 380, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3972, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5316, + "packetsIn": 56, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070290441950, + "eventId": "383", + "lastEpochMicrosec": 1477070300441950, + "priority": "Normal", + "sequence": 383, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4761, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5528, + "packetsIn": 70, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070380597960, + "eventId": "392", + "lastEpochMicrosec": 1477070390597960, + "priority": "Normal", + "sequence": 392, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5828, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5222, + "packetsIn": 89, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070390615151, + "eventId": "393", + "lastEpochMicrosec": 1477070400615151, + "priority": "Normal", + "sequence": 393, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3834, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4334, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070701189940, + "eventId": "424", + "lastEpochMicrosec": 1477070711189940, + "priority": "Normal", + "sequence": 424, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3892, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4400, + "packetsIn": 53, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070851466814, + "eventId": "439", + "lastEpochMicrosec": 1477070861466814, + "priority": "Normal", + "sequence": 439, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5948, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5215, + "packetsIn": 90, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070931613946, + "eventId": "447", + "lastEpochMicrosec": 1477070941613946, + "priority": "Normal", + "sequence": 447, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4324, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5436, + "packetsIn": 57, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070971689950, + "eventId": "451", + "lastEpochMicrosec": 1477070981689950, + "priority": "Normal", + "sequence": 451, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5918, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 34, + "bytesOut": 5668, + "packetsIn": 91, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070991724150, + "eventId": "453", + "lastEpochMicrosec": 1477071001724150, + "priority": "Normal", + "sequence": 453, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4200, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 5192, + "packetsIn": 63, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071081905713, + "eventId": "462", + "lastEpochMicrosec": 1477071091905713, + "priority": "Normal", + "sequence": 462, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4490, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 36, + "bytesOut": 5920, + "packetsIn": 67, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071262221510, + "eventId": "480", + "lastEpochMicrosec": 1477071272221510, + "priority": "Normal", + "sequence": 480, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 25940, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 157, + "bytesOut": 27474, + "packetsIn": 303, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071412476618, + "eventId": "495", + "lastEpochMicrosec": 1477071422476618, + "priority": "Normal", + "sequence": 495, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7160, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5418, + "packetsIn": 112, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071532712315, + "eventId": "507", + "lastEpochMicrosec": 1477071542712315, + "priority": "Normal", + "sequence": 507, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5563, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4192, + "packetsIn": 81, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071582806156, + "eventId": "512", + "lastEpochMicrosec": 1477071592806156, + "priority": "Normal", + "sequence": 512, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4988, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5218, + "packetsIn": 77, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071592825964, + "eventId": "513", + "lastEpochMicrosec": 1477071602825964, + "priority": "Normal", + "sequence": 513, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 9123, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 53, + "bytesOut": 8412, + "packetsIn": 127, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071642920935, + "eventId": "518", + "lastEpochMicrosec": 1477071652920935, + "priority": "Normal", + "sequence": 518, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 18442, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 112, + "bytesOut": 19404, + "packetsIn": 218, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071733101176, + "eventId": "527", + "lastEpochMicrosec": 1477071743101176, + "priority": "Normal", + "sequence": 527, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5216, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5130, + "packetsIn": 80, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071743125902, + "eventId": "528", + "lastEpochMicrosec": 1477071753125902, + "priority": "Normal", + "sequence": 528, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5870, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 36, + "bytesOut": 6716, + "packetsIn": 91, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071903446337, + "eventId": "544", + "lastEpochMicrosec": 1477071913446337, + "priority": "Normal", + "sequence": 544, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 35138, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 220, + "bytesOut": 47818, + "packetsIn": 407, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071953549981, + "eventId": "549", + "lastEpochMicrosec": 1477071963549981, + "priority": "Normal", + "sequence": 549, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 63510, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 398, + "bytesOut": 71038, + "packetsIn": 703, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071963565170, + "eventId": "550", + "lastEpochMicrosec": 1477071973565170, + "priority": "Normal", + "sequence": 550, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4250, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 5060, + "packetsIn": 64, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072103847337, + "eventId": "564", + "lastEpochMicrosec": 1477072113847337, + "priority": "Normal", + "sequence": 564, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3344, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 23, + "bytesOut": 4138, + "packetsIn": 49, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072163977616, + "eventId": "570", + "lastEpochMicrosec": 1477072173977616, + "priority": "Normal", + "sequence": 570, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4190, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 5032, + "packetsIn": 63, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072194037594, + "eventId": "573", + "lastEpochMicrosec": 1477072204037594, + "priority": "Normal", + "sequence": 573, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4102, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5418, + "packetsIn": 54, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072234105966, + "eventId": "577", + "lastEpochMicrosec": 1477072244105966, + "priority": "Normal", + "sequence": 577, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4040, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5410, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072284197410, + "eventId": "582", + "lastEpochMicrosec": 1477072294197410, + "priority": "Normal", + "sequence": 582, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4348, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5556, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072294217952, + "eventId": "583", + "lastEpochMicrosec": 1477072304217952, + "priority": "Normal", + "sequence": 583, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4820, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5402, + "packetsIn": 66, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072354321794, + "eventId": "589", + "lastEpochMicrosec": 1477072364321794, + "priority": "Normal", + "sequence": 589, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5006, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7156, + "packetsIn": 73, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072454499759, + "eventId": "599", + "lastEpochMicrosec": 1477072464499759, + "priority": "Normal", + "sequence": 599, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4964, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 35, + "bytesOut": 5834, + "packetsIn": 75, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072494602015, + "eventId": "603", + "lastEpochMicrosec": 1477072504602015, + "priority": "Normal", + "sequence": 603, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5330, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 46, + "bytesOut": 7420, + "packetsIn": 80, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072634866475, + "eventId": "617", + "lastEpochMicrosec": 1477072644866475, + "priority": "Normal", + "sequence": 617, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5330, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 46, + "bytesOut": 7420, + "packetsIn": 80, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072745069203, + "eventId": "628", + "lastEpochMicrosec": 1477072755069203, + "priority": "Normal", + "sequence": 628, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 263112, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 1165, + "bytesOut": 337182, + "packetsIn": 2570, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072805174346, + "eventId": "634", + "lastEpochMicrosec": 1477072815174346, + "priority": "Normal", + "sequence": 634, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 11212, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4232, + "packetsIn": 176, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072835250994, + "eventId": "637", + "lastEpochMicrosec": 1477072845250994, + "priority": "Normal", + "sequence": 637, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6375, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5516, + "packetsIn": 94, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072845276414, + "eventId": "638", + "lastEpochMicrosec": 1477072855276414, + "priority": "Normal", + "sequence": 638, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3492, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 5252, + "packetsIn": 50, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072995553968, + "eventId": "653", + "lastEpochMicrosec": 1477073005553968, + "priority": "Normal", + "sequence": 653, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4256, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5407, + "packetsIn": 63, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073095741898, + "eventId": "663", + "lastEpochMicrosec": 1477073105741898, + "priority": "Normal", + "sequence": 663, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4280, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4866, + "packetsIn": 56, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073195929121, + "eventId": "673", + "lastEpochMicrosec": 1477073205929121, + "priority": "Normal", + "sequence": 673, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4076, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5126, + "packetsIn": 61, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073286097936, + "eventId": "682", + "lastEpochMicrosec": 1477073296097936, + "priority": "Normal", + "sequence": 682, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5054, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6600, + "packetsIn": 78, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073366234417, + "eventId": "690", + "lastEpochMicrosec": 1477073376234417, + "priority": "Normal", + "sequence": 690, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5186, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7220, + "packetsIn": 78, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073426339606, + "eventId": "696", + "lastEpochMicrosec": 1477073436339606, + "priority": "Normal", + "sequence": 696, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4568, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 39, + "bytesOut": 6606, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073556577962, + "eventId": "709", + "lastEpochMicrosec": 1477073566577962, + "priority": "Normal", + "sequence": 709, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4472, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5630, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073606669965, + "eventId": "714", + "lastEpochMicrosec": 1477073616669965, + "priority": "Normal", + "sequence": 714, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3554, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 5192, + "packetsIn": 52, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073666794004, + "eventId": "720", + "lastEpochMicrosec": 1477073676794004, + "priority": "Normal", + "sequence": 720, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4682, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6540, + "packetsIn": 70, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070300458069, + "eventId": "384", + "lastEpochMicrosec": 1477070310458069, + "priority": "Normal", + "sequence": 384, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4470, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 43, + "bytesOut": 7250, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070350545310, + "eventId": "389", + "lastEpochMicrosec": 1477070360545310, + "priority": "Normal", + "sequence": 389, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5864, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 45, + "bytesOut": 7318, + "packetsIn": 88, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070450716636, + "eventId": "399", + "lastEpochMicrosec": 1477070460716636, + "priority": "Normal", + "sequence": 399, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3558, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5362, + "packetsIn": 51, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070470756168, + "eventId": "401", + "lastEpochMicrosec": 1477070480756168, + "priority": "Normal", + "sequence": 401, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5022, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 45, + "bytesOut": 7382, + "packetsIn": 74, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070530883239, + "eventId": "407", + "lastEpochMicrosec": 1477070540883239, + "priority": "Normal", + "sequence": 407, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4816, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5344, + "packetsIn": 66, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070611026436, + "eventId": "415", + "lastEpochMicrosec": 1477070621026436, + "priority": "Normal", + "sequence": 415, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 8898, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 63, + "bytesOut": 9201, + "packetsIn": 113, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070831428780, + "eventId": "437", + "lastEpochMicrosec": 1477070841428780, + "priority": "Normal", + "sequence": 437, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3836, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 23, + "bytesOut": 4162, + "packetsIn": 57, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070941633936, + "eventId": "448", + "lastEpochMicrosec": 1477070951633936, + "priority": "Normal", + "sequence": 448, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3248, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 4546, + "packetsIn": 47, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071071883807, + "eventId": "461", + "lastEpochMicrosec": 1477071081883807, + "priority": "Normal", + "sequence": 461, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5006, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5286, + "packetsIn": 76, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071172066272, + "eventId": "471", + "lastEpochMicrosec": 1477071182066272, + "priority": "Normal", + "sequence": 471, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5438, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 34, + "bytesOut": 6084, + "packetsIn": 83, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071182086282, + "eventId": "472", + "lastEpochMicrosec": 1477071192086282, + "priority": "Normal", + "sequence": 472, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 14114, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 92, + "bytesOut": 16060, + "packetsIn": 172, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071382426114, + "eventId": "492", + "lastEpochMicrosec": 1477071392426114, + "priority": "Normal", + "sequence": 492, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5617, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5427, + "packetsIn": 86, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071542733962, + "eventId": "508", + "lastEpochMicrosec": 1477071552733962, + "priority": "Normal", + "sequence": 508, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4448, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 4538, + "packetsIn": 67, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071682993575, + "eventId": "522", + "lastEpochMicrosec": 1477071692993575, + "priority": "Normal", + "sequence": 522, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6113, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5298, + "packetsIn": 87, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071703031027, + "eventId": "524", + "lastEpochMicrosec": 1477071713031027, + "priority": "Normal", + "sequence": 524, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5542, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5434, + "packetsIn": 78, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071813273088, + "eventId": "535", + "lastEpochMicrosec": 1477071823273088, + "priority": "Normal", + "sequence": 535, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 34574, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 214, + "bytesOut": 47040, + "packetsIn": 395, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072023686281, + "eventId": "556", + "lastEpochMicrosec": 1477072033686281, + "priority": "Normal", + "sequence": 556, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 2798, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 22, + "bytesOut": 4028, + "packetsIn": 40, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072093829958, + "eventId": "563", + "lastEpochMicrosec": 1477072103829958, + "priority": "Normal", + "sequence": 563, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3446, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5536, + "packetsIn": 50, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072153957985, + "eventId": "569", + "lastEpochMicrosec": 1477072163957985, + "priority": "Normal", + "sequence": 569, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4190, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 36, + "bytesOut": 6760, + "packetsIn": 62, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072204053021, + "eventId": "574", + "lastEpochMicrosec": 1477072214053021, + "priority": "Normal", + "sequence": 574, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5939, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 4522, + "packetsIn": 85, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072244123508, + "eventId": "578", + "lastEpochMicrosec": 1477072254123508, + "priority": "Normal", + "sequence": 578, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4022, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 4584, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072464518421, + "eventId": "600", + "lastEpochMicrosec": 1477072474518421, + "priority": "Normal", + "sequence": 600, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3692, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 21, + "bytesOut": 3918, + "packetsIn": 47, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072654900903, + "eventId": "619", + "lastEpochMicrosec": 1477072664900903, + "priority": "Normal", + "sequence": 619, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5006, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5728, + "packetsIn": 76, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072704996775, + "eventId": "624", + "lastEpochMicrosec": 1477072714996775, + "priority": "Normal", + "sequence": 624, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3836, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 5036, + "packetsIn": 57, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072925428340, + "eventId": "646", + "lastEpochMicrosec": 1477072935428340, + "priority": "Normal", + "sequence": 646, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4040, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5382, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072985535172, + "eventId": "652", + "lastEpochMicrosec": 1477072995535172, + "priority": "Normal", + "sequence": 652, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4694, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5316, + "packetsIn": 63, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073075701224, + "eventId": "661", + "lastEpochMicrosec": 1477073085701224, + "priority": "Normal", + "sequence": 661, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5066, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7120, + "packetsIn": 76, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073105759457, + "eventId": "664", + "lastEpochMicrosec": 1477073115759457, + "priority": "Normal", + "sequence": 664, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5510, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 46, + "bytesOut": 7421, + "packetsIn": 83, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073155858608, + "eventId": "669", + "lastEpochMicrosec": 1477073165858608, + "priority": "Normal", + "sequence": 669, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4146, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5214, + "packetsIn": 61, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073416320492, + "eventId": "695", + "lastEpochMicrosec": 1477073426320492, + "priority": "Normal", + "sequence": 695, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5610, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 44, + "bytesOut": 7392, + "packetsIn": 76, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073436360527, + "eventId": "697", + "lastEpochMicrosec": 1477073446360527, + "priority": "Normal", + "sequence": 697, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6777, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5276, + "packetsIn": 101, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073506489807, + "eventId": "704", + "lastEpochMicrosec": 1477073516489807, + "priority": "Normal", + "sequence": 704, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4898, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 34, + "bytesOut": 6005, + "packetsIn": 74, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073516505974, + "eventId": "705", + "lastEpochMicrosec": 1477073526505974, + "priority": "Normal", + "sequence": 705, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3902, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5120, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073656765261, + "eventId": "719", + "lastEpochMicrosec": 1477073666765261, + "priority": "Normal", + "sequence": 719, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7185, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 37, + "bytesOut": 6488, + "packetsIn": 108, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073686831588, + "eventId": "722", + "lastEpochMicrosec": 1477073696831588, + "priority": "Normal", + "sequence": 722, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4778, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5084, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070240346627, + "eventId": "378", + "lastEpochMicrosec": 1477070250346627, + "priority": "Normal", + "sequence": 378, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5318, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4864, + "packetsIn": 82, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070270398947, + "eventId": "381", + "lastEpochMicrosec": 1477070280398947, + "priority": "Normal", + "sequence": 381, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5079, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5266, + "packetsIn": 71, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070440700538, + "eventId": "398", + "lastEpochMicrosec": 1477070450700538, + "priority": "Normal", + "sequence": 398, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3866, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 22, + "bytesOut": 3980, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070601009676, + "eventId": "414", + "lastEpochMicrosec": 1477070611009676, + "priority": "Normal", + "sequence": 414, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 10154, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 43, + "bytesOut": 7884, + "packetsIn": 99, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070751281687, + "eventId": "429", + "lastEpochMicrosec": 1477070761281687, + "priority": "Normal", + "sequence": 429, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7970, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5427, + "packetsIn": 128, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070781332864, + "eventId": "432", + "lastEpochMicrosec": 1477070791332864, + "priority": "Normal", + "sequence": 432, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6052, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7480, + "packetsIn": 82, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070891536182, + "eventId": "443", + "lastEpochMicrosec": 1477070901536182, + "priority": "Normal", + "sequence": 443, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5080, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 44, + "bytesOut": 7288, + "packetsIn": 69, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071031806592, + "eventId": "457", + "lastEpochMicrosec": 1477071041806592, + "priority": "Normal", + "sequence": 457, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4777, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4122, + "packetsIn": 67, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071041825555, + "eventId": "458", + "lastEpochMicrosec": 1477071051825555, + "priority": "Normal", + "sequence": 458, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4736, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4302, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071111957977, + "eventId": "465", + "lastEpochMicrosec": 1477071121957977, + "priority": "Normal", + "sequence": 465, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6283, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 35, + "bytesOut": 5272, + "packetsIn": 89, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071162050981, + "eventId": "470", + "lastEpochMicrosec": 1477071172050981, + "priority": "Normal", + "sequence": 470, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5010, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 43, + "bytesOut": 7250, + "packetsIn": 74, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071192103048, + "eventId": "473", + "lastEpochMicrosec": 1477071202103048, + "priority": "Normal", + "sequence": 473, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3360, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 5112, + "packetsIn": 48, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071252204852, + "eventId": "479", + "lastEpochMicrosec": 1477071262204852, + "priority": "Normal", + "sequence": 479, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3912, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5324, + "packetsIn": 57, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071312304729, + "eventId": "485", + "lastEpochMicrosec": 1477071322304729, + "priority": "Normal", + "sequence": 485, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4568, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5294, + "packetsIn": 70, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071352377904, + "eventId": "489", + "lastEpochMicrosec": 1477071362377904, + "priority": "Normal", + "sequence": 489, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 26549, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 158, + "bytesOut": 28258, + "packetsIn": 311, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071402460522, + "eventId": "494", + "lastEpochMicrosec": 1477071412460522, + "priority": "Normal", + "sequence": 494, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5329, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4270, + "packetsIn": 78, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071462573938, + "eventId": "500", + "lastEpochMicrosec": 1477071472573938, + "priority": "Normal", + "sequence": 500, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6232, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 46, + "bytesOut": 7420, + "packetsIn": 86, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071572787941, + "eventId": "511", + "lastEpochMicrosec": 1477071582787941, + "priority": "Normal", + "sequence": 511, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4532, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 20, + "bytesOut": 3809, + "packetsIn": 69, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071662956095, + "eventId": "520", + "lastEpochMicrosec": 1477071672956095, + "priority": "Normal", + "sequence": 520, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4520, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5490, + "packetsIn": 68, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071672977950, + "eventId": "521", + "lastEpochMicrosec": 1477071682977950, + "priority": "Normal", + "sequence": 521, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5002, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 4734, + "packetsIn": 68, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071693013688, + "eventId": "523", + "lastEpochMicrosec": 1477071703013688, + "priority": "Normal", + "sequence": 523, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5516, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 5023, + "packetsIn": 85, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071893429573, + "eventId": "543", + "lastEpochMicrosec": 1477071903429573, + "priority": "Normal", + "sequence": 543, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 18644, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 120, + "bytesOut": 20884, + "packetsIn": 230, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071923478914, + "eventId": "546", + "lastEpochMicrosec": 1477071933478914, + "priority": "Normal", + "sequence": 546, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4914, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5640, + "packetsIn": 71, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071983602387, + "eventId": "552", + "lastEpochMicrosec": 1477071993602387, + "priority": "Normal", + "sequence": 552, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 8506, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 60, + "bytesOut": 11100, + "packetsIn": 110, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071993632316, + "eventId": "553", + "lastEpochMicrosec": 1477072003632316, + "priority": "Normal", + "sequence": 553, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 17750, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 120, + "bytesOut": 25832, + "packetsIn": 215, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072043723108, + "eventId": "558", + "lastEpochMicrosec": 1477072053723108, + "priority": "Normal", + "sequence": 558, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4592, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5504, + "packetsIn": 69, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072143938037, + "eventId": "568", + "lastEpochMicrosec": 1477072153938037, + "priority": "Normal", + "sequence": 568, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 8125, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 55, + "bytesOut": 8060, + "packetsIn": 119, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072364341906, + "eventId": "590", + "lastEpochMicrosec": 1477072374341906, + "priority": "Normal", + "sequence": 590, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4136, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5851, + "packetsIn": 62, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072374359351, + "eventId": "591", + "lastEpochMicrosec": 1477072384359351, + "priority": "Normal", + "sequence": 591, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4388, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5206, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072474537911, + "eventId": "601", + "lastEpochMicrosec": 1477072484537911, + "priority": "Normal", + "sequence": 601, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5228, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6932, + "packetsIn": 71, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072534679739, + "eventId": "607", + "lastEpochMicrosec": 1477072544679739, + "priority": "Normal", + "sequence": 607, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3836, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5018, + "packetsIn": 55, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072574755001, + "eventId": "611", + "lastEpochMicrosec": 1477072584755001, + "priority": "Normal", + "sequence": 611, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6919, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5628, + "packetsIn": 104, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072725036569, + "eventId": "626", + "lastEpochMicrosec": 1477072735036569, + "priority": "Normal", + "sequence": 626, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4442, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6892, + "packetsIn": 66, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072855292945, + "eventId": "639", + "lastEpochMicrosec": 1477072865292945, + "priority": "Normal", + "sequence": 639, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6909, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 6802, + "packetsIn": 102, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072905381152, + "eventId": "644", + "lastEpochMicrosec": 1477072915381152, + "priority": "Normal", + "sequence": 644, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4826, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7156, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072945465009, + "eventId": "648", + "lastEpochMicrosec": 1477072955465009, + "priority": "Normal", + "sequence": 648, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3636, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4160, + "packetsIn": 53, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073115777000, + "eventId": "665", + "lastEpochMicrosec": 1477073125777000, + "priority": "Normal", + "sequence": 665, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4098, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5354, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073235998974, + "eventId": "677", + "lastEpochMicrosec": 1477073245998974, + "priority": "Normal", + "sequence": 677, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4508, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5166, + "packetsIn": 68, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073246017901, + "eventId": "678", + "lastEpochMicrosec": 1477073256017901, + "priority": "Normal", + "sequence": 678, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4026, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5358, + "packetsIn": 59, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073296117387, + "eventId": "683", + "lastEpochMicrosec": 1477073306117387, + "priority": "Normal", + "sequence": 683, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3938, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4168, + "packetsIn": 49, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073376250039, + "eventId": "691", + "lastEpochMicrosec": 1477073386250039, + "priority": "Normal", + "sequence": 691, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4514, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5324, + "packetsIn": 70, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073586625284, + "eventId": "712", + "lastEpochMicrosec": 1477073596625284, + "priority": "Normal", + "sequence": 712, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5193, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 35, + "bytesOut": 5748, + "packetsIn": 74, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070200274642, + "eventId": "374", + "lastEpochMicrosec": 1477070210274642, + "priority": "Normal", + "sequence": 374, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4208, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 4874, + "packetsIn": 63, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070220308044, + "eventId": "376", + "lastEpochMicrosec": 1477070230308044, + "priority": "Normal", + "sequence": 376, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4102, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5346, + "packetsIn": 55, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070490793952, + "eventId": "403", + "lastEpochMicrosec": 1477070500793952, + "priority": "Normal", + "sequence": 403, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3278, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 22, + "bytesOut": 4036, + "packetsIn": 48, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070540900880, + "eventId": "408", + "lastEpochMicrosec": 1477070550900880, + "priority": "Normal", + "sequence": 408, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4094, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5333, + "packetsIn": 61, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070580972300, + "eventId": "412", + "lastEpochMicrosec": 1477070590972300, + "priority": "Normal", + "sequence": 412, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6261, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5472, + "packetsIn": 93, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070621041944, + "eventId": "416", + "lastEpochMicrosec": 1477070631041944, + "priority": "Normal", + "sequence": 416, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4462, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5302, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070671133935, + "eventId": "421", + "lastEpochMicrosec": 1477070681133935, + "priority": "Normal", + "sequence": 421, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3518, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 22, + "bytesOut": 4028, + "packetsIn": 52, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070721225970, + "eventId": "426", + "lastEpochMicrosec": 1477070731225970, + "priority": "Normal", + "sequence": 426, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7454, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 50, + "bytesOut": 7435, + "packetsIn": 100, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070771317040, + "eventId": "431", + "lastEpochMicrosec": 1477070781317040, + "priority": "Normal", + "sequence": 431, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 46408, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 282, + "bytesOut": 41467, + "packetsIn": 531, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070811385505, + "eventId": "435", + "lastEpochMicrosec": 1477070821385505, + "priority": "Normal", + "sequence": 435, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4444, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 4436, + "packetsIn": 61, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071091925961, + "eventId": "463", + "lastEpochMicrosec": 1477071101925961, + "priority": "Normal", + "sequence": 463, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5120, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 4898, + "packetsIn": 77, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071362393895, + "eventId": "490", + "lastEpochMicrosec": 1477071372393895, + "priority": "Normal", + "sequence": 490, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4314, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4326, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071372410540, + "eventId": "491", + "lastEpochMicrosec": 1477071382410540, + "priority": "Normal", + "sequence": 491, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5072, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5518, + "packetsIn": 77, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071422497943, + "eventId": "496", + "lastEpochMicrosec": 1477071432497943, + "priority": "Normal", + "sequence": 496, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4868, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5286, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071602842823, + "eventId": "514", + "lastEpochMicrosec": 1477071612842823, + "priority": "Normal", + "sequence": 514, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5534, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5324, + "packetsIn": 85, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071863369947, + "eventId": "540", + "lastEpochMicrosec": 1477071873369947, + "priority": "Normal", + "sequence": 540, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4594, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 23, + "bytesOut": 4074, + "packetsIn": 63, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071873389953, + "eventId": "541", + "lastEpochMicrosec": 1477071883389953, + "priority": "Normal", + "sequence": 541, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 9377, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 46, + "bytesOut": 7894, + "packetsIn": 130, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071883407370, + "eventId": "542", + "lastEpochMicrosec": 1477071893407370, + "priority": "Normal", + "sequence": 542, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5864, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 45, + "bytesOut": 7318, + "packetsIn": 88, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071913462011, + "eventId": "545", + "lastEpochMicrosec": 1477071923462011, + "priority": "Normal", + "sequence": 545, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 27350, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 164, + "bytesOut": 35804, + "packetsIn": 324, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072013669950, + "eventId": "555", + "lastEpochMicrosec": 1477072023669950, + "priority": "Normal", + "sequence": 555, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5981, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 4364, + "packetsIn": 86, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072304235475, + "eventId": "584", + "lastEpochMicrosec": 1477072314235475, + "priority": "Normal", + "sequence": 584, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 203574, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 23, + "bytesOut": 4122, + "packetsIn": 308, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072554718395, + "eventId": "609", + "lastEpochMicrosec": 1477072564718395, + "priority": "Normal", + "sequence": 609, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4142, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5495, + "packetsIn": 63, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072564737954, + "eventId": "610", + "lastEpochMicrosec": 1477072574737954, + "priority": "Normal", + "sequence": 610, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4172, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 23, + "bytesOut": 4066, + "packetsIn": 63, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072684959633, + "eventId": "622", + "lastEpochMicrosec": 1477072694959633, + "priority": "Normal", + "sequence": 622, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4682, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 36, + "bytesOut": 6100, + "packetsIn": 70, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072694977636, + "eventId": "623", + "lastEpochMicrosec": 1477072704977636, + "priority": "Normal", + "sequence": 623, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5024, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 35, + "bytesOut": 5999, + "packetsIn": 74, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072735051857, + "eventId": "627", + "lastEpochMicrosec": 1477072745051857, + "priority": "Normal", + "sequence": 627, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6750, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7198, + "packetsIn": 98, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072785141695, + "eventId": "632", + "lastEpochMicrosec": 1477072795141695, + "priority": "Normal", + "sequence": 632, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 38530, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 249, + "bytesOut": 54426, + "packetsIn": 436, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072795156085, + "eventId": "633", + "lastEpochMicrosec": 1477072805156085, + "priority": "Normal", + "sequence": 633, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4616, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 37, + "bytesOut": 6826, + "packetsIn": 69, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072885342781, + "eventId": "642", + "lastEpochMicrosec": 1477072895342781, + "priority": "Normal", + "sequence": 642, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4934, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5316, + "packetsIn": 67, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072895361934, + "eventId": "643", + "lastEpochMicrosec": 1477072905361934, + "priority": "Normal", + "sequence": 643, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4362, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 35, + "bytesOut": 6786, + "packetsIn": 64, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072935447654, + "eventId": "647", + "lastEpochMicrosec": 1477072945447654, + "priority": "Normal", + "sequence": 647, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4562, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 5136, + "packetsIn": 68, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073065678387, + "eventId": "660", + "lastEpochMicrosec": 1477073075678387, + "priority": "Normal", + "sequence": 660, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7173, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 45, + "bytesOut": 7368, + "packetsIn": 106, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073085719086, + "eventId": "662", + "lastEpochMicrosec": 1477073095719086, + "priority": "Normal", + "sequence": 662, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4826, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 44, + "bytesOut": 7120, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073185910566, + "eventId": "672", + "lastEpochMicrosec": 1477073195910566, + "priority": "Normal", + "sequence": 672, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4502, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 5304, + "packetsIn": 70, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073336185348, + "eventId": "687", + "lastEpochMicrosec": 1477073346185348, + "priority": "Normal", + "sequence": 687, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4448, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5558, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073346200536, + "eventId": "688", + "lastEpochMicrosec": 1477073356200536, + "priority": "Normal", + "sequence": 688, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7053, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 45, + "bytesOut": 7368, + "packetsIn": 105, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073446375491, + "eventId": "698", + "lastEpochMicrosec": 1477073456375491, + "priority": "Normal", + "sequence": 698, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3966, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5214, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073596641959, + "eventId": "713", + "lastEpochMicrosec": 1477073606641959, + "priority": "Normal", + "sequence": 713, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4318, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 4634, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070250365937, + "eventId": "379", + "lastEpochMicrosec": 1477070260365937, + "priority": "Normal", + "sequence": 379, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3746, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5536, + "packetsIn": 53, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070340529599, + "eventId": "388", + "lastEpochMicrosec": 1477070350529599, + "priority": "Normal", + "sequence": 388, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7322, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 48, + "bytesOut": 7616, + "packetsIn": 113, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070510835835, + "eventId": "405", + "lastEpochMicrosec": 1477070520835835, + "priority": "Normal", + "sequence": 405, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4442, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6469, + "packetsIn": 66, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070520864347, + "eventId": "406", + "lastEpochMicrosec": 1477070530864347, + "priority": "Normal", + "sequence": 406, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3638, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 22, + "bytesOut": 4044, + "packetsIn": 53, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070651095730, + "eventId": "419", + "lastEpochMicrosec": 1477070661095730, + "priority": "Normal", + "sequence": 419, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3416, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5090, + "packetsIn": 48, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070711206504, + "eventId": "425", + "lastEpochMicrosec": 1477070721206504, + "priority": "Normal", + "sequence": 425, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5908, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6213, + "packetsIn": 78, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070791351649, + "eventId": "433", + "lastEpochMicrosec": 1477070801351649, + "priority": "Normal", + "sequence": 433, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 10199, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 68, + "bytesOut": 11842, + "packetsIn": 135, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070801369956, + "eventId": "434", + "lastEpochMicrosec": 1477070811369956, + "priority": "Normal", + "sequence": 434, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 26090, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 164, + "bytesOut": 33153, + "packetsIn": 300, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070841450160, + "eventId": "438", + "lastEpochMicrosec": 1477070851450160, + "priority": "Normal", + "sequence": 438, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6205, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 34, + "bytesOut": 5794, + "packetsIn": 90, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070981705399, + "eventId": "452", + "lastEpochMicrosec": 1477070991705399, + "priority": "Normal", + "sequence": 452, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3980, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5410, + "packetsIn": 59, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071061865954, + "eventId": "460", + "lastEpochMicrosec": 1477071071865954, + "priority": "Normal", + "sequence": 460, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 31224, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 197, + "bytesOut": 34890, + "packetsIn": 357, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071121977934, + "eventId": "466", + "lastEpochMicrosec": 1477071131977934, + "priority": "Normal", + "sequence": 466, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 25732, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 162, + "bytesOut": 31700, + "packetsIn": 302, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071131999094, + "eventId": "467", + "lastEpochMicrosec": 1477071141999094, + "priority": "Normal", + "sequence": 467, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 169618, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7186, + "packetsIn": 289, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071212141392, + "eventId": "475", + "lastEpochMicrosec": 1477071222141392, + "priority": "Normal", + "sequence": 475, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7477, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 46, + "bytesOut": 7465, + "packetsIn": 110, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071222158382, + "eventId": "476", + "lastEpochMicrosec": 1477071232158382, + "priority": "Normal", + "sequence": 476, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5908, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7156, + "packetsIn": 83, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071272238317, + "eventId": "481", + "lastEpochMicrosec": 1477071282238317, + "priority": "Normal", + "sequence": 481, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4504, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5074, + "packetsIn": 61, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071332342318, + "eventId": "487", + "lastEpochMicrosec": 1477071342342318, + "priority": "Normal", + "sequence": 487, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6139, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 4836, + "packetsIn": 89, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071342361964, + "eventId": "488", + "lastEpochMicrosec": 1477071352361964, + "priority": "Normal", + "sequence": 488, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 22038, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 143, + "bytesOut": 25109, + "packetsIn": 257, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071392443903, + "eventId": "493", + "lastEpochMicrosec": 1477071402443903, + "priority": "Normal", + "sequence": 493, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 28990, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 185, + "bytesOut": 34734, + "packetsIn": 342, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071442534871, + "eventId": "498", + "lastEpochMicrosec": 1477071452534871, + "priority": "Normal", + "sequence": 498, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 19000, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 111, + "bytesOut": 18886, + "packetsIn": 232, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071723077968, + "eventId": "526", + "lastEpochMicrosec": 1477071733077968, + "priority": "Normal", + "sequence": 526, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 22554, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 150, + "bytesOut": 27120, + "packetsIn": 270, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071783210923, + "eventId": "532", + "lastEpochMicrosec": 1477071793210923, + "priority": "Normal", + "sequence": 532, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 31406, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 192, + "bytesOut": 40382, + "packetsIn": 369, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071973585969, + "eventId": "551", + "lastEpochMicrosec": 1477071983585969, + "priority": "Normal", + "sequence": 551, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 28415, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 168, + "bytesOut": 36888, + "packetsIn": 330, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072003648795, + "eventId": "554", + "lastEpochMicrosec": 1477072013648795, + "priority": "Normal", + "sequence": 554, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4736, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5027, + "packetsIn": 71, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072073789969, + "eventId": "561", + "lastEpochMicrosec": 1477072083789969, + "priority": "Normal", + "sequence": 561, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5332, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4082, + "packetsIn": 75, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072184014433, + "eventId": "572", + "lastEpochMicrosec": 1477072194014433, + "priority": "Normal", + "sequence": 572, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3752, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5666, + "packetsIn": 55, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072214069942, + "eventId": "575", + "lastEpochMicrosec": 1477072224069942, + "priority": "Normal", + "sequence": 575, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4046, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7120, + "packetsIn": 59, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072274176817, + "eventId": "581", + "lastEpochMicrosec": 1477072284176817, + "priority": "Normal", + "sequence": 581, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4208, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5166, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072444481666, + "eventId": "598", + "lastEpochMicrosec": 1477072454481666, + "priority": "Normal", + "sequence": 598, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6649, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6038, + "packetsIn": 97, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072484565977, + "eventId": "602", + "lastEpochMicrosec": 1477072494565977, + "priority": "Normal", + "sequence": 602, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3848, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 4822, + "packetsIn": 57, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072514639844, + "eventId": "605", + "lastEpochMicrosec": 1477072524639844, + "priority": "Normal", + "sequence": 605, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6367, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 4624, + "packetsIn": 93, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072544701945, + "eventId": "608", + "lastEpochMicrosec": 1477072554701945, + "priority": "Normal", + "sequence": 608, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6553, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5362, + "packetsIn": 98, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072604809380, + "eventId": "614", + "lastEpochMicrosec": 1477072614809380, + "priority": "Normal", + "sequence": 614, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4628, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5412, + "packetsIn": 68, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072614829190, + "eventId": "615", + "lastEpochMicrosec": 1477072624829190, + "priority": "Normal", + "sequence": 615, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4352, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5630, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072644885943, + "eventId": "618", + "lastEpochMicrosec": 1477072654885943, + "priority": "Normal", + "sequence": 618, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5036, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 47, + "bytesOut": 7514, + "packetsIn": 75, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072755088807, + "eventId": "629", + "lastEpochMicrosec": 1477072765088807, + "priority": "Normal", + "sequence": 629, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4370, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4351, + "packetsIn": 66, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072915408472, + "eventId": "645", + "lastEpochMicrosec": 1477072925408472, + "priority": "Normal", + "sequence": 645, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4304, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4254, + "packetsIn": 57, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072955481939, + "eventId": "649", + "lastEpochMicrosec": 1477072965481939, + "priority": "Normal", + "sequence": 649, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4388, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5150, + "packetsIn": 66, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073005573900, + "eventId": "654", + "lastEpochMicrosec": 1477073015573900, + "priority": "Normal", + "sequence": 654, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5906, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7148, + "packetsIn": 82, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073015590437, + "eventId": "655", + "lastEpochMicrosec": 1477073025590437, + "priority": "Normal", + "sequence": 655, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3764, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 23, + "bytesOut": 4122, + "packetsIn": 56, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073045647448, + "eventId": "658", + "lastEpochMicrosec": 1477073055647448, + "priority": "Normal", + "sequence": 658, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4706, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7220, + "packetsIn": 70, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073125796934, + "eventId": "666", + "lastEpochMicrosec": 1477073135796934, + "priority": "Normal", + "sequence": 666, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7132, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 43, + "bytesOut": 7250, + "packetsIn": 103, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073135815158, + "eventId": "667", + "lastEpochMicrosec": 1477073145815158, + "priority": "Normal", + "sequence": 667, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7143, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 50, + "bytesOut": 7727, + "packetsIn": 104, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073145841670, + "eventId": "668", + "lastEpochMicrosec": 1477073155841670, + "priority": "Normal", + "sequence": 668, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6135, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5426, + "packetsIn": 90, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073266054311, + "eventId": "680", + "lastEpochMicrosec": 1477073276054311, + "priority": "Normal", + "sequence": 680, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4052, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5498, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073466418004, + "eventId": "700", + "lastEpochMicrosec": 1477073476418004, + "priority": "Normal", + "sequence": 700, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3732, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 5244, + "packetsIn": 54, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073476437957, + "eventId": "701", + "lastEpochMicrosec": 1477073486437957, + "priority": "Normal", + "sequence": 701, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4688, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5222, + "packetsIn": 71, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073526524510, + "eventId": "706", + "lastEpochMicrosec": 1477073536524510, + "priority": "Normal", + "sequence": 706, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7963, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 49, + "bytesOut": 7608, + "packetsIn": 118, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073566594681, + "eventId": "710", + "lastEpochMicrosec": 1477073576594681, + "priority": "Normal", + "sequence": 710, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5168, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5214, + "packetsIn": 71, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073616685940, + "eventId": "715", + "lastEpochMicrosec": 1477073626685940, + "priority": "Normal", + "sequence": 715, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6483, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 34, + "bytesOut": 5586, + "packetsIn": 95, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073626701958, + "eventId": "716", + "lastEpochMicrosec": 1477073636701958, + "priority": "Normal", + "sequence": 716, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3660, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 4712, + "packetsIn": 53, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070230330088, + "eventId": "377", + "lastEpochMicrosec": 1477070240330088, + "priority": "Normal", + "sequence": 377, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4069, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5506, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070360563689, + "eventId": "390", + "lastEpochMicrosec": 1477070370563689, + "priority": "Normal", + "sequence": 390, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4280, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5418, + "packetsIn": 64, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070460736142, + "eventId": "400", + "lastEpochMicrosec": 1477070470736142, + "priority": "Normal", + "sequence": 400, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4562, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6892, + "packetsIn": 68, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070480772828, + "eventId": "402", + "lastEpochMicrosec": 1477070490772828, + "priority": "Normal", + "sequence": 402, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5129, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5396, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070500813728, + "eventId": "404", + "lastEpochMicrosec": 1477070510813728, + "priority": "Normal", + "sequence": 404, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4456, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5380, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070550916395, + "eventId": "409", + "lastEpochMicrosec": 1477070560916395, + "priority": "Normal", + "sequence": 409, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3738, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 4750, + "packetsIn": 54, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070590993953, + "eventId": "413", + "lastEpochMicrosec": 1477070600993953, + "priority": "Normal", + "sequence": 413, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5954, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5380, + "packetsIn": 94, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070631061957, + "eventId": "417", + "lastEpochMicrosec": 1477070641061957, + "priority": "Normal", + "sequence": 417, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4416, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 22, + "bytesOut": 4020, + "packetsIn": 64, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070641079999, + "eventId": "418", + "lastEpochMicrosec": 1477070651079999, + "priority": "Normal", + "sequence": 418, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4911, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 4342, + "packetsIn": 70, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070681153946, + "eventId": "422", + "lastEpochMicrosec": 1477070691153946, + "priority": "Normal", + "sequence": 422, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5228, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5294, + "packetsIn": 80, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070691170336, + "eventId": "423", + "lastEpochMicrosec": 1477070701170336, + "priority": "Normal", + "sequence": 423, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 137612, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 776, + "bytesOut": 136724, + "packetsIn": 1458, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070821405142, + "eventId": "436", + "lastEpochMicrosec": 1477070831405142, + "priority": "Normal", + "sequence": 436, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6724, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 48, + "bytesOut": 8288, + "packetsIn": 90, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071021788719, + "eventId": "456", + "lastEpochMicrosec": 1477071031788719, + "priority": "Normal", + "sequence": 456, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5216, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5098, + "packetsIn": 80, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071051846152, + "eventId": "459", + "lastEpochMicrosec": 1477071061846152, + "priority": "Normal", + "sequence": 459, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5965, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 34, + "bytesOut": 5686, + "packetsIn": 84, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071101941618, + "eventId": "464", + "lastEpochMicrosec": 1477071111941618, + "priority": "Normal", + "sequence": 464, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4334, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 5232, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071142014557, + "eventId": "468", + "lastEpochMicrosec": 1477071152014557, + "priority": "Normal", + "sequence": 468, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3976, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5360, + "packetsIn": 54, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071152034019, + "eventId": "469", + "lastEpochMicrosec": 1477071162034019, + "priority": "Normal", + "sequence": 469, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 41028, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5214, + "packetsIn": 121, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071202120024, + "eventId": "474", + "lastEpochMicrosec": 1477071212120024, + "priority": "Normal", + "sequence": 474, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5066, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7157, + "packetsIn": 76, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071242189163, + "eventId": "478", + "lastEpochMicrosec": 1477071252189163, + "priority": "Normal", + "sequence": 478, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5528, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5302, + "packetsIn": 83, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071472593939, + "eventId": "501", + "lastEpochMicrosec": 1477071482593939, + "priority": "Normal", + "sequence": 501, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4190, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 4160, + "packetsIn": 63, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071492634731, + "eventId": "503", + "lastEpochMicrosec": 1477071502634731, + "priority": "Normal", + "sequence": 503, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5918, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 34, + "bytesOut": 6588, + "packetsIn": 90, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071502654137, + "eventId": "504", + "lastEpochMicrosec": 1477071512654137, + "priority": "Normal", + "sequence": 504, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4270, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 19, + "bytesOut": 3650, + "packetsIn": 57, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071632900848, + "eventId": "517", + "lastEpochMicrosec": 1477071642900848, + "priority": "Normal", + "sequence": 517, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7250, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 47, + "bytesOut": 7539, + "packetsIn": 112, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071652936794, + "eventId": "519", + "lastEpochMicrosec": 1477071662936794, + "priority": "Normal", + "sequence": 519, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 20894, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 127, + "bytesOut": 23654, + "packetsIn": 256, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071713058031, + "eventId": "525", + "lastEpochMicrosec": 1477071723058031, + "priority": "Normal", + "sequence": 525, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7297, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 46, + "bytesOut": 7430, + "packetsIn": 107, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071763172262, + "eventId": "530", + "lastEpochMicrosec": 1477071773172262, + "priority": "Normal", + "sequence": 530, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5472, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5427, + "packetsIn": 83, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071773193658, + "eventId": "531", + "lastEpochMicrosec": 1477071783193658, + "priority": "Normal", + "sequence": 531, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4784, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4386, + "packetsIn": 73, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071803251128, + "eventId": "534", + "lastEpochMicrosec": 1477071813251128, + "priority": "Normal", + "sequence": 534, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 33146, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 202, + "bytesOut": 45220, + "packetsIn": 373, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071933509978, + "eventId": "547", + "lastEpochMicrosec": 1477071943509978, + "priority": "Normal", + "sequence": 547, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3640, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 22, + "bytesOut": 4128, + "packetsIn": 47, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072113869917, + "eventId": "565", + "lastEpochMicrosec": 1477072123869917, + "priority": "Normal", + "sequence": 565, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4928, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5412, + "packetsIn": 75, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072133905970, + "eventId": "567", + "lastEpochMicrosec": 1477072143905970, + "priority": "Normal", + "sequence": 567, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4286, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5436, + "packetsIn": 64, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072314253035, + "eventId": "585", + "lastEpochMicrosec": 1477072324253035, + "priority": "Normal", + "sequence": 585, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4568, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5602, + "packetsIn": 69, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072384378243, + "eventId": "592", + "lastEpochMicrosec": 1477072394378243, + "priority": "Normal", + "sequence": 592, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3854, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 4772, + "packetsIn": 57, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072404411223, + "eventId": "594", + "lastEpochMicrosec": 1477072414411223, + "priority": "Normal", + "sequence": 594, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3740, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 21, + "bytesOut": 3862, + "packetsIn": 50, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072414424973, + "eventId": "595", + "lastEpochMicrosec": 1477072424424973, + "priority": "Normal", + "sequence": 595, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6259, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5072, + "packetsIn": 89, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072424442934, + "eventId": "596", + "lastEpochMicrosec": 1477072434442934, + "priority": "Normal", + "sequence": 596, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5576, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 46, + "bytesOut": 7404, + "packetsIn": 84, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072624849269, + "eventId": "616", + "lastEpochMicrosec": 1477072634849269, + "priority": "Normal", + "sequence": 616, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5172, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 4998, + "packetsIn": 78, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072674941938, + "eventId": "621", + "lastEpochMicrosec": 1477072684941938, + "priority": "Normal", + "sequence": 621, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4256, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4294, + "packetsIn": 56, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072715018487, + "eventId": "625", + "lastEpochMicrosec": 1477072725018487, + "priority": "Normal", + "sequence": 625, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3932, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5526, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072825213947, + "eventId": "636", + "lastEpochMicrosec": 1477072835213947, + "priority": "Normal", + "sequence": 636, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3956, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 35, + "bytesOut": 6318, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072865310238, + "eventId": "640", + "lastEpochMicrosec": 1477072875310238, + "priority": "Normal", + "sequence": 640, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4080, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 4388, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072875328458, + "eventId": "641", + "lastEpochMicrosec": 1477072885328458, + "priority": "Normal", + "sequence": 641, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6081, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5528, + "packetsIn": 89, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072965498915, + "eventId": "650", + "lastEpochMicrosec": 1477072975498915, + "priority": "Normal", + "sequence": 650, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6141, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5528, + "packetsIn": 90, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073025609941, + "eventId": "656", + "lastEpochMicrosec": 1477073035609941, + "priority": "Normal", + "sequence": 656, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4446, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 39, + "bytesOut": 6986, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073175893195, + "eventId": "671", + "lastEpochMicrosec": 1477073185893195, + "priority": "Normal", + "sequence": 671, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4232, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 23, + "bytesOut": 4066, + "packetsIn": 64, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073225981156, + "eventId": "676", + "lastEpochMicrosec": 1477073235981156, + "priority": "Normal", + "sequence": 676, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5739, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4138, + "packetsIn": 84, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073326167021, + "eventId": "686", + "lastEpochMicrosec": 1477073336167021, + "priority": "Normal", + "sequence": 686, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4104, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 22, + "bytesOut": 4020, + "packetsIn": 61, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073356218618, + "eventId": "689", + "lastEpochMicrosec": 1477073366218618, + "priority": "Normal", + "sequence": 689, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4886, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7121, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073456394852, + "eventId": "699", + "lastEpochMicrosec": 1477073466394852, + "priority": "Normal", + "sequence": 699, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4034, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 4808, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073486456069, + "eventId": "702", + "lastEpochMicrosec": 1477073496456069, + "priority": "Normal", + "sequence": 702, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4706, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5765, + "packetsIn": 71, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073576611503, + "eventId": "711", + "lastEpochMicrosec": 1477073586611503, + "priority": "Normal", + "sequence": 711, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6046, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 40, + "bytesOut": 9108, + "packetsIn": 90, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073636730319, + "eventId": "717", + "lastEpochMicrosec": 1477073646730319, + "priority": "Normal", + "sequence": 717, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4450, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5230, + "packetsIn": 62, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070310474544, + "eventId": "385", + "lastEpochMicrosec": 1477070320474544, + "priority": "Normal", + "sequence": 385, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5703, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 40, + "bytesOut": 6658, + "packetsIn": 82, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070320490200, + "eventId": "386", + "lastEpochMicrosec": 1477070330490200, + "priority": "Normal", + "sequence": 386, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4384, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 5096, + "packetsIn": 59, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070370579195, + "eventId": "391", + "lastEpochMicrosec": 1477070380579195, + "priority": "Normal", + "sequence": 391, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3986, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5544, + "packetsIn": 59, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070400631290, + "eventId": "394", + "lastEpochMicrosec": 1477070410631290, + "priority": "Normal", + "sequence": 394, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4428, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 4364, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070410646466, + "eventId": "395", + "lastEpochMicrosec": 1477070420646466, + "priority": "Normal", + "sequence": 395, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3776, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 4562, + "packetsIn": 56, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070661113931, + "eventId": "420", + "lastEpochMicrosec": 1477070671113931, + "priority": "Normal", + "sequence": 420, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5482, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5446, + "packetsIn": 77, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070731245952, + "eventId": "427", + "lastEpochMicrosec": 1477070741245952, + "priority": "Normal", + "sequence": 427, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 12391, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 78, + "bytesOut": 10049, + "packetsIn": 124, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070761301949, + "eventId": "430", + "lastEpochMicrosec": 1477070771301949, + "priority": "Normal", + "sequence": 430, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 19997, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 132, + "bytesOut": 23502, + "packetsIn": 240, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070861482944, + "eventId": "440", + "lastEpochMicrosec": 1477070871482944, + "priority": "Normal", + "sequence": 440, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 19924, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 116, + "bytesOut": 19236, + "packetsIn": 243, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070871499185, + "eventId": "441", + "lastEpochMicrosec": 1477070881499185, + "priority": "Normal", + "sequence": 441, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4394, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 40, + "bytesOut": 7024, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070901553877, + "eventId": "444", + "lastEpochMicrosec": 1477070911553877, + "priority": "Normal", + "sequence": 444, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3402, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4950, + "packetsIn": 51, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070951649582, + "eventId": "449", + "lastEpochMicrosec": 1477070961649582, + "priority": "Normal", + "sequence": 449, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3650, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 5024, + "packetsIn": 52, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070961673097, + "eventId": "450", + "lastEpochMicrosec": 1477070971673097, + "priority": "Normal", + "sequence": 450, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4681, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 45, + "bytesOut": 7354, + "packetsIn": 69, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071001744811, + "eventId": "454", + "lastEpochMicrosec": 1477071011744811, + "priority": "Normal", + "sequence": 454, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4536, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5168, + "packetsIn": 67, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071011760312, + "eventId": "455", + "lastEpochMicrosec": 1477071021760312, + "priority": "Normal", + "sequence": 455, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6458, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 36, + "bytesOut": 6017, + "packetsIn": 100, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071232173922, + "eventId": "477", + "lastEpochMicrosec": 1477071242173922, + "priority": "Normal", + "sequence": 477, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6871, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 36, + "bytesOut": 6766, + "packetsIn": 101, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071282252737, + "eventId": "482", + "lastEpochMicrosec": 1477071292252737, + "priority": "Normal", + "sequence": 482, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3884, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4248, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071322325958, + "eventId": "486", + "lastEpochMicrosec": 1477071332325958, + "priority": "Normal", + "sequence": 486, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 34518, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 192, + "bytesOut": 34192, + "packetsIn": 384, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071432517955, + "eventId": "497", + "lastEpochMicrosec": 1477071442517955, + "priority": "Normal", + "sequence": 497, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4916, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4318, + "packetsIn": 67, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071512671652, + "eventId": "505", + "lastEpochMicrosec": 1477071522671652, + "priority": "Normal", + "sequence": 505, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6259, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5600, + "packetsIn": 91, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071522697277, + "eventId": "506", + "lastEpochMicrosec": 1477071532697277, + "priority": "Normal", + "sequence": 506, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5240, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5426, + "packetsIn": 80, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071552753988, + "eventId": "509", + "lastEpochMicrosec": 1477071562753988, + "priority": "Normal", + "sequence": 509, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5060, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5434, + "packetsIn": 79, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071612865423, + "eventId": "515", + "lastEpochMicrosec": 1477071622865423, + "priority": "Normal", + "sequence": 515, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3974, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 4660, + "packetsIn": 59, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071793233631, + "eventId": "533", + "lastEpochMicrosec": 1477071803233631, + "priority": "Normal", + "sequence": 533, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6859, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 43, + "bytesOut": 6912, + "packetsIn": 100, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071823290532, + "eventId": "536", + "lastEpochMicrosec": 1477071833290532, + "priority": "Normal", + "sequence": 536, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4982, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 5081, + "packetsIn": 76, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071833308226, + "eventId": "537", + "lastEpochMicrosec": 1477071843308226, + "priority": "Normal", + "sequence": 537, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4974, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4426, + "packetsIn": 75, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071843328660, + "eventId": "538", + "lastEpochMicrosec": 1477071853328660, + "priority": "Normal", + "sequence": 538, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 13226, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 89, + "bytesOut": 18924, + "packetsIn": 153, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072053741964, + "eventId": "559", + "lastEpochMicrosec": 1477072063741964, + "priority": "Normal", + "sequence": 559, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 8673, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 53, + "bytesOut": 9805, + "packetsIn": 117, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072063763247, + "eventId": "560", + "lastEpochMicrosec": 1477072073763247, + "priority": "Normal", + "sequence": 560, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4676, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 37, + "bytesOut": 6446, + "packetsIn": 70, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072224086825, + "eventId": "576", + "lastEpochMicrosec": 1477072234086825, + "priority": "Normal", + "sequence": 576, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4262, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5318, + "packetsIn": 64, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072254141660, + "eventId": "579", + "lastEpochMicrosec": 1477072264141660, + "priority": "Normal", + "sequence": 579, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4946, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7156, + "packetsIn": 74, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072344303482, + "eventId": "588", + "lastEpochMicrosec": 1477072354303482, + "priority": "Normal", + "sequence": 588, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3800, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5398, + "packetsIn": 56, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072584773904, + "eventId": "612", + "lastEpochMicrosec": 1477072594773904, + "priority": "Normal", + "sequence": 612, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5264, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 35, + "bytesOut": 6018, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072594792760, + "eventId": "613", + "lastEpochMicrosec": 1477072604792760, + "priority": "Normal", + "sequence": 613, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4604, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5722, + "packetsIn": 59, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072775124558, + "eventId": "631", + "lastEpochMicrosec": 1477072785124558, + "priority": "Normal", + "sequence": 631, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4280, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5410, + "packetsIn": 64, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072975517941, + "eventId": "651", + "lastEpochMicrosec": 1477072985517941, + "priority": "Normal", + "sequence": 651, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4316, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5018, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073035627391, + "eventId": "657", + "lastEpochMicrosec": 1477073045627391, + "priority": "Normal", + "sequence": 657, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4915, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 4836, + "packetsIn": 74, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073276077930, + "eventId": "681", + "lastEpochMicrosec": 1477073286077930, + "priority": "Normal", + "sequence": 681, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4244, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4914, + "packetsIn": 64, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073396285928, + "eventId": "693", + "lastEpochMicrosec": 1477073406285928, + "priority": "Normal", + "sequence": 693, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4982, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6892, + "packetsIn": 75, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073406303927, + "eventId": "694", + "lastEpochMicrosec": 1477073416303927, + "priority": "Normal", + "sequence": 694, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5000, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5378, + "packetsIn": 68, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073496473912, + "eventId": "703", + "lastEpochMicrosec": 1477073506473912, + "priority": "Normal", + "sequence": 703, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4406, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7156, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073546558533, + "eventId": "708", + "lastEpochMicrosec": 1477073556558533, + "priority": "Normal", + "sequence": 708, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3608, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5230, + "packetsIn": 53, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073646749551, + "eventId": "718", + "lastEpochMicrosec": 1477073656749551, + "priority": "Normal", + "sequence": 718, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4352, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 4946, + "packetsIn": 57, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073676813943, + "eventId": "721", + "lastEpochMicrosec": 1477073686813943, + "priority": "Normal", + "sequence": 721, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4864, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 5148, + "packetsIn": 67, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070190253108, + "eventId": "373", + "lastEpochMicrosec": 1477070200253108, + "priority": "Normal", + "sequence": 373, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4328, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5286, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070280421939, + "eventId": "382", + "lastEpochMicrosec": 1477070290421939, + "priority": "Normal", + "sequence": 382, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6206, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5512, + "packetsIn": 96, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070330509980, + "eventId": "387", + "lastEpochMicrosec": 1477070340509980, + "priority": "Normal", + "sequence": 387, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3518, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 22, + "bytesOut": 4028, + "packetsIn": 53, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070420665950, + "eventId": "396", + "lastEpochMicrosec": 1477070430665950, + "priority": "Normal", + "sequence": 396, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4360, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4812, + "packetsIn": 59, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070430683794, + "eventId": "397", + "lastEpochMicrosec": 1477070440683794, + "priority": "Normal", + "sequence": 397, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5301, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5536, + "packetsIn": 76, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070560936376, + "eventId": "410", + "lastEpochMicrosec": 1477070570936376, + "priority": "Normal", + "sequence": 410, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6866, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7156, + "packetsIn": 106, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070570954302, + "eventId": "411", + "lastEpochMicrosec": 1477070580954302, + "priority": "Normal", + "sequence": 411, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6681, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 41, + "bytesOut": 6568, + "packetsIn": 96, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070741264005, + "eventId": "428", + "lastEpochMicrosec": 1477070751264005, + "priority": "Normal", + "sequence": 428, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 34880, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 217, + "bytesOut": 36350, + "packetsIn": 398, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070881514499, + "eventId": "442", + "lastEpochMicrosec": 1477070891514499, + "priority": "Normal", + "sequence": 442, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4762, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 4934, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070911574857, + "eventId": "445", + "lastEpochMicrosec": 1477070921574857, + "priority": "Normal", + "sequence": 445, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7057, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 46, + "bytesOut": 7462, + "packetsIn": 105, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070921593735, + "eventId": "446", + "lastEpochMicrosec": 1477070931593735, + "priority": "Normal", + "sequence": 446, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6740, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 41, + "bytesOut": 6775, + "packetsIn": 104, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071292270837, + "eventId": "483", + "lastEpochMicrosec": 1477071302270837, + "priority": "Normal", + "sequence": 483, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4934, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5325, + "packetsIn": 75, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071302289972, + "eventId": "484", + "lastEpochMicrosec": 1477071312289972, + "priority": "Normal", + "sequence": 484, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6216, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 39, + "bytesOut": 6786, + "packetsIn": 81, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071452551360, + "eventId": "499", + "lastEpochMicrosec": 1477071462551360, + "priority": "Normal", + "sequence": 499, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6218, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 44, + "bytesOut": 7316, + "packetsIn": 95, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071482617903, + "eventId": "502", + "lastEpochMicrosec": 1477071492617903, + "priority": "Normal", + "sequence": 502, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5634, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 37, + "bytesOut": 6446, + "packetsIn": 87, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071562771042, + "eventId": "510", + "lastEpochMicrosec": 1477071572771042, + "priority": "Normal", + "sequence": 510, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6354, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 47, + "bytesOut": 7514, + "packetsIn": 96, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071622883746, + "eventId": "516", + "lastEpochMicrosec": 1477071632883746, + "priority": "Normal", + "sequence": 516, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 20684, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 138, + "bytesOut": 23872, + "packetsIn": 242, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071753155902, + "eventId": "529", + "lastEpochMicrosec": 1477071763155902, + "priority": "Normal", + "sequence": 529, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4442, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6956, + "packetsIn": 66, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071853349474, + "eventId": "539", + "lastEpochMicrosec": 1477071863349474, + "priority": "Normal", + "sequence": 539, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 66655, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 401, + "bytesOut": 64534, + "packetsIn": 755, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071943529023, + "eventId": "548", + "lastEpochMicrosec": 1477071953529023, + "priority": "Normal", + "sequence": 548, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 29098, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 186, + "bytesOut": 40028, + "packetsIn": 338, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072033705953, + "eventId": "557", + "lastEpochMicrosec": 1477072043705953, + "priority": "Normal", + "sequence": 557, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3560, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 4758, + "packetsIn": 52, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072083807753, + "eventId": "562", + "lastEpochMicrosec": 1477072093807753, + "priority": "Normal", + "sequence": 562, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5753, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5248, + "packetsIn": 82, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072123885526, + "eventId": "566", + "lastEpochMicrosec": 1477072133885526, + "priority": "Normal", + "sequence": 566, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4102, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5462, + "packetsIn": 54, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072173997938, + "eventId": "571", + "lastEpochMicrosec": 1477072183997938, + "priority": "Normal", + "sequence": 571, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5054, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 39, + "bytesOut": 6906, + "packetsIn": 76, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072264158607, + "eventId": "580", + "lastEpochMicrosec": 1477072274158607, + "priority": "Normal", + "sequence": 580, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3884, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 23, + "bytesOut": 4058, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072324268097, + "eventId": "586", + "lastEpochMicrosec": 1477072334268097, + "priority": "Normal", + "sequence": 586, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3182, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 4808, + "packetsIn": 46, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072334288872, + "eventId": "587", + "lastEpochMicrosec": 1477072344288872, + "priority": "Normal", + "sequence": 587, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4034, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5316, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072394394368, + "eventId": "593", + "lastEpochMicrosec": 1477072404394368, + "priority": "Normal", + "sequence": 593, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3872, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 23, + "bytesOut": 4074, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072434461951, + "eventId": "597", + "lastEpochMicrosec": 1477072444461951, + "priority": "Normal", + "sequence": 597, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4028, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5214, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072504621951, + "eventId": "604", + "lastEpochMicrosec": 1477072514621951, + "priority": "Normal", + "sequence": 604, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4130, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4350, + "packetsIn": 62, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072524657943, + "eventId": "606", + "lastEpochMicrosec": 1477072534657943, + "priority": "Normal", + "sequence": 606, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6691, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 35, + "bytesOut": 5804, + "packetsIn": 98, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072664921950, + "eventId": "620", + "lastEpochMicrosec": 1477072674921950, + "priority": "Normal", + "sequence": 620, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4640, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5426, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072765105949, + "eventId": "630", + "lastEpochMicrosec": 1477072775105949, + "priority": "Normal", + "sequence": 630, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 38076, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 238, + "bytesOut": 52028, + "packetsIn": 425, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072815193944, + "eventId": "635", + "lastEpochMicrosec": 1477072825193944, + "priority": "Normal", + "sequence": 635, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4806, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 39, + "bytesOut": 6986, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073055662629, + "eventId": "659", + "lastEpochMicrosec": 1477073065662629, + "priority": "Normal", + "sequence": 659, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3470, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4240, + "packetsIn": 51, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073165876528, + "eventId": "670", + "lastEpochMicrosec": 1477073175876528, + "priority": "Normal", + "sequence": 670, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6615, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5086, + "packetsIn": 98, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073205948758, + "eventId": "674", + "lastEpochMicrosec": 1477073215948758, + "priority": "Normal", + "sequence": 674, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4682, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 5600, + "packetsIn": 71, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073215965142, + "eventId": "675", + "lastEpochMicrosec": 1477073225965142, + "priority": "Normal", + "sequence": 675, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4178, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4152, + "packetsIn": 55, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073256037943, + "eventId": "679", + "lastEpochMicrosec": 1477073266037943, + "priority": "Normal", + "sequence": 679, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4406, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7156, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073306133613, + "eventId": "684", + "lastEpochMicrosec": 1477073316133613, + "priority": "Normal", + "sequence": 684, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3974, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 4644, + "packetsIn": 51, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073316150514, + "eventId": "685", + "lastEpochMicrosec": 1477073326150514, + "priority": "Normal", + "sequence": 685, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6375, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 4538, + "packetsIn": 94, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073386268859, + "eventId": "692", + "lastEpochMicrosec": 1477073396268859, + "priority": "Normal", + "sequence": 692, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4458, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5418, + "packetsIn": 66, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073536542160, + "eventId": "707", + "lastEpochMicrosec": 1477073546542160, + "priority": "Normal", + "sequence": 707, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + } +] diff --git a/dcae-analytics-model/src/test/resources/data/json/cef/event_listener.json b/dcae-analytics-model/src/test/resources/data/json/cef/event_listener.json new file mode 100644 index 0000000..252c3bd --- /dev/null +++ b/dcae-analytics-model/src/test/resources/data/json/cef/event_listener.json @@ -0,0 +1,42 @@ +{ + "hp.tag": "hp.collectorStream.20161014.0000000004", + "event": { + "measurementsForVfScaling": { + "memoryConfigured": 1, + "requestRate": 1, + "measurementInterval": 10, + "meanRequestLatency": 1, + "concurrentSessions": 1, + "measurementFieldsVersion": 1, + "vNicUsageArray": [ + { + "multicastPacketsIn": 1, + "bytesIn": 597, + "unicastPacketsIn": 9, + "multicastPacketsOut": 1, + "broadcastPacketsOut": 1, + "bytesOut": 0, + "broadcastPacketsIn": 1, + "vNicIdentifier": "GigabitEthernet0/4/0", + "unicastPacketsOut": 0 + } + ], + "memoryUsed": 1, + "configuredEntities": 1 + }, + "commonEventHeader": { + "reportingEntityName": "Dummy VM name - No Metadata available", + "startEpochMicrosec": 1476456641231767, + "lastEpochMicrosec": 1476456641231767, + "eventId": "1", + "priority": "Normal", + "sourceName": "Dummy VM name - No Metadata available", + "sequence": 1, + "functionalRole": "vFirewall", + "domain": "measurementsForVfScaling", + "reportingEntityId": "Dummy VM UUID - No Metadata available", + "version": 1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } +} diff --git a/dcae-analytics-model/src/test/resources/data/json/config/invalidJsonConfig.json b/dcae-analytics-model/src/test/resources/data/json/config/invalidJsonConfig.json new file mode 100644 index 0000000..b706da0 --- /dev/null +++ b/dcae-analytics-model/src/test/resources/data/json/config/invalidJsonConfig.json @@ -0,0 +1,6 @@ +{ + "config": { + "appName": "TestAppName", + "appDescription": "Test App Description", + } +} diff --git a/dcae-analytics-model/src/test/resources/data/json/config/testAppConfig.json b/dcae-analytics-model/src/test/resources/data/json/config/testAppConfig.json new file mode 100644 index 0000000..cdad420 --- /dev/null +++ b/dcae-analytics-model/src/test/resources/data/json/config/testAppConfig.json @@ -0,0 +1,6 @@ +{ + "config": { + "appName": "TestAppName", + "appDescription": "Test App Description" + } +} diff --git a/dcae-analytics-model/src/test/resources/data/json/facade/tca_ves_cef_response.json b/dcae-analytics-model/src/test/resources/data/json/facade/tca_ves_cef_response.json new file mode 100644 index 0000000..98135ec --- /dev/null +++ b/dcae-analytics-model/src/test/resources/data/json/facade/tca_ves_cef_response.json @@ -0,0 +1,18 @@ +{ + "closedLoopControlName": "CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8", + "version": "1.0.2", + "requestID": "0138afac-b032-4e4b-bd30-88260f444888", + "closedLoopAlarmStart": 1478189220547, + "closedLoopEventClient": "tca.instance00001", + "target_type": "VNF", + "target": "generic-vnf.vnf-id", + "AAI": { + "generic-vnf.vnf-id" : "vpp-test(?)", + "vserver.vserver-name": "dfw1lb01lb01" + }, + "from": "DCAE", + "policyScope": "resource=vFirewall;type=configuration", + "policyName": "configuration.dcae.microservice.tca.xml", + "policyVersion": "v0.0.1", + "closedLoopEventStatus": "ONSET" +} diff --git a/dcae-analytics-model/src/test/resources/data/json/policy/tca_policy.json b/dcae-analytics-model/src/test/resources/data/json/policy/tca_policy.json new file mode 100644 index 0000000..28b738a --- /dev/null +++ b/dcae-analytics-model/src/test/resources/data/json/policy/tca_policy.json @@ -0,0 +1,53 @@ +{ + "domain": "measurementsForVfScaling", + "metricsPerFunctionalRole": [ + { + "functionalRole": "vFirewall", + "policyScope": "resource=vFirewall;type=configuration", + "policyName": "configuration.dcae.microservice.tca.xml", + "policyVersion": "v0.0.1", + "thresholds": [ + { + "closedLoopControlName": "CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8", + "version": "1.0.2", + "fieldPath": "events.measurementsForVfScaling.vNicUsageArray.bytesIn", + "thresholdValue": 4000, + "direction": "LESS_OR_EQUAL", + "severity": "MAJOR" + }, + { + "closedLoopControlName": "CL-FRWL-HIGH-TRAFFIC-SIG-EA36FE84-9342-5E13-A656-EC5F21309A09", + "version": "1.0.2", + "fieldPath": "events.measurementsForVfScaling.vNicUsageArray.bytesIn", + "thresholdValue": 20000, + "direction": "GREATER_OR_EQUAL", + "severity": "CRITICAL" + } + ] + }, + { + "functionalRole": "vLoadBalancer", + "policyScope": "resource=vLoadBalancer;type=configuration", + "policyName": "configuration.dcae.microservice.tca.xml", + "policyVersion": "v0.0.1", + "thresholds": [ + { + "closedLoopControlName": "CL-LBAL-LOW-TRAFFIC-SIG-FB480F95-A453-6F24-B767-FD703241AB1A", + "version": "1.0.2", + "fieldPath": "events.measurementsForVfScaling.vNicUsageArray.packetsIn", + "thresholdValue": 500, + "direction": "LESS_OR_EQUAL", + "severity": "MAJOR" + }, + { + "closedLoopControlName": "CL-LBAL-LOW-TRAFFIC-SIG-0C5920A6-B564-8035-C878-0E814352BC2B", + "version": "1.0.2", + "fieldPath": "events.measurementsForVfScaling.vNicUsageArray.packetsIn", + "thresholdValue": 5000, + "direction": "GREATER_OR_EQUAL", + "severity": "CRITICAL" + } + ] + } + ] +} diff --git a/dcae-analytics-model/src/test/resources/data/testApp.properties b/dcae-analytics-model/src/test/resources/data/testApp.properties new file mode 100644 index 0000000..41b67a0 --- /dev/null +++ b/dcae-analytics-model/src/test/resources/data/testApp.properties @@ -0,0 +1,22 @@ +# +# ============LICENSE_START========================================================= +# dcae-analytics +# ================================================================================ +# Copyright © 2017 AT&T Intellectual Property. All rights reserved. +# ================================================================================ +# Licensed 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. +# ============LICENSE_END========================================================= +# + +testProp1="testPropValue1" +testProp2="testPropValue2" diff --git a/dcae-analytics-model/src/test/resources/logback-test.xml b/dcae-analytics-model/src/test/resources/logback-test.xml new file mode 100644 index 0000000..e1cb987 --- /dev/null +++ b/dcae-analytics-model/src/test/resources/logback-test.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ ============LICENSE_START========================================================= + ~ dcae-analytics + ~ ================================================================================ + ~ Copyright © 2017 AT&T Intellectual Property. All rights reserved. + ~ ================================================================================ + ~ Licensed 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. + ~ ============LICENSE_END========================================================= + --> +<configuration debug="false"> + + <!-- + Disabling some chatty loggers. + --> + <logger name="org.apache.commons.beanutils" level="ERROR"/> + <logger name="org.apache.zookeeper.server" level="ERROR"/> + <logger name="org.apache.zookeeper" level="ERROR"/> + <logger name="com.ning" level="WARN"/> + <logger name="org.apache.spark" level="WARN"/> + <logger name="org.spark-project" level="WARN"/> + <logger name="org.apache.hadoop" level="WARN"/> + <logger name="org.apache.hive" level="WARN"/> + <logger name="org.quartz.core" level="WARN"/> + <logger name="org.eclipse.jetty" level="WARN"/> + <logger name="io.netty.util.internal" level="WARN"/> + + <logger name="org.apache.twill" level="WARN"/> + <logger name="co.cask.cdap" level="INFO"/> + <logger name="org.openecomp" level="DEBUG"/> + + <appender name="Console" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <pattern>%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n</pattern> + </encoder> + </appender> + + <root level="ERROR"> + <appender-ref ref="Console"/> + </root> + + +</configuration> + diff --git a/dcae-analytics-tca/pom.xml b/dcae-analytics-tca/pom.xml new file mode 100644 index 0000000..27475a1 --- /dev/null +++ b/dcae-analytics-tca/pom.xml @@ -0,0 +1,127 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ ============LICENSE_START========================================================= + ~ dcae-analytics + ~ ================================================================================ + ~ Copyright © 2017 AT&T Intellectual Property. All rights reserved. + ~ ================================================================================ + ~ Licensed 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. + ~ ================================================================================ + ~ ECOMP and OpenECOMP are trademarks and service marks of AT&T Intellectual Property. + ~ ============LICENSE_END========================================================= + --> + +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.openecomp.dcae.analytics</groupId> + <artifactId>dcae-analytics</artifactId> + <version>1.0-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + + <artifactId>dcae-analytics-tca</artifactId> + <packaging>jar</packaging> + + <!-- THIS MODULE CONTAINS CODE FOR TCA (THRESHOLD CROSSING ALERT) --> + <name>DCAE Analytics TCA</name> + <description>DCAE Analytics TCA (THRESHOLD CROSSING ALERT)</description> + + <properties> + <main.basedir>${project.parent.basedir}</main.basedir> + <app.main.class>org.openecomp.dcae.analytics.tca.TCAAnalyticsApplication</app.main.class> + </properties> + + <dependencies> + + <!-- DCAE DEPENDENCIES --> + <dependency> + <groupId>org.openecomp.dcae.analytics</groupId> + <artifactId>dcae-analytics-common</artifactId> + <version>1.0-SNAPSHOT</version> + </dependency> + + <dependency> + <groupId>org.openecomp.dcae.analytics</groupId> + <artifactId>dcae-analytics-dmaap</artifactId> + <version>1.0-SNAPSHOT</version> + </dependency> + + <!-- CASK --> + <dependency> + <groupId>co.cask.http</groupId> + <artifactId>netty-http</artifactId> + </dependency> + <dependency> + <groupId>co.cask.common</groupId> + <artifactId>common-http</artifactId> + </dependency> + + <!-- HADOOP --> + <dependency> + <groupId>org.apache.hadoop</groupId> + <artifactId>hadoop-mapreduce-client-core</artifactId> + </dependency> + <dependency> + <groupId>org.apache.hadoop</groupId> + <artifactId>hadoop-common</artifactId> + </dependency> + + <!-- SCHEDULER --> + <dependency> + <groupId>org.quartz-scheduler</groupId> + <artifactId>quartz</artifactId> + </dependency> + + <!-- UTILITIES --> + <dependency> + <groupId>com.google.code.findbugs</groupId> + <artifactId>jsr305</artifactId> + </dependency> + <dependency> + <groupId>com.google.code.findbugs</groupId> + <artifactId>annotations</artifactId> + </dependency> + + <!-- TEST DEPENDENCIES --> + <dependency> + <groupId>org.openecomp.dcae.analytics</groupId> + <artifactId>dcae-analytics-test</artifactId> + <version>1.0-SNAPSHOT</version> + <scope>test</scope> + </dependency> + + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <configuration> + <archive> + <manifest> + <mainClass>${app.main.class}</mainClass> + </manifest> + </archive> + </configuration> + </plugin> + </plugins> + </build> + + +</project> diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/TCAAnalyticsApplication.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/TCAAnalyticsApplication.java new file mode 100644 index 0000000..655ddca --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/TCAAnalyticsApplication.java @@ -0,0 +1,105 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca; + +import co.cask.cdap.api.app.AbstractApplication; +import co.cask.cdap.api.data.stream.Stream; +import co.cask.cdap.api.dataset.DatasetProperties; +import co.cask.cdap.api.dataset.lib.ObjectMappedTable; +import org.openecomp.dcae.analytics.common.utils.ValidationUtils; +import org.openecomp.dcae.analytics.tca.flow.TCAVESCollectorFlow; +import org.openecomp.dcae.analytics.tca.persistance.TCAMessageStatusPersister; +import org.openecomp.dcae.analytics.tca.persistance.TCAVESAlertsPersister; +import org.openecomp.dcae.analytics.tca.settings.TCAAppConfig; +import org.openecomp.dcae.analytics.tca.validator.TCAAppConfigValidator; +import org.openecomp.dcae.analytics.tca.worker.TCADMaaPMockSubscriberWorker; +import org.openecomp.dcae.analytics.tca.worker.TCADMaaPPublisherWorker; +import org.openecomp.dcae.analytics.tca.worker.TCADMaaPSubscriberWorker; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import static org.openecomp.dcae.analytics.common.CDAPComponentsConstants.TCA_FIXED_SUBSCRIBER_OUTPUT_DESCRIPTION_STREAM; + +/** + * @author Rajiv Singla. Creation Date: 10/21/2016. + */ +public class TCAAnalyticsApplication extends AbstractApplication<TCAAppConfig> { + + private static final Logger LOG = LoggerFactory.getLogger(TCAAnalyticsApplication.class); + + @Override + public void configure() { + + + // ========= Application configuration Setup ============== // + final TCAAppConfig tcaAppConfig = getConfig(); + + LOG.info("Configuring TCA Application with startup application configuration: {}", tcaAppConfig); + + // Validate application configuration + ValidationUtils.validateSettings(tcaAppConfig, new TCAAppConfigValidator()); + + // App Setup + setName(tcaAppConfig.getAppName()); + setDescription(tcaAppConfig.getAppDescription()); + + // ========== Streams Setup ============== // + // Create DMaaP MR Subscriber CDAP output stream + final String tcaSubscriberOutputStreamName = tcaAppConfig.getTcaSubscriberOutputStreamName(); + LOG.info("Creating TCA VES Output Stream: {}", tcaSubscriberOutputStreamName); + final Stream subscriberOutputStream = + new Stream(tcaSubscriberOutputStreamName, TCA_FIXED_SUBSCRIBER_OUTPUT_DESCRIPTION_STREAM); + addStream(subscriberOutputStream); + + + // ============ Datasets Setup ======== // + // Create TCA Message Status Table + final String tcaVESMessageStatusTableName = tcaAppConfig.getTcaVESMessageStatusTableName(); + final Integer messageStatusTableTTLSeconds = tcaAppConfig.getTcaVESMessageStatusTableTTLSeconds(); + LOG.info("Creating TCA Message Status Table: {} with TTL: {}", + tcaVESMessageStatusTableName, messageStatusTableTTLSeconds); + final DatasetProperties messageStatusTableProperties = + TCAMessageStatusPersister.getDatasetProperties(messageStatusTableTTLSeconds); + createDataset(tcaVESMessageStatusTableName, ObjectMappedTable.class, messageStatusTableProperties); + + // Create TCA VES Alerts Table + final String tcaVESAlertsTableName = tcaAppConfig.getTcaVESAlertsTableName(); + final Integer alertsTableTTLSeconds = tcaAppConfig.getTcaVESAlertsTableTTLSeconds(); + LOG.info("Creating TCA Alerts Table: {} with TTL: {}", + tcaVESAlertsTableName, alertsTableTTLSeconds); + final DatasetProperties alertTableProperties = + TCAVESAlertsPersister.getDatasetProperties(alertsTableTTLSeconds); + createDataset(tcaVESAlertsTableName, ObjectMappedTable.class, alertTableProperties); + + // =========== Flow Setup ============= // + addFlow(new TCAVESCollectorFlow(tcaAppConfig)); + + // ========== Workers Setup =========== // + LOG.info("Creating TCA DMaaP Subscriber Worker"); + addWorker(new TCADMaaPSubscriberWorker(tcaAppConfig.getTcaSubscriberOutputStreamName())); + LOG.info("Creating TCA DMaaP Publisher Worker"); + addWorker(new TCADMaaPPublisherWorker(tcaAppConfig.getTcaVESAlertsTableName())); + // TODO: Remove this before going to production + addWorker(new TCADMaaPMockSubscriberWorker(tcaAppConfig.getTcaSubscriberOutputStreamName())); + } + + +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/flow/TCAVESCollectorFlow.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/flow/TCAVESCollectorFlow.java new file mode 100644 index 0000000..33db3c1 --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/flow/TCAVESCollectorFlow.java @@ -0,0 +1,69 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.flow; + +import co.cask.cdap.api.flow.AbstractFlow; +import org.openecomp.dcae.analytics.common.CDAPComponentsConstants; +import org.openecomp.dcae.analytics.tca.flowlet.TCAVESAlertsSinkFlowlet; +import org.openecomp.dcae.analytics.tca.flowlet.TCAVESMessageRouterFlowlet; +import org.openecomp.dcae.analytics.tca.flowlet.TCAVESThresholdViolationCalculatorFlowlet; +import org.openecomp.dcae.analytics.tca.settings.TCAAppConfig; + +/** + * TCA Flow for VES (Virtual Event Streaming) Collector Flow + * + * @author Rajiv Singla. Creation Date: 11/3/2016. + */ +public class TCAVESCollectorFlow extends AbstractFlow { + + private final TCAAppConfig tcaAppConfig; + + public TCAVESCollectorFlow(TCAAppConfig tcaAppConfig) { + this.tcaAppConfig = tcaAppConfig; + } + + @Override + protected void configure() { + + setName(CDAPComponentsConstants.TCA_FIXED_VES_COLLECTOR_NAME_FLOW); + setDescription(CDAPComponentsConstants.TCA_FIXED_VES_COLLECTOR_DESCRIPTION_FLOW); + + final TCAVESMessageRouterFlowlet messageRouterFlowlet = new TCAVESMessageRouterFlowlet(); + addFlowlet(messageRouterFlowlet); + + final TCAVESThresholdViolationCalculatorFlowlet thresholdViolationCalculatorFlowlet = + new TCAVESThresholdViolationCalculatorFlowlet(tcaAppConfig.getTcaVESMessageStatusTableName()); + addFlowlet(thresholdViolationCalculatorFlowlet, tcaAppConfig.getThresholdCalculatorFlowletInstances()); + + final TCAVESAlertsSinkFlowlet alertsSinkFlowlet = + new TCAVESAlertsSinkFlowlet(tcaAppConfig.getTcaVESAlertsTableName()); + addFlowlet(alertsSinkFlowlet); + + + // connect DMaaP MR VES Subscriber output stream to VES Message Router Flowlet + connectStream(tcaAppConfig.getTcaSubscriberOutputStreamName(), messageRouterFlowlet); + // connect message router to VES threshold calculator + connect(messageRouterFlowlet, thresholdViolationCalculatorFlowlet); + // connect VES threshold calculator flowlet to Alerts Sink Flowlet + connect(thresholdViolationCalculatorFlowlet, alertsSinkFlowlet); + + } +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/flowlet/TCAVESAlertsSinkFlowlet.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/flowlet/TCAVESAlertsSinkFlowlet.java new file mode 100644 index 0000000..597fcd0 --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/flowlet/TCAVESAlertsSinkFlowlet.java @@ -0,0 +1,69 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.flowlet; + +import co.cask.cdap.api.annotation.ProcessInput; +import co.cask.cdap.api.annotation.Property; +import co.cask.cdap.api.dataset.lib.ObjectMappedTable; +import co.cask.cdap.api.flow.flowlet.AbstractFlowlet; +import co.cask.cdap.api.flow.flowlet.FlowletContext; +import org.openecomp.dcae.analytics.tca.persistance.TCAVESAlertEntity; +import org.openecomp.dcae.analytics.tca.persistance.TCAVESAlertsPersister; + +import static org.openecomp.dcae.analytics.common.CDAPComponentsConstants.TCA_FIXED_VES_ALERTS_SINK_DESCRIPTION_FLOWLET; +import static org.openecomp.dcae.analytics.common.CDAPComponentsConstants.TCA_FIXED_VES_ALERTS_SINK_NAME_FLOWLET; +import static org.openecomp.dcae.analytics.common.CDAPComponentsConstants.TCA_FIXED_VES_TCA_CALCULATOR_NAME_OUTPUT; + +/** + * Saves TCA VES Alert Messages in a Time series Table + * + * @author Rajiv Singla. Creation Date: 11/15/2016. + */ +public class TCAVESAlertsSinkFlowlet extends AbstractFlowlet { + + @Property + private final String tcaVESAlertsTableName; + + private ObjectMappedTable<TCAVESAlertEntity> tcaVESAlertsTable; + + public TCAVESAlertsSinkFlowlet(String tcaVESAlertsTableName) { + this.tcaVESAlertsTableName = tcaVESAlertsTableName; + } + + @Override + public void configure() { + setName(TCA_FIXED_VES_ALERTS_SINK_NAME_FLOWLET); + setDescription(TCA_FIXED_VES_ALERTS_SINK_DESCRIPTION_FLOWLET); + } + + @Override + public void initialize(FlowletContext flowletContext) throws Exception { + super.initialize(flowletContext); + tcaVESAlertsTable = getContext().getDataset(tcaVESAlertsTableName); + } + + @ProcessInput(TCA_FIXED_VES_TCA_CALCULATOR_NAME_OUTPUT) + public void saveAlerts(String alertMessage) { + // Saves alert message in alerts table + TCAVESAlertsPersister.persist(alertMessage, tcaVESAlertsTable); + } + +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/flowlet/TCAVESMessageRouterFlowlet.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/flowlet/TCAVESMessageRouterFlowlet.java new file mode 100644 index 0000000..7ecd917 --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/flowlet/TCAVESMessageRouterFlowlet.java @@ -0,0 +1,62 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.flowlet; + +import co.cask.cdap.api.annotation.Output; +import co.cask.cdap.api.annotation.ProcessInput; +import co.cask.cdap.api.flow.flowlet.AbstractFlowlet; +import co.cask.cdap.api.flow.flowlet.OutputEmitter; +import co.cask.cdap.api.flow.flowlet.StreamEvent; +import com.google.common.base.Charsets; + +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.TCA_VES_MESSAGE_ROUTER_PARTITION_KEY; +import static org.openecomp.dcae.analytics.common.CDAPComponentsConstants.TCA_FIXED_VES_MESSAGE_ROUTER_DESCRIPTION_FLOWLET; +import static org.openecomp.dcae.analytics.common.CDAPComponentsConstants.TCA_FIXED_VES_MESSAGE_ROUTER_NAME_FLOWLET; +import static org.openecomp.dcae.analytics.common.CDAPComponentsConstants.TCA_FIXED_VES_MESSAGE_ROUTER_OUTPUT; + + +/** + * TCA Message Router Flowlet emits VES Message to {@link TCAVESThresholdViolationCalculatorFlowlet} instances + * + * @author Rajiv Singla. Creation Date: 11/14/2016. + */ +public class TCAVESMessageRouterFlowlet extends AbstractFlowlet { + + /** + * Emits ves message to TCA Calculator Instances + */ + @Output(TCA_FIXED_VES_MESSAGE_ROUTER_OUTPUT) + private OutputEmitter<String> vesMessageEmitter; + + + @Override + public void configure() { + setName(TCA_FIXED_VES_MESSAGE_ROUTER_NAME_FLOWLET); + setDescription(TCA_FIXED_VES_MESSAGE_ROUTER_DESCRIPTION_FLOWLET); + } + + @ProcessInput + public void routeVESMessage(StreamEvent vesMessageStreamEvent) { + final String vesMessage = Charsets.UTF_8.decode(vesMessageStreamEvent.getBody()).toString(); + vesMessageEmitter.emit(vesMessage, TCA_VES_MESSAGE_ROUTER_PARTITION_KEY, vesMessage + .hashCode()); + } +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/flowlet/TCAVESThresholdViolationCalculatorFlowlet.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/flowlet/TCAVESThresholdViolationCalculatorFlowlet.java new file mode 100644 index 0000000..d5ab109 --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/flowlet/TCAVESThresholdViolationCalculatorFlowlet.java @@ -0,0 +1,137 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.flowlet; + +import co.cask.cdap.api.annotation.Output; +import co.cask.cdap.api.annotation.ProcessInput; +import co.cask.cdap.api.annotation.Property; +import co.cask.cdap.api.annotation.RoundRobin; +import co.cask.cdap.api.dataset.lib.ObjectMappedTable; +import co.cask.cdap.api.flow.flowlet.AbstractFlowlet; +import co.cask.cdap.api.flow.flowlet.FlowletContext; +import co.cask.cdap.api.flow.flowlet.OutputEmitter; +import co.cask.cdap.api.metrics.Metrics; +import com.fasterxml.jackson.core.JsonProcessingException; +import org.openecomp.dcae.analytics.common.CDAPComponentsConstants; +import org.openecomp.dcae.analytics.common.CDAPMetricsConstants; +import org.openecomp.dcae.analytics.model.domain.policy.tca.TCAPolicy; +import org.openecomp.dcae.analytics.model.facade.tca.TCAVESResponse; +import org.openecomp.dcae.analytics.tca.persistance.TCACalculatorMessageType; +import org.openecomp.dcae.analytics.tca.persistance.TCAMessageStatusEntity; +import org.openecomp.dcae.analytics.tca.persistance.TCAMessageStatusPersister; +import org.openecomp.dcae.analytics.tca.processor.TCACEFProcessorContext; +import org.openecomp.dcae.analytics.tca.utils.TCAUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import static org.openecomp.dcae.analytics.common.CDAPComponentsConstants.TCA_FIXED_VES_THRESHOLD_VIOLATION_CALCULATOR_DESCRIPTION_FLOWLET; +import static org.openecomp.dcae.analytics.common.CDAPComponentsConstants.TCA_FIXED_VES_THRESHOLD_VIOLATION_CALCULATOR_NAME_FLOWLET; + +/** + * TCA VES Message Filter filters out messages which are not applicable for TCA as per TCA Policy + * + * @author Rajiv Singla. Creation Date: 11/3/2016. + */ +public class TCAVESThresholdViolationCalculatorFlowlet extends AbstractFlowlet { + + private static final Logger LOG = LoggerFactory.getLogger(TCAVESThresholdViolationCalculatorFlowlet.class); + + @Output(CDAPComponentsConstants.TCA_FIXED_VES_TCA_CALCULATOR_NAME_OUTPUT) + private OutputEmitter<String> tcaAlertOutputEmitter; + + @Property + private final String messageStatusTableName; + + private TCAPolicy tcaPolicy; + private Metrics metrics; + private ObjectMappedTable<TCAMessageStatusEntity> vesMessageStatusTable; + + public TCAVESThresholdViolationCalculatorFlowlet(String messageStatusTableName) { + this.messageStatusTableName = messageStatusTableName; + } + + @Override + public void configure() { + setName(TCA_FIXED_VES_THRESHOLD_VIOLATION_CALCULATOR_NAME_FLOWLET); + setDescription(TCA_FIXED_VES_THRESHOLD_VIOLATION_CALCULATOR_DESCRIPTION_FLOWLET); + } + + + @Override + public void initialize(FlowletContext flowletContext) throws Exception { + super.initialize(flowletContext); + + // parse Runtime Arguments to tca policy preferences + tcaPolicy = TCAUtils.getValidatedTCAPolicyPreferences(flowletContext); + + vesMessageStatusTable = getContext().getDataset(messageStatusTableName); + + } + + @ProcessInput(CDAPComponentsConstants.TCA_FIXED_VES_MESSAGE_ROUTER_OUTPUT) + @RoundRobin + public void filterVESMessages(String vesMessage) throws JsonProcessingException { + + TCACalculatorMessageType calculatorMessageType = TCACalculatorMessageType.INAPPLICABLE; + String alertMessage = null; + + // Step 1: Filter incoming messages + final TCACEFProcessorContext processorContext = TCAUtils.filterCEFMessage(vesMessage, tcaPolicy); + + if (processorContext.canProcessingContinue()) { + + // Step 2: Check if CEF Message violate any thresholds + final TCACEFProcessorContext processorContextWithViolations = + TCAUtils.computeThresholdViolations(processorContext); + + if (processorContextWithViolations.canProcessingContinue()) { + + // Step 3: Create Alert Message + final String tcaAppName = getContext().getApplicationSpecification().getName(); + final TCAVESResponse newTCAVESResponse = + TCAUtils.createNewTCAVESResponse(processorContextWithViolations, tcaAppName); + alertMessage = TCAUtils.writeValueAsString(newTCAVESResponse); + calculatorMessageType = TCACalculatorMessageType.NON_COMPLIANT; + LOG.debug("VES Threshold Violation Detected. An alert message is be generated. {}", alertMessage); + + metrics.count(CDAPMetricsConstants.TCA_VES_NON_COMPLIANT_MESSAGES_METRIC, 1); + + // Step 4: Emit message to Alert Sink Flowlet + tcaAlertOutputEmitter.emit(alertMessage); + + } else { + + calculatorMessageType = TCACalculatorMessageType.COMPLIANT; + metrics.count(CDAPMetricsConstants.TCA_VES_COMPLIANT_MESSAGES_METRIC, 1); + } + + } else { + + metrics.count(CDAPMetricsConstants.TCA_VES_INAPPLICABLE_MESSAGES_METRIC, 1); + } + + // save message to message status table + TCAMessageStatusPersister.persist( + processorContext, getContext(), calculatorMessageType, vesMessageStatusTable, alertMessage); + } + + +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/persistance/TCACalculatorMessageType.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/persistance/TCACalculatorMessageType.java new file mode 100644 index 0000000..acef458 --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/persistance/TCACalculatorMessageType.java @@ -0,0 +1,43 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.persistance; + +/** + * TCA Calculator applies TCA Policy to incoming VES messages and classifies them as per this enum + * + * @author Rajiv Singla. Creation Date: 11/15/2016. + */ +public enum TCACalculatorMessageType { + + /** + * VES messages that are not applicable as per TCA Policy + */ + INAPPLICABLE, + /** + * VES messages that are applicable as per TCA Policy but don't violate any thresholds + */ + COMPLIANT, + /** + * VES messages that are applicable as per TCA Policy and also in violation of TCA Policy thresholds + */ + NON_COMPLIANT; + +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/persistance/TCAMessageStatusEntity.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/persistance/TCAMessageStatusEntity.java new file mode 100644 index 0000000..35aeac4 --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/persistance/TCAMessageStatusEntity.java @@ -0,0 +1,306 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.persistance; + +import org.apache.hadoop.io.Writable; +import org.apache.hadoop.io.WritableUtils; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.io.Serializable; + +/** + * TCA Message Status is an Entity which is used to persist TCA VES Message status information in Message Status Table + * + * @author Rajiv Singla. Creation Date: 11/16/2016. + */ +public class TCAMessageStatusEntity implements Writable, Serializable { + + private static final long serialVersionUID = -6186607668704516962L; + + private long creationTS; + private int flowletInstance; + private String messageType; + private String vesMessage; + private String domain; + private String functionalRole; + private String thresholdPath; + private String thresholdSeverity; + private String thresholdDirection; + private Long thresholdValue; + private String jsonProcessorStatus; + private String jsonProcessorMessage; + private String domainFilterStatus; + private String domainFilterMessage; + private String functionalRoleFilterStatus; + private String functionalRoleFilterMessage; + private String thresholdCalculatorStatus; + private String thresholdCalculatorMessage; + private String alertMessage; + + public TCAMessageStatusEntity() { + } + + public TCAMessageStatusEntity(long creationTS, int flowletInstance, String messageType, String vesMessage, String + domain, String functionalRole) { + this(creationTS, flowletInstance, messageType, vesMessage, domain, functionalRole, null, null, null, null, + null, null, null, null, null, null, null, null, null); + } + + public TCAMessageStatusEntity(long creationTS, int flowletInstance, String messageType, String vesMessage, + String domain, String functionalRole, + String thresholdPath, String thresholdSeverity, String thresholdDirection, + Long thresholdValue, + String jsonProcessorStatus, String jsonProcessorMessage, + String domainFilterStatus, String domainFilterMessage, + String functionalRoleFilterStatus, String functionalRoleFilterMessage, + String thresholdCalculatorStatus, String thresholdCalculatorMessage, + String alertMessage) { + this.creationTS = creationTS; + this.flowletInstance = flowletInstance; + this.messageType = messageType; + this.vesMessage = vesMessage; + this.domain = domain; + this.functionalRole = functionalRole; + this.thresholdPath = thresholdPath; + this.thresholdSeverity = thresholdSeverity; + this.thresholdDirection = thresholdDirection; + this.thresholdValue = thresholdValue; + this.jsonProcessorStatus = jsonProcessorStatus; + this.jsonProcessorMessage = jsonProcessorMessage; + this.domainFilterStatus = domainFilterStatus; + this.domainFilterMessage = domainFilterMessage; + this.functionalRoleFilterStatus = functionalRoleFilterStatus; + this.functionalRoleFilterMessage = functionalRoleFilterMessage; + this.thresholdCalculatorStatus = thresholdCalculatorStatus; + this.thresholdCalculatorMessage = thresholdCalculatorMessage; + this.alertMessage = alertMessage; + } + + public long getCreationTS() { + return creationTS; + } + + public void setCreationTS(long creationTS) { + this.creationTS = creationTS; + } + + public int getFlowletInstance() { + return flowletInstance; + } + + public void setFlowletInstance(int flowletInstance) { + this.flowletInstance = flowletInstance; + } + + public String getMessageType() { + return messageType; + } + + public void setMessageType(String messageType) { + this.messageType = messageType; + } + + public String getVesMessage() { + return vesMessage; + } + + public void setVesMessage(String vesMessage) { + this.vesMessage = vesMessage; + } + + public String getDomain() { + return domain; + } + + public void setDomain(String domain) { + this.domain = domain; + } + + public String getFunctionalRole() { + return functionalRole; + } + + public void setFunctionalRole(String functionalRole) { + this.functionalRole = functionalRole; + } + + public String getThresholdPath() { + return thresholdPath; + } + + public void setThresholdPath(String thresholdPath) { + this.thresholdPath = thresholdPath; + } + + public String getThresholdSeverity() { + return thresholdSeverity; + } + + public void setThresholdSeverity(String thresholdSeverity) { + this.thresholdSeverity = thresholdSeverity; + } + + public String getThresholdDirection() { + return thresholdDirection; + } + + public void setThresholdDirection(String thresholdDirection) { + this.thresholdDirection = thresholdDirection; + } + + public Long getThresholdValue() { + return thresholdValue; + } + + public void setThresholdValue(Long thresholdValue) { + this.thresholdValue = thresholdValue; + } + + public String getJsonProcessorStatus() { + return jsonProcessorStatus; + } + + public void setJsonProcessorStatus(String jsonProcessorStatus) { + this.jsonProcessorStatus = jsonProcessorStatus; + } + + public String getJsonProcessorMessage() { + return jsonProcessorMessage; + } + + public void setJsonProcessorMessage(String jsonProcessorMessage) { + this.jsonProcessorMessage = jsonProcessorMessage; + } + + public String getDomainFilterStatus() { + return domainFilterStatus; + } + + public void setDomainFilterStatus(String domainFilterStatus) { + this.domainFilterStatus = domainFilterStatus; + } + + public String getDomainFilterMessage() { + return domainFilterMessage; + } + + public void setDomainFilterMessage(String domainFilterMessage) { + this.domainFilterMessage = domainFilterMessage; + } + + public String getFunctionalRoleFilterStatus() { + return functionalRoleFilterStatus; + } + + public void setFunctionalRoleFilterStatus(String functionalRoleFilterStatus) { + this.functionalRoleFilterStatus = functionalRoleFilterStatus; + } + + public String getFunctionalRoleFilterMessage() { + return functionalRoleFilterMessage; + } + + public void setFunctionalRoleFilterMessage(String functionalRoleFilterMessage) { + this.functionalRoleFilterMessage = functionalRoleFilterMessage; + } + + public String getThresholdCalculatorStatus() { + return thresholdCalculatorStatus; + } + + public void setThresholdCalculatorStatus(String thresholdCalculatorStatus) { + this.thresholdCalculatorStatus = thresholdCalculatorStatus; + } + + public String getThresholdCalculatorMessage() { + return thresholdCalculatorMessage; + } + + public void setThresholdCalculatorMessage(String thresholdCalculatorMessage) { + this.thresholdCalculatorMessage = thresholdCalculatorMessage; + } + + public String getAlertMessage() { + return alertMessage; + } + + public void setAlertMessage(String alertMessage) { + this.alertMessage = alertMessage; + } + + @Override + public void write(DataOutput dataOutput) throws IOException { + WritableUtils.writeVLong(dataOutput, creationTS); + WritableUtils.writeVInt(dataOutput, flowletInstance); + WritableUtils.writeString(dataOutput, messageType); + WritableUtils.writeString(dataOutput, vesMessage); + + WritableUtils.writeString(dataOutput, domain); + WritableUtils.writeString(dataOutput, functionalRole); + + WritableUtils.writeString(dataOutput, thresholdPath); + WritableUtils.writeString(dataOutput, thresholdSeverity); + WritableUtils.writeString(dataOutput, thresholdDirection); + WritableUtils.writeVLong(dataOutput, thresholdValue); + + WritableUtils.writeString(dataOutput, jsonProcessorStatus); + WritableUtils.writeString(dataOutput, jsonProcessorMessage); + WritableUtils.writeString(dataOutput, domainFilterStatus); + WritableUtils.writeString(dataOutput, domainFilterMessage); + WritableUtils.writeString(dataOutput, functionalRoleFilterStatus); + WritableUtils.writeString(dataOutput, functionalRoleFilterMessage); + WritableUtils.writeString(dataOutput, thresholdCalculatorStatus); + WritableUtils.writeString(dataOutput, thresholdCalculatorMessage); + + WritableUtils.writeString(dataOutput, alertMessage); + + } + + @Override + public void readFields(DataInput dataInput) throws IOException { + creationTS = WritableUtils.readVLong(dataInput); + flowletInstance = WritableUtils.readVInt(dataInput); + messageType = WritableUtils.readString(dataInput); + vesMessage = WritableUtils.readString(dataInput); + + domain = WritableUtils.readString(dataInput); + functionalRole = WritableUtils.readString(dataInput); + + thresholdPath = WritableUtils.readString(dataInput); + thresholdSeverity = WritableUtils.readString(dataInput); + thresholdDirection = WritableUtils.readString(dataInput); + thresholdValue = WritableUtils.readVLong(dataInput); + + jsonProcessorStatus = WritableUtils.readString(dataInput); + jsonProcessorMessage = WritableUtils.readString(dataInput); + domainFilterStatus = WritableUtils.readString(dataInput); + domainFilterMessage = WritableUtils.readString(dataInput); + functionalRoleFilterStatus = WritableUtils.readString(dataInput); + functionalRoleFilterMessage = WritableUtils.readString(dataInput); + thresholdCalculatorStatus = WritableUtils.readString(dataInput); + thresholdCalculatorMessage = WritableUtils.readString(dataInput); + + alertMessage = WritableUtils.readString(dataInput); + + } +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/persistance/TCAMessageStatusPersister.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/persistance/TCAMessageStatusPersister.java new file mode 100644 index 0000000..edd33dd --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/persistance/TCAMessageStatusPersister.java @@ -0,0 +1,243 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.persistance; + +import co.cask.cdap.api.data.schema.Schema; +import co.cask.cdap.api.data.schema.UnsupportedTypeException; +import co.cask.cdap.api.dataset.DatasetProperties; +import co.cask.cdap.api.dataset.lib.IndexedTable; +import co.cask.cdap.api.dataset.lib.ObjectMappedTable; +import co.cask.cdap.api.dataset.lib.ObjectMappedTableProperties; +import co.cask.cdap.api.flow.flowlet.FlowletContext; +import com.google.common.base.Joiner; +import org.apache.commons.lang3.StringEscapeUtils; +import org.apache.commons.lang3.tuple.Pair; +import org.openecomp.dcae.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.openecomp.dcae.analytics.common.service.processor.MessageProcessor; +import org.openecomp.dcae.analytics.common.service.processor.ProcessorContext; +import org.openecomp.dcae.analytics.common.utils.PersistenceUtils; +import org.openecomp.dcae.analytics.model.domain.policy.tca.MetricsPerFunctionalRole; +import org.openecomp.dcae.analytics.model.domain.policy.tca.Threshold; +import org.openecomp.dcae.analytics.tca.processor.TCACEFJsonProcessor; +import org.openecomp.dcae.analytics.tca.processor.TCACEFPolicyDomainFilter; +import org.openecomp.dcae.analytics.tca.processor.TCACEFPolicyFunctionalRoleFilter; +import org.openecomp.dcae.analytics.tca.processor.TCACEFPolicyThresholdsProcessor; +import org.openecomp.dcae.analytics.tca.processor.TCACEFProcessorContext; +import org.openecomp.dcae.analytics.tca.utils.TCAUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Date; +import java.util.LinkedList; +import java.util.List; + +import javax.annotation.Nullable; + +import static org.openecomp.dcae.analytics.common.CDAPComponentsConstants.TCA_FIXED_VES_MESSAGE_STATUS_DESCRIPTION_TABLE; +import static org.openecomp.dcae.analytics.common.utils.PersistenceUtils.TABLE_ROW_KEY_COLUMN_NAME; + +/** + * + * + * @author Rajiv Singla. Creation Date: 11/15/2016. + */ +public abstract class TCAMessageStatusPersister { + + private static final Logger LOG = LoggerFactory.getLogger(TCAMessageStatusPersister.class); + + /** + * Saves Message Status in Table. Assumes no alert was generated + * + * @param processorContext processor Context + * @param flowletContext Flowlet Context + * @param calculatorMessageType Calculation Message Type + * @param messageStatusTable Message Status Table + */ + public static void persist(final TCACEFProcessorContext processorContext, + final FlowletContext flowletContext, + final TCACalculatorMessageType calculatorMessageType, + final ObjectMappedTable<TCAMessageStatusEntity> messageStatusTable) { + persist(processorContext, flowletContext, calculatorMessageType, messageStatusTable, null); + } + + /** + * Saves Message Status in Table. Sets up alert message aslo + * + * @param processorContext processor Context + * @param flowletContext Flowlet Context + * @param calculatorMessageType Calculation Message Type + * @param messageStatusTable Message Status Table + * @param alertMessage Alert message + */ + public static void persist(final TCACEFProcessorContext processorContext, + final FlowletContext flowletContext, + final TCACalculatorMessageType calculatorMessageType, + final ObjectMappedTable<TCAMessageStatusEntity> messageStatusTable, + @Nullable final String alertMessage) { + + final String rowKey = createKey(calculatorMessageType); + + final Long currentTS = new Date().getTime(); + final int flowletInstanceId = flowletContext.getInstanceId(); + final String vesMessage = StringEscapeUtils.unescapeJson(processorContext.getMessage()); + + // Find Functional Role and domain + final Pair<String, String> domainAndFunctionalRole = TCAUtils.getDomainAndFunctionalRole(processorContext); + final String domain = domainAndFunctionalRole.getLeft(); + final String functionalRole = domainAndFunctionalRole.getRight(); + + final TCAMessageStatusEntity tcaMessageStatusEntity = new TCAMessageStatusEntity(currentTS, + flowletInstanceId, calculatorMessageType.name(), vesMessage, domain, functionalRole); + + // add threshold violation fields + addViolatedThreshold(tcaMessageStatusEntity, processorContext); + // add processor status and messages + addMessageProcessorMessages(tcaMessageStatusEntity, processorContext); + // add Alert message + tcaMessageStatusEntity.setAlertMessage( + alertMessage == null ? null : StringEscapeUtils.unescapeJson(alertMessage) + ); + + messageStatusTable.write(rowKey, tcaMessageStatusEntity); + + + LOG.debug("Finished persisting VES Status Message with rowKey: {} in Message Status Table.", rowKey); + + } + + + /** + * Create TCA VES Message Status Table Properties + * + * @param timeToLiveSeconds Message Status Table time to live in seconds + * + * @return Message Status table properties + */ + public static DatasetProperties getDatasetProperties(final int timeToLiveSeconds) { + + try { + return ObjectMappedTableProperties.builder() + .setType(TCAMessageStatusEntity.class) + .setRowKeyExploreName(TABLE_ROW_KEY_COLUMN_NAME) + .setRowKeyExploreType(Schema.Type.STRING) + .add(IndexedTable.PROPERTY_TTL, timeToLiveSeconds) + .setDescription(TCA_FIXED_VES_MESSAGE_STATUS_DESCRIPTION_TABLE) + .build(); + } catch (UnsupportedTypeException e) { + final String errorMessage = "Unable to convert TCAMessageStatusEntity class to Schema"; + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, new IllegalArgumentException(errorMessage)); + } + + } + + + /** + * Adds Violated Threshold Parameter values to {@link TCAMessageStatusEntity} + * + * @param tcaMessageStatusEntity message entity that needs to be populated with threshold fields + * @param processorContext processor context + * + * @return entity with populated threshold field values if present + */ + private static TCAMessageStatusEntity addViolatedThreshold(final TCAMessageStatusEntity tcaMessageStatusEntity, + final TCACEFProcessorContext processorContext) { + + final MetricsPerFunctionalRole metricsPerFunctionalRole = processorContext.getMetricsPerFunctionalRole(); + + if (metricsPerFunctionalRole != null + && metricsPerFunctionalRole.getThresholds() != null + && metricsPerFunctionalRole.getThresholds().get(0) != null) { + + final Threshold threshold = metricsPerFunctionalRole.getThresholds().get(0); + tcaMessageStatusEntity.setThresholdPath(threshold.getFieldPath()); + tcaMessageStatusEntity.setThresholdSeverity(threshold.getSeverity().name()); + tcaMessageStatusEntity.setThresholdDirection(threshold.getDirection().name()); + tcaMessageStatusEntity.setThresholdValue(threshold.getThresholdValue()); + } + + return tcaMessageStatusEntity; + } + + + /** + * Add TCA CEF Message Processor status information + * + * @param tcaMessageStatusEntity message entity that needs to be populated with message processor fields + * @param processorContext processor context + * + * @return entity with populated message process status information + */ + private static TCAMessageStatusEntity addMessageProcessorMessages( + final TCAMessageStatusEntity tcaMessageStatusEntity, final TCACEFProcessorContext processorContext) { + final List<? super MessageProcessor<? extends ProcessorContext>> messageProcessors = processorContext + .getMessageProcessors(); + + if (messageProcessors != null && !messageProcessors.isEmpty()) { + for (Object messageProcessor : messageProcessors) { + final MessageProcessor<TCACEFProcessorContext> tcaMessageProcessor = + (MessageProcessor<TCACEFProcessorContext>) messageProcessor; + + final String processingState = tcaMessageProcessor.getProcessingState().name(); + final String processingMessage = tcaMessageProcessor.getProcessingMessage().orNull(); + + if (messageProcessor.getClass().equals(TCACEFJsonProcessor.class)) { + tcaMessageStatusEntity.setJsonProcessorStatus(processingState); + tcaMessageStatusEntity.setJsonProcessorMessage(processingMessage); + } + + if (messageProcessor.getClass().equals(TCACEFPolicyDomainFilter.class)) { + tcaMessageStatusEntity.setDomainFilterStatus(processingState); + tcaMessageStatusEntity.setDomainFilterMessage(processingMessage); + } + + if (messageProcessor.getClass().equals(TCACEFPolicyFunctionalRoleFilter.class)) { + tcaMessageStatusEntity.setFunctionalRoleFilterStatus(processingState); + tcaMessageStatusEntity.setFunctionalRoleFilterMessage(processingMessage); + } + + if (messageProcessor.getClass().equals(TCACEFPolicyThresholdsProcessor.class)) { + tcaMessageStatusEntity.setThresholdCalculatorStatus(processingState); + tcaMessageStatusEntity.setThresholdCalculatorMessage(processingMessage); + } + + } + } + return tcaMessageStatusEntity; + } + + /** + * Creates Row Key for TCA VES Message Status table + * + * Row Key = (Message Type + Decreasing Value) + * + * @param calculatorMessageType calculator message type + * + * @return row key string + */ + private static String createKey(final TCACalculatorMessageType calculatorMessageType) { + + final List<String> keyList = new LinkedList<>(); + keyList.add(calculatorMessageType.name()); + keyList.add(PersistenceUtils.getCurrentTimeReverseSubKey()); + return Joiner.on(PersistenceUtils.ROW_KEY_DELIMITER).join(keyList); + } + +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/persistance/TCAVESAlertEntity.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/persistance/TCAVESAlertEntity.java new file mode 100644 index 0000000..ff3906c --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/persistance/TCAVESAlertEntity.java @@ -0,0 +1,77 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.persistance; + +import org.apache.hadoop.io.Writable; +import org.apache.hadoop.io.WritableUtils; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.io.Serializable; + +/** + * + * @author Rajiv Singla. Creation Date: 11/16/2016. + */ +public class TCAVESAlertEntity implements Writable, Serializable { + + private static final long serialVersionUID = -8587229518063660258L; + + private long creationTS; + private String alertMessage; + + public TCAVESAlertEntity() { + } + + public TCAVESAlertEntity(long creationTS, String alertMessage) { + this.creationTS = creationTS; + this.alertMessage = alertMessage; + } + + public long getCreationTS() { + return creationTS; + } + + public void setCreationTS(long creationTS) { + this.creationTS = creationTS; + } + + public String getAlertMessage() { + return alertMessage; + } + + public void setAlertMessage(String alertMessage) { + this.alertMessage = alertMessage; + } + + @Override + public void write(DataOutput dataOutput) throws IOException { + WritableUtils.writeVLong(dataOutput, creationTS); + WritableUtils.writeString(dataOutput, alertMessage); + } + + @Override + public void readFields(DataInput dataInput) throws IOException { + creationTS = WritableUtils.readVLong(dataInput); + alertMessage = WritableUtils.readString(dataInput); + } +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/persistance/TCAVESAlertsPersister.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/persistance/TCAVESAlertsPersister.java new file mode 100644 index 0000000..bf94cde --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/persistance/TCAVESAlertsPersister.java @@ -0,0 +1,98 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.persistance; + +import co.cask.cdap.api.data.schema.Schema; +import co.cask.cdap.api.data.schema.UnsupportedTypeException; +import co.cask.cdap.api.dataset.DatasetProperties; +import co.cask.cdap.api.dataset.lib.IndexedTable; +import co.cask.cdap.api.dataset.lib.ObjectMappedTable; +import co.cask.cdap.api.dataset.lib.ObjectMappedTableProperties; +import org.apache.commons.lang3.StringEscapeUtils; +import org.openecomp.dcae.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Date; + +import static org.openecomp.dcae.analytics.common.CDAPComponentsConstants.TCA_DEFAULT_VES_ALERTS_DESCRIPTION_TABLE; +import static org.openecomp.dcae.analytics.common.utils.PersistenceUtils.TABLE_ROW_KEY_COLUMN_NAME; + +/** + * + * @author Rajiv Singla. Creation Date: 11/16/2016. + */ +public abstract class TCAVESAlertsPersister { + + private static final Logger LOG = LoggerFactory.getLogger(TCAVESAlertsPersister.class); + + /** + * Persists Alert Message to Alerts Table + * + * @param alertMessage alert Message + * @param tcaVESAlertTable alert Table Name + */ + public static void persist(final String alertMessage, final ObjectMappedTable<TCAVESAlertEntity> tcaVESAlertTable) { + final Date currentDate = new Date(); + final TCAVESAlertEntity alertEntity = new TCAVESAlertEntity(currentDate.getTime(), + StringEscapeUtils.unescapeJson(alertMessage)); + // row key is same as current timestamp + final String rowKey = createRowKey(currentDate); + tcaVESAlertTable.write(rowKey, alertEntity); + + LOG.debug("Finished persisting VES Alert message ID: {} in VES Alerts table.", rowKey); + } + + + /** + * Creates {@link DatasetProperties} for Alerts Table + * + * @param timeToLiveSeconds alerts table Time to Live + * @return Alerts table properties + */ + public static DatasetProperties getDatasetProperties(final int timeToLiveSeconds) { + try { + return ObjectMappedTableProperties.builder() + .setType(TCAVESAlertEntity.class) + .setRowKeyExploreName(TABLE_ROW_KEY_COLUMN_NAME) + .setRowKeyExploreType(Schema.Type.STRING) + .add(IndexedTable.PROPERTY_TTL, timeToLiveSeconds) + .setDescription(TCA_DEFAULT_VES_ALERTS_DESCRIPTION_TABLE) + .build(); + } catch (UnsupportedTypeException e) { + final String errorMessage = "Unable to convert TCAVESAlertEntity class to Schema"; + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, new IllegalArgumentException(errorMessage)); + } + + } + + /** + * Creates Row Key for Alerts Table + * + * @param date current Date + * + * @return row key + */ + public static String createRowKey(final Date date) { + return String.format("%025d", date.getTime()); + } + +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/processor/AbstractTCAECEFPolicyProcessor.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/processor/AbstractTCAECEFPolicyProcessor.java new file mode 100644 index 0000000..56ea38f --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/processor/AbstractTCAECEFPolicyProcessor.java @@ -0,0 +1,61 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.processor; + +import org.openecomp.dcae.analytics.common.exception.MessageProcessingException; +import org.openecomp.dcae.analytics.common.service.processor.AbstractMessageProcessor; +import org.openecomp.dcae.analytics.model.domain.cef.EventListener; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.Nonnull; + +/** + * <p> + * Encapsulates common functionality for all TCA CEF Policy Processors + * </p> + * + * @author Rajiv Singla. Creation Date: 11/9/2016. + */ +public abstract class AbstractTCAECEFPolicyProcessor extends AbstractMessageProcessor<TCACEFProcessorContext> { + + private static final Logger LOG = LoggerFactory.getLogger(AbstractTCAECEFPolicyProcessor.class); + + /** + * For all TCA Policy Processor the pre processor ensures that {@link EventListener} object is + * present + * + * @param processorContext incoming Processor Context + * @return Pre processed Processor Context + */ + @Override + public TCACEFProcessorContext preProcessor(@Nonnull TCACEFProcessorContext processorContext) { + // validates CEF Event Listener is Present + final EventListener cefEventListener = processorContext.getCEFEventListener(); + if (cefEventListener == null) { + final String errorMessage = String.format( + "CEF Event Listener is not Present.Invalid use of Processor: %s. CEF Message: %s", + getProcessorInfo().getProcessorName(), processorContext.getMessage()); + throw new MessageProcessingException(errorMessage, LOG, new IllegalArgumentException(errorMessage)); + } + return super.preProcessor(processorContext); + } +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/processor/TCACEFJsonProcessor.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/processor/TCACEFJsonProcessor.java new file mode 100644 index 0000000..ab33fe2 --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/processor/TCACEFJsonProcessor.java @@ -0,0 +1,98 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.processor; + +import org.apache.commons.lang3.StringUtils; +import org.openecomp.dcae.analytics.common.exception.MessageProcessingException; +import org.openecomp.dcae.analytics.common.service.processor.AbstractMessageProcessor; +import org.openecomp.dcae.analytics.model.domain.cef.EventListener; +import org.openecomp.dcae.analytics.tca.utils.TCAUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; + +/** + *<p> + * Processor that converts incoming presumed JSON string CEF message to {@link EventListener} object + * <br> + * Pre Conditions: None + *</p> + * + * @author Rajiv Singla. Creation Date: 11/5/2016. + */ +public class TCACEFJsonProcessor extends AbstractMessageProcessor<TCACEFProcessorContext> { + + + private static final long serialVersionUID = -9031531679383821793L; + + private static final Logger LOG = LoggerFactory.getLogger(TCACEFJsonProcessor.class); + + + @Override + public String getProcessorDescription() { + return "Converts incoming TCA CEF Message to Event Listener object"; + } + + @Override + public TCACEFProcessorContext processMessage(TCACEFProcessorContext processorContext) { + + final String cefMessage = processorContext.getMessage(); + + // If CEF Message is null then processor should stop processing + if (cefMessage == null) { + String errorMessage = "Null CEF message cannot be converted to CEF Event Listener Object"; + throw new MessageProcessingException(errorMessage, LOG, new IllegalArgumentException(errorMessage)); + } + + // If CEF Message is blank then processor stop processing + if (StringUtils.isBlank(cefMessage)) { + setTerminatingProcessingMessage("Blank CEF message cannot be converted to CEF Event Listener Object", + processorContext); + return processorContext; + } + + // trim cef message + final String trimmedCEFMessage = cefMessage.trim(); + + // if message does not start with curly brace and ends with curly brace, it is not a valid cef message + // processor will stop processing + if (!(trimmedCEFMessage.startsWith("{") && trimmedCEFMessage.endsWith("}"))) { + setTerminatingProcessingMessage("CEF Message must start with curly brace and must end with curly brace", + processorContext); + return processorContext; + } + + // try parsing the cef message + try { + final EventListener eventListener = TCAUtils.readValue(trimmedCEFMessage, EventListener.class); + setFinishedProcessingMessage("CEF JSON to Event Listener Conversion Successful", processorContext); + // set new Event Listener in the Processor Context + processorContext.setCEFEventListener(eventListener); + return processorContext; + } catch (IOException e) { + final String errorMessage = String.format("Parsing Failed for CEF Message: %s, Error: %s", cefMessage, e); + // If parsing fails throw an exception + throw new MessageProcessingException(errorMessage, LOG, e); + } + + } +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/processor/TCACEFPolicyDomainFilter.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/processor/TCACEFPolicyDomainFilter.java new file mode 100644 index 0000000..639c6bc --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/processor/TCACEFPolicyDomainFilter.java @@ -0,0 +1,83 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.processor; + +import org.openecomp.dcae.analytics.model.domain.cef.EventListener; + +/** + * <p> + * TCA Processor which acts like a filter to filter out messages which does not belong to TCA Policy Domain + * <br> + * Pre Conditions: CEF Event Listener must be present + * </p> + * + * @author Rajiv Singla. Creation Date: 11/7/2016. + */ +public class TCACEFPolicyDomainFilter extends AbstractTCAECEFPolicyProcessor { + + + private static final long serialVersionUID = -7302116478207544378L; + + @Override + public String getProcessorDescription() { + return "Filters out CEF Messages which does not match TCAPolicy Domain"; + } + + @Override + public TCACEFProcessorContext processMessage(TCACEFProcessorContext processorContext) { + + // Safe to get event Listener here without null check as pre processor will validate if + // event listener is indeed present + final EventListener eventListener = processorContext.getCEFEventListener(); + + String cefMessageDomain; + + // Extract CEF domain as it is must be present as per CEF Schema + if (eventListener.getEvent() != null && + eventListener.getEvent().getCommonEventHeader() != null && + eventListener.getEvent().getCommonEventHeader().getDomain() != null) { + cefMessageDomain = eventListener.getEvent().getCommonEventHeader().getDomain(); + + } else { + final String terminatingMessage = "Invalid CEF Message.Common Event Header Domain not present."; + setTerminatingProcessingMessage(terminatingMessage, processorContext); + return processorContext; + } + + // Get Policy Domain. TCA Policy Validation must ensure that Domain is indeed present + // no null check will be required here + final String policyDomain = processorContext.getTCAPolicy().getDomain(); + + // If Policy domain matches CEF message domain then continue processing + if (cefMessageDomain.equals(policyDomain)) { + final String finishMessage = String.format("Policy Domain and CEF Message Domain match successful." + + " Message Domain: %s, Policy Domain: %s", cefMessageDomain, policyDomain); + setFinishedProcessingMessage(finishMessage, processorContext); + } else { + // If policy domain does not match with CEF message terminate processing chain + final String terminatingMessage = String.format("Policy Domain and CEF Message Domain match unsuccessful." + + " Message Domain: %s, Policy Domain: %s", cefMessageDomain, policyDomain); + setTerminatingProcessingMessage(terminatingMessage, processorContext); + } + + return processorContext; + } +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/processor/TCACEFPolicyFunctionalRoleFilter.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/processor/TCACEFPolicyFunctionalRoleFilter.java new file mode 100644 index 0000000..0f7e9b6 --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/processor/TCACEFPolicyFunctionalRoleFilter.java @@ -0,0 +1,90 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.processor; + +import com.google.common.base.Joiner; +import org.openecomp.dcae.analytics.model.domain.cef.EventListener; +import org.openecomp.dcae.analytics.model.domain.policy.tca.TCAPolicy; +import org.openecomp.dcae.analytics.tca.utils.TCAUtils; + +import java.util.List; + +/** + * <p> + * TCA Processor that acts like a filter to filter out messages which does not belong to TCA Policy Functional Roles + * <br> + * Pre Conditions: CEF Event Listener must be present + * </p> + * + * @author Rajiv Singla. Creation Date: 11/9/2016. + */ +public class TCACEFPolicyFunctionalRoleFilter extends AbstractTCAECEFPolicyProcessor { + + private static final long serialVersionUID = -4550787922375040396L; + + @Override + public String getProcessorDescription() { + return "Filters out CEF Messages which does not match Policy Functional Roles"; + } + + @Override + public TCACEFProcessorContext processMessage(TCACEFProcessorContext processorContext) { + + // Safe to get event Listener here without null check as pre processor will validate if + // event listener is indeed present + final EventListener eventListener = processorContext.getCEFEventListener(); + + String cefMessageFunctionalRole; + + if (eventListener.getEvent() != null && + eventListener.getEvent().getCommonEventHeader() != null && + eventListener.getEvent().getCommonEventHeader().getFunctionalRole() != null) { + cefMessageFunctionalRole = eventListener.getEvent().getCommonEventHeader().getFunctionalRole(); + } else { + String terminationMessage = "Invalid CEF Message.Common Event Header Functional Role not present."; + setTerminatingProcessingMessage(terminationMessage, processorContext); + return processorContext; + } + + // Determine Policy Functional Roles + final TCAPolicy tcaPolicy = processorContext.getTCAPolicy(); + final List<String> policyFunctionalRoles = TCAUtils.getPolicyFunctionalRoleSupplier(tcaPolicy).get(); + final String policyFunctionalRolesString = Joiner.on(",").join(policyFunctionalRoles); + + // If Policy functional Roles contains CEF message Functional Role then continue processing + if (policyFunctionalRoles.contains(cefMessageFunctionalRole)) { + final String finishMessage = String.format( + "Policy Functional Roles and CEF Message Functional match successful." + + "Message Functional Role: %s, Policy Functional Roles: %s", + cefMessageFunctionalRole, policyFunctionalRolesString); + setFinishedProcessingMessage(finishMessage, processorContext); + } else { + // If Policy functional Roles does not contain CEF message Functiona Role then terminate processing + final String terminatingMessage = String.format( + "Policy Domain and CEF Message Domain match unsuccessful." + + "Message Functional Role: %s, Policy Functional Roles: %s", + cefMessageFunctionalRole, policyFunctionalRolesString); + setTerminatingProcessingMessage(terminatingMessage, processorContext); + } + + return processorContext; + } +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/processor/TCACEFPolicyThresholdsProcessor.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/processor/TCACEFPolicyThresholdsProcessor.java new file mode 100644 index 0000000..6dd334f --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/processor/TCACEFPolicyThresholdsProcessor.java @@ -0,0 +1,135 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.processor; + +import com.google.common.base.Optional; +import com.google.common.collect.Table; +import org.openecomp.dcae.analytics.common.exception.MessageProcessingException; +import org.openecomp.dcae.analytics.model.domain.cef.EventListener; +import org.openecomp.dcae.analytics.model.domain.policy.tca.MetricsPerFunctionalRole; +import org.openecomp.dcae.analytics.model.domain.policy.tca.TCAPolicy; +import org.openecomp.dcae.analytics.model.domain.policy.tca.Threshold; +import org.openecomp.dcae.analytics.tca.utils.TCAUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.annotation.Nonnull; + +/** + *<p> + * TCA CEF Policy Threshold processor + * <br> + * Pre Conditions: Domain and Functional Role must be present in CEF Event Listener Object + *</p> + * + * @author Rajiv Singla. Creation Date: 11/9/2016. + */ +public class TCACEFPolicyThresholdsProcessor extends AbstractTCAECEFPolicyProcessor { + + private static final long serialVersionUID = -9075212160268522029L; + + private static final Logger LOG = LoggerFactory.getLogger(TCACEFPolicyThresholdsProcessor.class); + + @Override + public TCACEFProcessorContext preProcessor(@Nonnull TCACEFProcessorContext processorContext) { + // validates Domain and Functional Role are present + final EventListener eventListener = processorContext.getCEFEventListener(); + final String domain = eventListener.getEvent().getCommonEventHeader().getDomain(); + final String functionalRole = eventListener.getEvent().getCommonEventHeader().getFunctionalRole(); + if (domain == null || functionalRole == null) { + final String errorMessage = "CEF Event Listener domain or functional role not Present. " + + "Invalid use of this Processor"; + throw new MessageProcessingException(errorMessage, LOG, new IllegalArgumentException(errorMessage)); + } + return super.preProcessor(processorContext); + } + + @Override + public String getProcessorDescription() { + return "Applies TCA Policy rules to incoming CEF message. If any thresholds are violated attaches max " + + "Severity violated threshold to TCA Processor Context"; + } + + @Override + public TCACEFProcessorContext processMessage(TCACEFProcessorContext processorContext) { + + final String cefMessage = processorContext.getMessage(); + + // Determine domain and functional Role + final EventListener eventListener = processorContext.getCEFEventListener(); + final String functionalRole = eventListener.getEvent().getCommonEventHeader().getFunctionalRole(); + + // Get Table containing Functional Role and Thresholds Field Path + final TCAPolicy tcaPolicy = processorContext.getTCAPolicy(); + final Table<String, String, List<Threshold>> functionalRoleFieldPathsTable = + TCAUtils.getPolicyFRThresholdsTableSupplier(tcaPolicy).get(); + + // Get Policy Field Paths for that functional Role + final Map<String, List<Threshold>> policyFieldPathsMap = functionalRoleFieldPathsTable.row(functionalRole); + final Set<String> policyFieldPaths = policyFieldPathsMap.keySet(); + + // Get Json Values for Policy Fields + final Map<String, List<Long>> messageFieldValuesMap = TCAUtils.getJsonPathValue(cefMessage, policyFieldPaths); + + // Determine all violated thresholds per message field Path + final Map<String, Threshold> violatedThresholdsMap = new HashMap<>(); + for (Map.Entry<String, List<Long>> messageFieldValuesMapEntry : messageFieldValuesMap.entrySet()) { + final String messageFieldPath = messageFieldValuesMapEntry.getKey(); + final List<Threshold> messageFieldAssociatedPolicyThresholds = policyFieldPathsMap.get(messageFieldPath); + if (messageFieldAssociatedPolicyThresholds != null) { + final Optional<Threshold> thresholdOptional = TCAUtils.thresholdCalculator( + messageFieldValuesMapEntry.getValue(), messageFieldAssociatedPolicyThresholds); + if (thresholdOptional.isPresent()) { + violatedThresholdsMap.put(messageFieldPath, thresholdOptional.get()); + } + } + } + + // No threshold were violated + if (violatedThresholdsMap.isEmpty()) { + + final String terminationMessage = "No Policy Threshold violated by the VES CEF Message."; + setTerminatingProcessingMessage(terminationMessage, processorContext); + + } else { + + // If there are policy violations then determine max priority violation + final Threshold maxSeverityThresholdViolation = + TCAUtils.prioritizeThresholdViolations(violatedThresholdsMap); + final MetricsPerFunctionalRole violatedMetrics = TCAUtils.createViolatedMetrics(tcaPolicy, + maxSeverityThresholdViolation, functionalRole); + // attach policy violation to processor Context + processorContext.setMetricsPerFunctionalRole(violatedMetrics); + + final String finishMessage = String.format("Policy Threshold violation detected for threshold: %s", + maxSeverityThresholdViolation); + setFinishedProcessingMessage(finishMessage, processorContext); + + } + + return processorContext; + } +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/processor/TCACEFProcessorContext.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/processor/TCACEFProcessorContext.java new file mode 100644 index 0000000..30ebe9d --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/processor/TCACEFProcessorContext.java @@ -0,0 +1,103 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.processor; + +import org.openecomp.dcae.analytics.common.service.processor.AbstractProcessorContext; +import org.openecomp.dcae.analytics.model.domain.cef.EventListener; +import org.openecomp.dcae.analytics.model.domain.policy.tca.MetricsPerFunctionalRole; +import org.openecomp.dcae.analytics.model.domain.policy.tca.TCAPolicy; + +/** + * TCA CEF Policy Processor Context + * + * @author Rajiv Singla. Creation Date: 11/7/2016. + */ +public class TCACEFProcessorContext extends AbstractProcessorContext { + + private static final long serialVersionUID = 1165992675657025413L; + + private final TCAPolicy tcaPolicy; + private EventListener eventListener; + private MetricsPerFunctionalRole metricsPerFunctionalRole; + + public TCACEFProcessorContext(final String message, boolean canProcessingContinue, final TCAPolicy tcaPolicy) { + super(message, canProcessingContinue); + this.tcaPolicy = tcaPolicy; + // present only if cef incoming message can be parsed successfully to Event Listener Object + this.eventListener = null; + // present only if there are any threshold violations are detected + this.metricsPerFunctionalRole = null; + } + + // Auxiliary Constructor which default canProcessingContinue Flag to true + public TCACEFProcessorContext(final String message, final TCAPolicy tcaPolicy) { + this(message, true, tcaPolicy); + } + + /** + * Returns {@link TCAPolicy} Object + * + * @return TCA Policy + */ + public TCAPolicy getTCAPolicy() { + return tcaPolicy; + } + + /** + * Returns Common Event Format {@link EventListener} if present else null + * + * @return CEF Event Listener + */ + public EventListener getCEFEventListener() { + return eventListener; + } + + + /** + * Sets new {@link EventListener} + * + * @param eventListener set new value for CEF event listener + */ + public void setCEFEventListener(final EventListener eventListener) { + this.eventListener = eventListener; + } + + + /** + * Returns TCA Policy {@link MetricsPerFunctionalRole} which was has violated Threshold for the CEF Message if + * present else null + * + * @return Violated Threshold Optional + */ + public MetricsPerFunctionalRole getMetricsPerFunctionalRole() { + return metricsPerFunctionalRole; + } + + /** + * Assign new TCA Policy {@link MetricsPerFunctionalRole} which was has violated Threshold for the CEF Message + * + * @param metricsPerFunctionalRole new value for Metrics Per Functional Role with violated threshold + */ + public void setMetricsPerFunctionalRole(MetricsPerFunctionalRole metricsPerFunctionalRole) { + this.metricsPerFunctionalRole = metricsPerFunctionalRole; + } + +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/settings/TCAAppConfig.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/settings/TCAAppConfig.java new file mode 100644 index 0000000..1f7c32d --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/settings/TCAAppConfig.java @@ -0,0 +1,96 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.settings; + +import com.google.common.base.Objects; +import org.openecomp.dcae.analytics.common.AnalyticsConstants; +import org.openecomp.dcae.analytics.common.CDAPComponentsConstants; +import org.openecomp.dcae.analytics.common.cdap.settings.CDAPBaseAppConfig; + + +/** + * Contains CDAP App Config Settings for TCA Application + * + * @author Rajiv Singla. Creation Date: 11/2/2016. + */ +public class TCAAppConfig extends CDAPBaseAppConfig { + + + private static final long serialVersionUID = -6775885444808279443L; + + private String tcaSubscriberOutputStreamName; + private Integer thresholdCalculatorFlowletInstances; + + private String tcaVESMessageStatusTableName; + private Integer tcaVESMessageStatusTableTTLSeconds; + private String tcaVESAlertsTableName; + private Integer tcaVESAlertsTableTTLSeconds; + + + public TCAAppConfig() { + appName = CDAPComponentsConstants.TCA_DEFAULT_NAME_APP; + appDescription = CDAPComponentsConstants.TCA_DEFAULT_DESCRIPTION_APP; + tcaSubscriberOutputStreamName = CDAPComponentsConstants.TCA_DEFAULT_SUBSCRIBER_OUTPUT_NAME_STREAM; + thresholdCalculatorFlowletInstances = AnalyticsConstants.TCA_DEFAULT_THRESHOLD_CALCULATOR_FLOWLET_INSTANCES; + tcaVESMessageStatusTableName = CDAPComponentsConstants.TCA_DEFAULT_VES_MESSAGE_STATUS_NAME_TABLE; + tcaVESMessageStatusTableTTLSeconds = AnalyticsConstants.TCA_DEFAULT_VES_MESSAGE_STATUS_TTL_TABLE; + tcaVESAlertsTableName = CDAPComponentsConstants.TCA_DEFAULT_VES_ALERTS_NAME_TABLE; + tcaVESAlertsTableTTLSeconds = AnalyticsConstants.TCA_DEFAULT_VES_ALERTS_TTL_TABLE; + } + + public String getTcaSubscriberOutputStreamName() { + return tcaSubscriberOutputStreamName; + } + + public String getTcaVESMessageStatusTableName() { + return tcaVESMessageStatusTableName; + } + + public Integer getTcaVESMessageStatusTableTTLSeconds() { + return tcaVESMessageStatusTableTTLSeconds; + } + + public String getTcaVESAlertsTableName() { + return tcaVESAlertsTableName; + } + + public Integer getTcaVESAlertsTableTTLSeconds() { + return tcaVESAlertsTableTTLSeconds; + } + + public Integer getThresholdCalculatorFlowletInstances() { + return thresholdCalculatorFlowletInstances; + } + + @Override + public String toString() { + return Objects.toStringHelper(this) + .add("appName", appName) + .add("appDescription", appDescription) + .add("tcaSubscriberOutputStreamName", tcaSubscriberOutputStreamName) + .add("thresholdCalculatorFlowletInstances", thresholdCalculatorFlowletInstances) + .add("tcaVESMessageStatusTableName", tcaVESMessageStatusTableName) + .add("tcaVESMessageStatusTableTTLSeconds", tcaVESMessageStatusTableTTLSeconds) + .add("tcaVESAlertsTableName", tcaVESAlertsTableName) + .add("tcaVESAlertsTableTTLSeconds", tcaVESAlertsTableTTLSeconds) + .toString(); + } +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/settings/TCAAppPreferences.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/settings/TCAAppPreferences.java new file mode 100644 index 0000000..8eddb3c --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/settings/TCAAppPreferences.java @@ -0,0 +1,262 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.settings; + +import com.google.common.base.Objects; +import org.openecomp.dcae.analytics.common.cdap.settings.CDAPAppPreferences; + +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.TCA_DEFAULT_PUBLISHER_MAX_BATCH_QUEUE_SIZE; +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.TCA_DEFAULT_PUBLISHER_MAX_RECOVERY_QUEUE_SIZE; +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.TCA_DEFAULT_PUBLISHER_POLLING_INTERVAL_MS; +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.TCA_DEFAULT_SUBSCRIBER_POLLING_INTERVAL_MS; + +/** + * <p> + * App Preferences for Analytics TCA (Threshold Crossing Alert) App + * <p> + * @author Rajiv Singla. Creation Date: 10/4/2016. + */ +public class TCAAppPreferences implements CDAPAppPreferences { + + private static final long serialVersionUID = -685010752560182764L; + + // subscriber preferences + protected String subscriberHostName; + + protected Integer subscriberHostPort; + + protected String subscriberTopicName; + + protected String subscriberProtocol; + + protected String subscriberUserName; + + protected String subscriberUserPassword; + + protected String subscriberContentType; + + protected String subscriberConsumerId; + + protected String subscriberConsumerGroup; + + protected Integer subscriberTimeoutMS; + + protected Integer subscriberMessageLimit; + + protected Integer subscriberPollingInterval; + + // publisher preferences + protected String publisherHostName; + + protected Integer publisherHostPort; + + protected String publisherTopicName; + + protected String publisherProtocol; + + protected String publisherUserName; + + protected String publisherUserPassword; + + protected String publisherContentType; + + protected Integer publisherMaxBatchSize; + + protected Integer publisherMaxRecoveryQueueSize; + + protected Integer publisherPollingInterval; + + + public TCAAppPreferences() { + + // subscriber defaults + subscriberPollingInterval = TCA_DEFAULT_SUBSCRIBER_POLLING_INTERVAL_MS; + + // publisher defaults + publisherMaxBatchSize = TCA_DEFAULT_PUBLISHER_MAX_BATCH_QUEUE_SIZE; + publisherMaxRecoveryQueueSize = TCA_DEFAULT_PUBLISHER_MAX_RECOVERY_QUEUE_SIZE; + publisherPollingInterval = TCA_DEFAULT_PUBLISHER_POLLING_INTERVAL_MS; + + } + + public String getSubscriberHostName() { + return subscriberHostName; + } + + public Integer getSubscriberHostPort() { + return subscriberHostPort; + } + + public String getSubscriberTopicName() { + return subscriberTopicName; + } + + public String getSubscriberProtocol() { + return subscriberProtocol; + } + + public String getSubscriberUserName() { + return subscriberUserName; + } + + public String getSubscriberUserPassword() { + return subscriberUserPassword; + } + + public String getSubscriberContentType() { + return subscriberContentType; + } + + public String getSubscriberConsumerId() { + return subscriberConsumerId; + } + + public String getSubscriberConsumerGroup() { + return subscriberConsumerGroup; + } + + public Integer getSubscriberTimeoutMS() { + return subscriberTimeoutMS; + } + + public Integer getSubscriberMessageLimit() { + return subscriberMessageLimit; + } + + public Integer getSubscriberPollingInterval() { + return subscriberPollingInterval; + } + + public String getPublisherHostName() { + return publisherHostName; + } + + public Integer getPublisherHostPort() { + return publisherHostPort; + } + + public String getPublisherTopicName() { + return publisherTopicName; + } + + public String getPublisherProtocol() { + return publisherProtocol; + } + + public String getPublisherUserName() { + return publisherUserName; + } + + public String getPublisherUserPassword() { + return publisherUserPassword; + } + + public String getPublisherContentType() { + return publisherContentType; + } + + public Integer getPublisherMaxBatchSize() { + return publisherMaxBatchSize; + } + + public Integer getPublisherMaxRecoveryQueueSize() { + return publisherMaxRecoveryQueueSize; + } + + public Integer getPublisherPollingInterval() { + return publisherPollingInterval; + } + + + public void setSubscriberHostName(String subscriberHostName) { + this.subscriberHostName = subscriberHostName; + } + + public void setSubscriberHostPort(Integer subscriberHostPort) { + this.subscriberHostPort = subscriberHostPort; + } + + public void setSubscriberTopicName(String subscriberTopicName) { + this.subscriberTopicName = subscriberTopicName; + } + + public void setSubscriberProtocol(String subscriberProtocol) { + this.subscriberProtocol = subscriberProtocol; + } + + public void setSubscriberUserName(String subscriberUserName) { + this.subscriberUserName = subscriberUserName; + } + + public void setSubscriberUserPassword(String subscriberUserPassword) { + this.subscriberUserPassword = subscriberUserPassword; + } + + public void setPublisherHostName(String publisherHostName) { + this.publisherHostName = publisherHostName; + } + + public void setPublisherHostPort(Integer publisherHostPort) { + this.publisherHostPort = publisherHostPort; + } + + public void setPublisherTopicName(String publisherTopicName) { + this.publisherTopicName = publisherTopicName; + } + + public void setPublisherProtocol(String publisherProtocol) { + this.publisherProtocol = publisherProtocol; + } + + public void setPublisherUserName(String publisherUserName) { + this.publisherUserName = publisherUserName; + } + + public void setPublisherUserPassword(String publisherUserPassword) { + this.publisherUserPassword = publisherUserPassword; + } + + @Override + public String toString() { + return Objects.toStringHelper(this) + .add("subscriberHostName", subscriberHostName) + .add("subscriberHostPort", subscriberHostPort) + .add("subscriberTopicName", subscriberTopicName) + .add("subscriberProtocol", subscriberProtocol) + .add("subscriberUserName", subscriberUserName) + .add("subscriberContentType", subscriberContentType) + .add("subscriberConsumerId", subscriberConsumerId) + .add("subscriberConsumerGroup", subscriberConsumerGroup) + .add("subscriberTimeoutMS", subscriberTimeoutMS) + .add("subscriberMessageLimit", subscriberMessageLimit) + .add("subscriberPollingInterval", subscriberPollingInterval) + .add("publisherHostName", publisherHostName) + .add("publisherHostPort", publisherHostPort) + .add("publisherTopicName", publisherTopicName) + .add("publisherProtocol", publisherProtocol) + .add("publisherUserName", publisherUserName) + .add("publisherContentType", publisherContentType) + .add("publisherMaxBatchSize", publisherMaxBatchSize) + .add("publisherMaxRecoveryQueueSize", publisherMaxRecoveryQueueSize) + .add("publisherPollingInterval", publisherPollingInterval) + .toString(); + } +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/settings/TCAPolicyPreferences.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/settings/TCAPolicyPreferences.java new file mode 100644 index 0000000..cbbf550 --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/settings/TCAPolicyPreferences.java @@ -0,0 +1,36 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.settings; + +import org.openecomp.dcae.analytics.common.cdap.settings.CDAPAppPreferences; +import org.openecomp.dcae.analytics.model.domain.policy.tca.TCAPolicy; + +/** + * A wrapper over {@link TCAPolicy} to act as app Preferences as TCA Policy is passed + * by controller as runtime arguments from CDAP app preferences + * <p> + * @author Rajiv Singla. Creation Date: 11/29/2016. + */ +public class TCAPolicyPreferences extends TCAPolicy implements CDAPAppPreferences { + + private static final long serialVersionUID = -2957485388641574043L; + +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/utils/AppPreferencesToPublisherConfigMapper.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/utils/AppPreferencesToPublisherConfigMapper.java new file mode 100644 index 0000000..f332681 --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/utils/AppPreferencesToPublisherConfigMapper.java @@ -0,0 +1,82 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.utils; + +import com.google.common.base.Function; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRPublisherConfig; +import org.openecomp.dcae.analytics.tca.settings.TCAAppPreferences; + +import javax.annotation.Nonnull; + +import static org.openecomp.dcae.analytics.common.utils.ValidationUtils.isEmpty; + +/** + * Function which translates {@link TCAAppPreferences} to {@link DMaaPMRPublisherConfig} + * + * @author Rajiv Singla. Creation Date: 11/17/2016. + */ +public class AppPreferencesToPublisherConfigMapper implements Function<TCAAppPreferences, DMaaPMRPublisherConfig> { + + public static DMaaPMRPublisherConfig map(final TCAAppPreferences tcaAppPreferences) { + return new AppPreferencesToPublisherConfigMapper().apply(tcaAppPreferences); + } + + @Nonnull + @Override + public DMaaPMRPublisherConfig apply(@Nonnull TCAAppPreferences tcaAppPreferences) { + + // Create a new publisher settings builder + final DMaaPMRPublisherConfig.Builder publisherConfigBuilder = new DMaaPMRPublisherConfig.Builder( + tcaAppPreferences.getPublisherHostName(), tcaAppPreferences.getPublisherTopicName()); + + // Setup up any optional publisher parameters if they are present + final Integer publisherHostPort = tcaAppPreferences.getPublisherHostPort(); + if (publisherHostPort != null) { + publisherConfigBuilder.setPortNumber(publisherHostPort); + } + final String publisherProtocol = tcaAppPreferences.getPublisherProtocol(); + if (!isEmpty(publisherProtocol)) { + publisherConfigBuilder.setProtocol(publisherProtocol); + } + final String publisherUserName = tcaAppPreferences.getPublisherUserName(); + if (!isEmpty(publisherUserName)) { + publisherConfigBuilder.setUserName(publisherUserName); + } + final String publisherUserPassword = tcaAppPreferences.getPublisherUserPassword(); + if (!isEmpty(publisherUserPassword)) { + publisherConfigBuilder.setUserPassword(publisherUserPassword); + } + final String publisherContentType = tcaAppPreferences.getPublisherContentType(); + if (!isEmpty(publisherContentType)) { + publisherConfigBuilder.setContentType(publisherContentType); + } + final Integer publisherMaxBatchSize = tcaAppPreferences.getPublisherMaxBatchSize(); + if (publisherMaxBatchSize != null) { + publisherConfigBuilder.setMaxBatchSize(publisherMaxBatchSize); + } + final Integer publisherMaxRecoveryQueueSize = tcaAppPreferences.getPublisherMaxRecoveryQueueSize(); + if (publisherMaxRecoveryQueueSize != null) { + publisherConfigBuilder.setMaxRecoveryQueueSize(publisherMaxRecoveryQueueSize); + } + + return publisherConfigBuilder.build(); + } +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/utils/AppPreferencesToSubscriberConfigMapper.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/utils/AppPreferencesToSubscriberConfigMapper.java new file mode 100644 index 0000000..d0e7f1f --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/utils/AppPreferencesToSubscriberConfigMapper.java @@ -0,0 +1,99 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.utils; + +import com.google.common.base.Function; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRSubscriberConfig; +import org.openecomp.dcae.analytics.tca.settings.TCAAppPreferences; + +import javax.annotation.Nonnull; + +import static org.openecomp.dcae.analytics.common.utils.ValidationUtils.isEmpty; + +/** + * Function which translates {@link TCAAppPreferences} to {@link DMaaPMRSubscriberConfig} + * + * @author Rajiv Singla. Creation Date: 11/17/2016. + */ +public class AppPreferencesToSubscriberConfigMapper implements Function<TCAAppPreferences, DMaaPMRSubscriberConfig> { + + public static DMaaPMRSubscriberConfig map(final TCAAppPreferences tcaAppPreferences) { + return new AppPreferencesToSubscriberConfigMapper().apply(tcaAppPreferences); + } + + @Nonnull + @Override + public DMaaPMRSubscriberConfig apply(@Nonnull TCAAppPreferences tcaAppPreferences) { + + // Create a new subscriber settings builder + final DMaaPMRSubscriberConfig.Builder subscriberConfigBuilder = new DMaaPMRSubscriberConfig.Builder( + tcaAppPreferences.getSubscriberHostName(), tcaAppPreferences.getSubscriberTopicName()); + + // Setup up any optional subscriber parameters if they are present + final Integer subscriberHostPortNumber = tcaAppPreferences.getSubscriberHostPort(); + if (subscriberHostPortNumber != null) { + subscriberConfigBuilder.setPortNumber(subscriberHostPortNumber); + } + + final String subscriberProtocol = tcaAppPreferences.getSubscriberProtocol(); + if (!isEmpty(subscriberProtocol)) { + subscriberConfigBuilder.setProtocol(subscriberProtocol); + } + + final String subscriberUserName = tcaAppPreferences.getSubscriberUserName(); + if (!isEmpty(subscriberUserName)) { + subscriberConfigBuilder.setUserName(subscriberUserName); + } + + final String subscriberUserPassword = tcaAppPreferences.getSubscriberUserPassword(); + if (!isEmpty(subscriberUserPassword)) { + subscriberConfigBuilder.setUserPassword(subscriberUserPassword); + } + + final String subscriberContentType = tcaAppPreferences.getSubscriberContentType(); + if (!isEmpty(subscriberContentType)) { + subscriberConfigBuilder.setContentType(subscriberContentType); + } + + final String subscriberConsumerId = tcaAppPreferences.getSubscriberConsumerId(); + if (!isEmpty(subscriberConsumerId)) { + subscriberConfigBuilder.setConsumerId(subscriberConsumerId); + } + + final String subscriberConsumerGroup = tcaAppPreferences.getSubscriberConsumerGroup(); + if (!isEmpty(subscriberConsumerGroup)) { + subscriberConfigBuilder.setConsumerGroup(subscriberConsumerGroup); + } + + final Integer subscriberTimeoutMS = tcaAppPreferences.getSubscriberTimeoutMS(); + if (subscriberTimeoutMS != null) { + subscriberConfigBuilder.setTimeoutMS(subscriberTimeoutMS); + } + final Integer subscriberMessageLimit = tcaAppPreferences.getSubscriberMessageLimit(); + if (subscriberMessageLimit != null) { + subscriberConfigBuilder.setMessageLimit(subscriberMessageLimit); + } + + // return Subscriber settings + return subscriberConfigBuilder.build(); + + } +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/utils/TCAUtils.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/utils/TCAUtils.java new file mode 100644 index 0000000..27df27f --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/utils/TCAUtils.java @@ -0,0 +1,825 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.utils; + +import co.cask.cdap.api.RuntimeContext; +import com.google.common.base.Function; +import com.google.common.base.Optional; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Table; +import com.jayway.jsonpath.DocumentContext; +import com.jayway.jsonpath.JsonPath; +import com.jayway.jsonpath.TypeRef; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Pair; +import org.openecomp.dcae.analytics.common.AnalyticsConstants; +import org.openecomp.dcae.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.openecomp.dcae.analytics.common.exception.MessageProcessingException; +import org.openecomp.dcae.analytics.common.service.processor.AbstractMessageProcessor; +import org.openecomp.dcae.analytics.common.service.processor.GenericMessageChainProcessor; +import org.openecomp.dcae.analytics.model.domain.cef.CommonEventHeader; +import org.openecomp.dcae.analytics.model.domain.cef.EventListener; +import org.openecomp.dcae.analytics.model.domain.cef.EventSeverity; +import org.openecomp.dcae.analytics.model.domain.policy.tca.Direction; +import org.openecomp.dcae.analytics.model.domain.policy.tca.MetricsPerFunctionalRole; +import org.openecomp.dcae.analytics.model.domain.policy.tca.TCAPolicy; +import org.openecomp.dcae.analytics.model.domain.policy.tca.Threshold; +import org.openecomp.dcae.analytics.model.facade.tca.AAI; +import org.openecomp.dcae.analytics.model.facade.tca.TCAVESResponse; +import org.openecomp.dcae.analytics.model.util.AnalyticsModelJsonUtils; +import org.openecomp.dcae.analytics.tca.persistance.TCAVESAlertEntity; +import org.openecomp.dcae.analytics.tca.processor.TCACEFJsonProcessor; +import org.openecomp.dcae.analytics.tca.processor.TCACEFPolicyDomainFilter; +import org.openecomp.dcae.analytics.tca.processor.TCACEFPolicyFunctionalRoleFilter; +import org.openecomp.dcae.analytics.tca.processor.TCACEFPolicyThresholdsProcessor; +import org.openecomp.dcae.analytics.tca.processor.TCACEFProcessorContext; +import org.openecomp.dcae.analytics.tca.settings.TCAAppPreferences; +import org.openecomp.dcae.analytics.tca.settings.TCAPolicyPreferences; +import org.openecomp.dcae.analytics.tca.validator.TCAPolicyPreferencesValidator; +import org.openecomp.dcae.analytics.tca.validator.TCAPreferencesValidator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.SortedMap; +import java.util.TreeMap; +import java.util.UUID; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import static com.google.common.collect.Lists.newArrayList; +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.TCA_POLICY_METRICS_PER_FUNCTIONAL_ROLE_PATH; +import static org.openecomp.dcae.analytics.common.utils.ValidationUtils.validateSettings; + +/** + * Utility Helper methods for TCA sub module only. Extends {@link AnalyticsModelJsonUtils} to get + * pre configured Json Object Mapper understand serialization and deserialization of CEF Message + * and TCA Policy + * + * @author Rajiv Singla. Creation Date: 10/24/2016. + */ +public abstract class TCAUtils extends AnalyticsModelJsonUtils { + + private static final Logger LOG = LoggerFactory.getLogger(TCAUtils.class); + + /** + * Threshold Comparator which is used to order thresholds based on their severity e.g. ( CRITICAL, MAJOR, MINOR, + * WARNING ) + */ + private static final Comparator<Threshold> THRESHOLD_COMPARATOR = new Comparator<Threshold>() { + @Override + public int compare(Threshold threshold1, Threshold threshold2) { + return threshold1.getSeverity().compareTo(threshold2.getSeverity()); + } + }; + + + /** + * {@link Function} that extracts {@link TCAPolicy#getMetricsPerFunctionalRole()} from {@link TCAPolicy} + * + * @return TCA Policy Metrics Per Functional Roles List + */ + public static Function<TCAPolicy, List<MetricsPerFunctionalRole>> tcaPolicyMetricsExtractorFunction() { + return new Function<TCAPolicy, List<MetricsPerFunctionalRole>>() { + @Nullable + @Override + public List<MetricsPerFunctionalRole> apply(@Nonnull TCAPolicy tcaPolicy) { + return tcaPolicy.getMetricsPerFunctionalRole(); + } + }; + } + + /** + * {@link Function} that extracts {@link MetricsPerFunctionalRole#getFunctionalRole()} from + * {@link MetricsPerFunctionalRole} + * + * @return Functional role or a Metrics Per Functional Role object + */ + public static Function<MetricsPerFunctionalRole, String> tcaFunctionalRoleExtractorFunction() { + return new Function<MetricsPerFunctionalRole, String>() { + @Override + public String apply(@Nonnull MetricsPerFunctionalRole metricsPerFunctionalRole) { + return metricsPerFunctionalRole.getFunctionalRole(); + } + }; + } + + + /** + * Extracts {@link TCAPolicy} Functional Roles + * + * @param tcaPolicy TCA Policy + * @return List of functional Roles in the tca Policy + */ + public static List<String> getPolicyFunctionalRoles(@Nonnull final TCAPolicy tcaPolicy) { + final List<MetricsPerFunctionalRole> metricsPerFunctionalRoles = + tcaPolicyMetricsExtractorFunction().apply(tcaPolicy); + + return Lists.transform(metricsPerFunctionalRoles, tcaFunctionalRoleExtractorFunction()); + } + + /** + * A {@link Supplier} which caches {@link TCAPolicy} Functional Roles as they are not expected to + * change during runtime + * + * @param tcaPolicy TCA Policy + * @return a Supplier that memoize the Functional roles + */ + public static Supplier<List<String>> getPolicyFunctionalRoleSupplier(@Nonnull final TCAPolicy tcaPolicy) { + return Suppliers.memoize(new Supplier<List<String>>() { + @Override + public List<String> get() { + return getPolicyFunctionalRoles(tcaPolicy); + } + }); + } + + + /** + * Creates a Table to lookup thresholds of a {@link TCAPolicy} by its Functional Role and Threshold Field path + * + * @param tcaPolicy TCA Policy + * @return A table with Keys of functional role and field path containing List of threshold as values + */ + public static Table<String, String, List<Threshold>> getPolicyFRThresholdsTable(final TCAPolicy tcaPolicy) { + final Table<String, String, List<Threshold>> domainFRTable = HashBasedTable.create(); + for (MetricsPerFunctionalRole metricsPerFunctionalRole : tcaPolicy.getMetricsPerFunctionalRole()) { + final String functionalRole = metricsPerFunctionalRole.getFunctionalRole(); + final List<Threshold> thresholds = metricsPerFunctionalRole.getThresholds(); + for (Threshold threshold : thresholds) { + final List<Threshold> existingThresholds = domainFRTable.get(functionalRole, threshold.getFieldPath()); + if (existingThresholds == null) { + final LinkedList<Threshold> newThresholdList = new LinkedList<>(); + newThresholdList.add(threshold); + domainFRTable.put(functionalRole, threshold.getFieldPath(), newThresholdList); + } else { + domainFRTable.get(functionalRole, threshold.getFieldPath()).add(threshold); + } + } + } + return domainFRTable; + } + + + /** + * A {@link Supplier} which caches Policy Functional Role and Threshold Field Path Thresholds lookup table + * + * @param tcaPolicy TCA Policy + * @return Cached Supplier for table with Keys of functional role and field path containing thresholds as values + */ + public static Supplier<Table<String, String, List<Threshold>>> getPolicyFRThresholdsTableSupplier + (final TCAPolicy tcaPolicy) { + return Suppliers.memoize(new Supplier<Table<String, String, List<Threshold>>>() { + @Override + public Table<String, String, List<Threshold>> get() { + return getPolicyFRThresholdsTable(tcaPolicy); + } + }); + } + + + /** + * Parses and validates Runtime Arguments to {@link TCAAppPreferences} object + * + * @param runtimeContext Runtime Context + * + * @return validated runtime arguments as {@link TCAAppPreferences} object + */ + public static TCAAppPreferences getValidatedTCAAppPreferences(final RuntimeContext runtimeContext) { + // Parse runtime arguments + final Map<String, String> runtimeArguments = runtimeContext.getRuntimeArguments(); + final TCAAppPreferences tcaAppPreferences = + ANALYTICS_MODEL_OBJECT_MAPPER.convertValue(runtimeArguments, TCAAppPreferences.class); + + // Update values of app preferences based on controller passed arguments if required + final TCAAppPreferences updatedTCAAppPreferences = + updateDMaaPPubSubValues(runtimeArguments, tcaAppPreferences); + + // Validate runtime arguments + validateSettings(updatedTCAAppPreferences, new TCAPreferencesValidator()); + + return tcaAppPreferences; + } + + + /** + * Updates DMaaP Subscriber and Publisher Urls if present in runtime arguments. + * Maps runtime arguments property - dmaap.in.event-input.dmaapUrl to Subscriber host, port and topic + * Maps runtime arguments property - dmaap.out.alert-output.dmaapUrl to Publisher host, port and topic + * + * @param runtimeArguments Runtime arguments passed in to TCA App by controller + * @param tcaAppPreferences TCA App Preferences + * + * @return TCA App Preferences which updated Publisher and Subscriber host,port and topic values + */ + public static TCAAppPreferences updateDMaaPPubSubValues(final Map<String, String> runtimeArguments, + final TCAAppPreferences tcaAppPreferences) { + + final String subscriberPropertyKey = "dmaap.in.event-input.dmaapUrl"; + final String subscriberPropertyValue = runtimeArguments.get(subscriberPropertyKey); + + if (subscriberPropertyValue != null) { + LOG.debug("Updating value for DMaaP Subscriber to values provided in property: {} with value: {}", + subscriberPropertyKey, subscriberPropertyValue); + final URL subscriberUrl = parseURL(subscriberPropertyValue); + tcaAppPreferences.setSubscriberProtocol(subscriberUrl.getProtocol()); + tcaAppPreferences.setSubscriberHostName(subscriberUrl.getHost()); + final int subscriberUrlPort = subscriberUrl.getPort() != -1 ? + Integer.valueOf(subscriberUrl.getPort()) : getDefaultDMaaPPort(subscriberUrl.getProtocol()); + tcaAppPreferences.setSubscriberHostPort(subscriberUrlPort); + tcaAppPreferences.setSubscriberTopicName(subscriberUrl.getPath().substring(1)); + } + + final String subscriberUserNamePropertyKey = "dmaap.in.event-input.dmaapUserName"; + if (runtimeArguments.containsKey(subscriberUserNamePropertyKey)) { + tcaAppPreferences.setSubscriberUserName(runtimeArguments.get(subscriberUserNamePropertyKey)); + } + final String subscriberPasswordPropertyKey = "dmaap.in.event-input.dmaapPassword"; + if (runtimeArguments.containsKey(subscriberPasswordPropertyKey)) { + tcaAppPreferences.setSubscriberUserPassword(runtimeArguments.get(subscriberPasswordPropertyKey)); + } + + final String publisherPropertyKey = "dmaap.out.alert-output.dmaapUrl"; + final String publisherPropertyValue = runtimeArguments.get(publisherPropertyKey); + if (publisherPropertyValue != null) { + LOG.debug("Updating value for DMaaP Publisher to values provided in property: {} with value: {}", + publisherPropertyKey, publisherPropertyValue); + final URL publisherUrl = parseURL(publisherPropertyValue); + tcaAppPreferences.setPublisherProtocol(publisherUrl.getProtocol()); + tcaAppPreferences.setPublisherHostName(publisherUrl.getHost()); + final int publisherUrlPort = publisherUrl.getPort() != -1 ? + Integer.valueOf(publisherUrl.getPort()) : getDefaultDMaaPPort(publisherUrl.getProtocol()); + tcaAppPreferences.setPublisherHostPort(publisherUrlPort); + tcaAppPreferences.setPublisherTopicName(publisherUrl.getPath().substring(1)); + } + + final String publisherUserNamePropertyKey = "dmaap.out.alert-output.dmaapUserName"; + if (runtimeArguments.containsKey(publisherUserNamePropertyKey)) { + tcaAppPreferences.setPublisherUserName(runtimeArguments.get(publisherUserNamePropertyKey)); + } + final String publisherPasswordPropertyKey = "dmaap.out.alert-output.dmaapPassword"; + if (runtimeArguments.containsKey(publisherPasswordPropertyKey)) { + tcaAppPreferences.setPublisherUserPassword(runtimeArguments.get(publisherPasswordPropertyKey)); + } + + + return tcaAppPreferences; + } + + /** + * Sets up default DMaaP Port if not provided with DMaaP URL + * + * @param protocol protocol e.g. http or https + * + * @return default DMaaP MR port number + */ + private static int getDefaultDMaaPPort(final String protocol) { + if ("http".equals(protocol)) { + return 3904; + } else if ("https".equals(protocol)) { + return 3905; + } else { + return 80; + } + } + + /** + * Parses provided DMaaP MR URL string to {@link URL} object + * + * @param urlString url string + * + * @return url object + */ + private static URL parseURL(final String urlString) { + try { + return new URL(urlString); + } catch (MalformedURLException e) { + final String errorMessage = String.format("Invalid URL format: %s", urlString); + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); + } + } + + + /** + * Creates a {@link GenericMessageChainProcessor} of {@link TCACEFJsonProcessor}, + * {@link TCACEFPolicyDomainFilter} and {@link TCACEFPolicyFunctionalRoleFilter}s to + * filter out messages which does not match policy domain or functional role + * + * @param cefMessage CEF Message + * @param tcaPolicy TCA Policy + * @return Message Process Context after processing filter chain + */ + public static TCACEFProcessorContext filterCEFMessage(@Nullable final String cefMessage, + @Nonnull final TCAPolicy tcaPolicy) { + + final TCACEFJsonProcessor jsonProcessor = new TCACEFJsonProcessor(); + final TCACEFPolicyDomainFilter domainFilter = new TCACEFPolicyDomainFilter(); + final TCACEFPolicyFunctionalRoleFilter functionalRoleFilter = new TCACEFPolicyFunctionalRoleFilter(); + // Create a list of message processors + final ImmutableList<AbstractMessageProcessor<TCACEFProcessorContext>> messageProcessors = + ImmutableList.of(jsonProcessor, domainFilter, functionalRoleFilter); + final TCACEFProcessorContext processorContext = new TCACEFProcessorContext(cefMessage, tcaPolicy); + // Create a message processors chain + final GenericMessageChainProcessor<TCACEFProcessorContext> tcaProcessingChain = + new GenericMessageChainProcessor<>(messageProcessors, processorContext); + // process chain + return tcaProcessingChain.processChain(); + } + + + /** + * Extracts json path values for given json Field Paths from using Json path notation. Assumes + * that values extracted are always long + * + * @param message CEF Message + * @param jsonFieldPaths Json Field Paths + * @return Map containing key as json path and values as values associated with that json path + */ + public static Map<String, List<Long>> getJsonPathValue(@Nonnull String message, @Nonnull Set<String> + jsonFieldPaths) { + + final Map<String, List<Long>> jsonFieldPathMap = new HashMap<>(); + final DocumentContext documentContext = JsonPath.parse(message); + + for (String jsonFieldPath : jsonFieldPaths) { + final List<Long> jsonFieldValues = documentContext.read(jsonFieldPath, new TypeRef<List<Long>>() { + }); + // If Json Field Values are not or empty + if (jsonFieldValues != null && !jsonFieldValues.isEmpty()) { + // Filter out all null values in the filed values list + final List<Long> nonNullValues = Lists.newLinkedList(Iterables.filter(jsonFieldValues, + Predicates.<Long>notNull())); + // If there are non null values put them in the map + if (!nonNullValues.isEmpty()) { + jsonFieldPathMap.put(jsonFieldPath, nonNullValues); + } + } + } + + return jsonFieldPathMap; + } + + /** + * Computes if any CEF Message Fields have violated any Policy Thresholds. For the same policy field path + * it applies threshold in order of their severity and record the first threshold per message field path + * + * @param messageFieldValues Field Path Values extracted from CEF Message + * @param fieldThresholds Policy Thresholds for Field Path + * @return Optional of violated threshold for a field path + */ + public static Optional<Threshold> thresholdCalculator(final List<Long> messageFieldValues, final List<Threshold> + fieldThresholds) { + // order thresholds by severity + Collections.sort(fieldThresholds, THRESHOLD_COMPARATOR); + // Now apply each threshold to field values + for (Threshold fieldThreshold : fieldThresholds) { + for (Long messageFieldValue : messageFieldValues) { + final Boolean isThresholdViolated = + fieldThreshold.getDirection().operate(messageFieldValue, fieldThreshold.getThresholdValue()); + if (isThresholdViolated) { + return Optional.of(fieldThreshold); + } + } + } + return Optional.absent(); + } + + /** + * Prioritize Threshold to be reported in case there was multiple TCA violations in a single CEF message. + * Grabs first highest priority violated threshold + * + * @param violatedThresholdsMap Map containing field Path and associated violated Thresholds + * @return First Highest priority violated threshold + */ + public static Threshold prioritizeThresholdViolations(final Map<String, Threshold> violatedThresholdsMap) { + + final List<Threshold> violatedThresholds = newArrayList(violatedThresholdsMap.values()); + + if (violatedThresholds.size() == 1) { + return violatedThresholds.get(0); + } + Collections.sort(violatedThresholds, THRESHOLD_COMPARATOR); + // Just grab the first violated threshold with highest priority + return violatedThresholds.get(0); + } + + + /** + * Creates {@link MetricsPerFunctionalRole} object which contains violated thresholds + * + * @param tcaPolicy TCA Policy + * @param violatedThreshold Violated thresholds + * @param functionalRole Functiona Role + * + * @return MetricsPerFunctionalRole object containing one highest severity violated threshold + */ + public static MetricsPerFunctionalRole createViolatedMetrics(@Nonnull final TCAPolicy tcaPolicy, + @Nonnull final Threshold violatedThreshold, + @Nonnull final String functionalRole) { + + final ArrayList<MetricsPerFunctionalRole> metricsPerFunctionalRoles = newArrayList( + Iterables.filter(tcaPolicy.getMetricsPerFunctionalRole(), new Predicate<MetricsPerFunctionalRole>() { + @Override + public boolean apply(@Nonnull MetricsPerFunctionalRole metricsPerFunctionalRole) { + return metricsPerFunctionalRole.getFunctionalRole().equals(functionalRole); + } + })); + // TCA policy must have only one metrics role per functional role + if (metricsPerFunctionalRoles.size() == 1) { + final MetricsPerFunctionalRole policyMetrics = metricsPerFunctionalRoles.get(0); + final MetricsPerFunctionalRole violatedMetrics = new MetricsPerFunctionalRole(); + violatedMetrics.setFunctionalRole(policyMetrics.getFunctionalRole()); + violatedMetrics.setPolicyScope(policyMetrics.getPolicyScope()); + violatedMetrics.setPolicyName(policyMetrics.getPolicyName()); + violatedMetrics.setPolicyVersion(policyMetrics.getPolicyVersion()); + violatedMetrics.setThresholds(ImmutableList.of(violatedThreshold)); + return violatedMetrics; + } else { + final String errorMessage = String.format("TCA Policy must contain functional Role: %s", functionalRole); + throw new MessageProcessingException(errorMessage, LOG, new IllegalStateException(errorMessage)); + } + } + + /** + * Computes threshold violations + * + * @param processorContext Filtered processor Context + * @return processor context with any threshold violations + */ + public static TCACEFProcessorContext computeThresholdViolations(final TCACEFProcessorContext processorContext) { + final TCACEFPolicyThresholdsProcessor policyThresholdsProcessor = new TCACEFPolicyThresholdsProcessor(); + return policyThresholdsProcessor.apply(processorContext); + } + + /** + * Creates {@link TCAVESResponse} object + * + * @param processorContext processor Context with violations + * @param tcaAppName TCA App Name + * + * @return TCA VES Response Message + */ + public static TCAVESResponse createNewTCAVESResponse(final TCACEFProcessorContext processorContext, + final String tcaAppName) { + + final MetricsPerFunctionalRole metricsPerFunctionalRole = processorContext.getMetricsPerFunctionalRole(); + // confirm violations are indeed present + if (metricsPerFunctionalRole == null) { + final String errorMessage = "No violations metrics. Unable to create VES Response"; + throw new MessageProcessingException(errorMessage, LOG, new IllegalArgumentException(errorMessage)); + } + + final String functionalRole = metricsPerFunctionalRole.getFunctionalRole(); + final Threshold violatedThreshold = metricsPerFunctionalRole.getThresholds().get(0); + final EventListener eventListener = processorContext.getCEFEventListener(); + final CommonEventHeader commonEventHeader = eventListener.getEvent().getCommonEventHeader(); + + final TCAVESResponse tcavesResponse = new TCAVESResponse(); + // ClosedLoopControlName included in the DCAE configuration Policy + tcavesResponse.setClosedLoopControlName(violatedThreshold.getClosedLoopControlName()); + // version included in the DCAE configuration Policy + tcavesResponse.setVersion(violatedThreshold.getVersion()); + // Generate a UUID for this output message + tcavesResponse.setRequestID(UUID.randomUUID().toString()); + // commonEventHeader.startEpochMicrosec from the received VES measurementsForVfScaling message + tcavesResponse.setClosedLoopAlarmStart(commonEventHeader.getStartEpochMicrosec()); + // Concatenate name of this DCAE instance and name for this TCA instance, separated by dot + // TODO: Find out how to get this field + tcavesResponse.setClosedLoopEventClient("DCAE_INSTANCE_ID." + tcaAppName); + + final AAI aai = new AAI(); + tcavesResponse.setAai(aai); + + // vLoadBalancer specific settings + if (isFunctionalRoleVLoadBalancer(functionalRole)) { + // Hard Coded - "VM" + tcavesResponse.setTargetType(AnalyticsConstants.LOAD_BALANCER_TCA_VES_RESPONSE_TARGET_TYPE); + // Hard Coded - "vserver.vserver-name" + tcavesResponse.setTarget(AnalyticsConstants.LOAD_BALANCER_TCA_VES_RESPONSE_TARGET); + aai.setGenericServerId(commonEventHeader.getReportingEntityName()); + } else { + // Hard Coded - "VNF" + tcavesResponse.setTargetType(AnalyticsConstants.TCA_VES_RESPONSE_TARGET_TYPE); + // Hard Coded - "generic-vnf.vnf-id" + tcavesResponse.setTarget(AnalyticsConstants.TCA_VES_RESPONSE_TARGET); + // commonEventHeader.reportingEntityName from the received VES measurementsForVfScaling message (value for + // the data element used in A&AI) + aai.setGenericVNFId(commonEventHeader.getReportingEntityName()); + } + + // Hard Coded - "DCAE" + tcavesResponse.setFrom(AnalyticsConstants.TCA_VES_RESPONSE_FROM); + // policyScope included in the DCAE configuration Policy + tcavesResponse.setPolicyScope(metricsPerFunctionalRole.getPolicyScope()); + // policyName included in the DCAE configuration Policy + tcavesResponse.setPolicyName(metricsPerFunctionalRole.getPolicyName()); + // policyVersion included in the DCAE configuration Policy + tcavesResponse.setPolicyVersion(metricsPerFunctionalRole.getPolicyVersion()); + // Hard Coded - "ONSET" + tcavesResponse.setClosedLoopEventStatus(AnalyticsConstants.TCA_VES_RESPONSE_CLOSED_LOOP_EVENT_STATUS); + + return tcavesResponse; + } + + /** + * Determines if Functional Role is vLoadBlanacer + * + * @param functionalRole functional Role to check + * + * @return return true if functional role is for vLoadBalancer + */ + private static boolean isFunctionalRoleVLoadBalancer(final String functionalRole) { + return functionalRole.equals(AnalyticsConstants.LOAD_BALANCER_FUNCTIONAL_ROLE); + } + + + /** + * Extract Domain and functional Role from processor context if present + * + * @param processorContext processor context + * @return Tuple of domain and functional role + */ + public static Pair<String, String> getDomainAndFunctionalRole(@Nullable final TCACEFProcessorContext + processorContext) { + + String domain = null; + String functionalRole = null; + + + if (processorContext != null && + processorContext.getCEFEventListener() != null && + processorContext.getCEFEventListener().getEvent() != null && + processorContext.getCEFEventListener().getEvent().getCommonEventHeader() != null) { + final CommonEventHeader commonEventHeader = processorContext.getCEFEventListener().getEvent() + .getCommonEventHeader(); + + if (commonEventHeader.getDomain() != null) { + domain = commonEventHeader.getDomain(); + } + + if (commonEventHeader.getFunctionalRole() != null) { + functionalRole = commonEventHeader.getFunctionalRole(); + } + + } + + return new ImmutablePair<>(domain, functionalRole); + + } + + /** + * Function that extracts alert message string from {@link TCAVESAlertEntity} + */ + public static final Function<TCAVESAlertEntity, String> MAP_ALERT_ENTITY_TO_ALERT_STRING_FUNCTION = + new Function<TCAVESAlertEntity, String>() { + @Override + public String apply(TCAVESAlertEntity alertEntity) { + return alertEntity == null ? null : alertEntity.getAlertMessage(); + } + }; + + /** + * Extracts alert message strings from {@link TCAVESAlertEntity} + * @param alertEntities collection of alert entities + * @return List of alert message strings + */ + public static List<String> extractAlertFromAlertEntities(final Collection<TCAVESAlertEntity> alertEntities) { + return Lists.transform(newArrayList(alertEntities), MAP_ALERT_ENTITY_TO_ALERT_STRING_FUNCTION); + } + + + /** + * Converts Runtime Arguments to {@link TCAPolicyPreferences} object + * + * @param runtimeContext CDAP Runtime Arguments + * + * @return TCA Policy Preferences + */ + public static TCAPolicy getValidatedTCAPolicyPreferences(final RuntimeContext runtimeContext) { + + final Map<String, String> runtimeArguments = runtimeContext.getRuntimeArguments(); + final TreeMap<String, String> sortedRuntimeArguments = new TreeMap<>(runtimeArguments); + + LOG.debug("Printing all Received Runtime Arguments:"); + for (Map.Entry<String, String> runtimeArgsEntry : sortedRuntimeArguments.entrySet()) { + LOG.debug("{}:{}", runtimeArgsEntry.getKey(), runtimeArgsEntry.getValue()); + } + + // extract TCA Policy Domain from Runtime Arguments + final String policyDomain = sortedRuntimeArguments.get(AnalyticsConstants.TCA_POLICY_DOMAIN_PATH); + + // create new TCA Policy object + final TCAPolicyPreferences tcaPolicyPreferences = new TCAPolicyPreferences(); + tcaPolicyPreferences.setDomain(policyDomain); + + // filter out other non relevant fields which are not related to tca policy + final Map<String, String> tcaPolicyMap = filterMapByKeyNamePrefix(sortedRuntimeArguments, + TCA_POLICY_METRICS_PER_FUNCTIONAL_ROLE_PATH); + + // determine functional Roles + final Map<String, Map<String, String>> functionalRolesMap = + extractSubTree(tcaPolicyMap, 2, 3, AnalyticsConstants.TCA_POLICY_DELIMITER); + + // create metrics per functional role list + tcaPolicyPreferences.setMetricsPerFunctionalRole( + createTCAPolicyMetricsPerFunctionalRoleList(functionalRolesMap)); + + // validate tca Policy Preferences + validateSettings(tcaPolicyPreferences, new TCAPolicyPreferencesValidator()); + + LOG.info("Printing Effective TCA Policy: {}", tcaPolicyPreferences); + + return tcaPolicyPreferences; + } + + /** + * Creates {@link TCAPolicy} Metrics per Functional Role list + * + * @param functionalRolesMap Map containing functional Roles as key and corresponding values + * + * @return List of {@link MetricsPerFunctionalRole} + */ + public static List<MetricsPerFunctionalRole> createTCAPolicyMetricsPerFunctionalRoleList( + final Map<String, Map<String, String>> functionalRolesMap) { + + // create a new metrics per functional role list + final List<MetricsPerFunctionalRole> metricsPerFunctionalRoles = new LinkedList<>(); + + for (Map.Entry<String, Map<String, String>> functionalRolesEntry : functionalRolesMap.entrySet()) { + + // create new metrics per functional role instance + final MetricsPerFunctionalRole newMetricsPerFunctionalRole = + createNewMetricsPerFunctionalRole(functionalRolesEntry); + metricsPerFunctionalRoles.add(newMetricsPerFunctionalRole); + + // determine all threshold related values + final Map<String, String> thresholdsValuesMaps = + filterMapByKeyNamePrefix(functionalRolesEntry.getValue(), + AnalyticsConstants.TCA_POLICY_THRESHOLDS_PATH_POSTFIX); + + // create a map of all threshold values + final Map<String, Map<String, String>> thresholdsMap = + extractSubTree(thresholdsValuesMaps, 1, 2, + AnalyticsConstants.TCA_POLICY_DELIMITER); + + // add thresholds to nmetrics per functional roles threshold list + for (Map<String, String> thresholdMap : thresholdsMap.values()) { + newMetricsPerFunctionalRole.getThresholds().add(createNewThreshold(thresholdMap)); + } + + } + + return metricsPerFunctionalRoles; + } + + /** + * Creates new instance of TCA Policy {@link Threshold} with values extracted from thresholdMap + * + * @param thresholdMap threshold map with threshold values + * + * @return new instance of TCA Policy Threshold + */ + public static Threshold createNewThreshold(final Map<String, String> thresholdMap) { + final Threshold threshold = new Threshold(); + threshold.setClosedLoopControlName(thresholdMap.get("policy.closedLoopControlName")); + threshold.setVersion(thresholdMap.get("policy.version")); + threshold.setFieldPath(thresholdMap.get("policy.fieldPath")); + threshold.setDirection(Direction.valueOf(thresholdMap.get("policy.direction"))); + threshold.setSeverity(EventSeverity.valueOf(thresholdMap.get("policy.severity"))); + threshold.setThresholdValue(Long.valueOf(thresholdMap.get("policy.thresholdValue"))); + return threshold; + } + + /** + * Create new {@link MetricsPerFunctionalRole} instance with policy Name, policy Version and policy Scope + * extracted from given functionalRolesEntry + * + * @param functionalRolesEntry Functional Role Entry + * + * @return new instance of MetricsPerFunctionalRole + */ + public static MetricsPerFunctionalRole createNewMetricsPerFunctionalRole( + final Map.Entry<String, Map<String, String>> functionalRolesEntry) { + // determine functional Role + final String functionalRole = functionalRolesEntry.getKey(); + // determine functional Role thresholds + final Map<String, String> metricsPerFunctionalRoleThresholdsMap = functionalRolesEntry.getValue(); + final MetricsPerFunctionalRole metricsPerFunctionalRole = new MetricsPerFunctionalRole(); + final List<Threshold> thresholds = new LinkedList<>(); + metricsPerFunctionalRole.setThresholds(thresholds); + metricsPerFunctionalRole.setFunctionalRole(functionalRole); + // bind policyName, policyVersion and policyScope + metricsPerFunctionalRole.setPolicyName(metricsPerFunctionalRoleThresholdsMap.get("policyName")); + metricsPerFunctionalRole.setPolicyVersion(metricsPerFunctionalRoleThresholdsMap.get("policyVersion")); + metricsPerFunctionalRole.setPolicyScope(metricsPerFunctionalRoleThresholdsMap.get("policyScope")); + return metricsPerFunctionalRole; + } + + /** + * Converts a flattened key/value map which has keys delimited by a given delimiter. + * The start Index and end index extract the sub-key value and returns a new map containing + * sub-keys and values. + * + * @param actualMap actual Map + * @param startIndex start index + * @param endIndex end index + * @param delimiter delimiter + * + * @return Map with new sub tree map + */ + public static Map<String, Map<String, String>> extractSubTree( + final Map<String, String> actualMap, int startIndex, int endIndex, String delimiter) { + + final SortedMap<String, Map<String, String>> subTreeMap = new TreeMap<>(); + + // iterate over actual map entries + for (Map.Entry<String, String> actualMapEntry : actualMap.entrySet()) { + final String actualMapKey = actualMapEntry.getKey(); + final String actualMapValue = actualMapEntry.getValue(); + + // determine delimiter start and end index + final int keyStartIndex = StringUtils.ordinalIndexOf(actualMapKey, delimiter, startIndex); + final int keyEndIndex = StringUtils.ordinalIndexOf(actualMapKey, delimiter, endIndex); + final int keyLength = actualMapKey.length(); + + // extract sub-tree map + if (keyStartIndex != -1 && keyEndIndex != -1 && keyEndIndex > keyStartIndex && keyLength > keyEndIndex) { + final String thresholdKey = actualMapKey.substring(keyStartIndex + 1, keyEndIndex); + final Map<String, String> existingThresholdMap = subTreeMap.get(thresholdKey); + final String subMapKey = actualMapKey.substring(keyEndIndex + 1, keyLength); + if (existingThresholdMap == null) { + Map<String, String> newThresholdMap = new LinkedHashMap<>(); + newThresholdMap.put(subMapKey, actualMapValue); + subTreeMap.put(thresholdKey, newThresholdMap); + } else { + existingThresholdMap.put(subMapKey, actualMapValue); + } + + } + } + + return subTreeMap; + + } + + + /** + * Provides a view of underlying map that filters out entries with keys starting with give prefix + * + * @param actualMap Target map that needs to be filtered + * @param keyNamePrefix key prefix + * + * @return a view of actual map which only show entries which have give prefix + */ + public static Map<String, String> filterMapByKeyNamePrefix(final Map<String, String> actualMap, + final String keyNamePrefix) { + return Maps.filterKeys(actualMap, + new Predicate<String>() { + @Override + public boolean apply(@Nullable String key) { + return key != null && key.startsWith(keyNamePrefix); + } + }); + } + + +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/validator/TCAAppConfigValidator.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/validator/TCAAppConfigValidator.java new file mode 100644 index 0000000..05b0331 --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/validator/TCAAppConfigValidator.java @@ -0,0 +1,60 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.validator; + +import org.openecomp.dcae.analytics.common.cdap.validation.CDAPAppSettingsValidator; +import org.openecomp.dcae.analytics.common.validation.GenericValidationResponse; +import org.openecomp.dcae.analytics.tca.settings.TCAAppConfig; + +import static org.openecomp.dcae.analytics.common.utils.ValidationUtils.isEmpty; + +/** + * <p> + * TCA App Config Validator validates any TCA App Config parameter values + * </p> + * + * @author Rajiv Singla. Creation Date: 10/24/2016. + */ +public class TCAAppConfigValidator implements CDAPAppSettingsValidator<TCAAppConfig, + GenericValidationResponse<TCAAppConfig>> { + + @Override + public GenericValidationResponse<TCAAppConfig> validateAppSettings(TCAAppConfig tcaAppConfig) { + + final GenericValidationResponse<TCAAppConfig> validationResponse = new GenericValidationResponse<>(); + + if (isEmpty(tcaAppConfig.getTcaSubscriberOutputStreamName())) { + validationResponse.addErrorMessage("tcaSubscriberOutputStreamName", + "tcaSubscriberOutputStreamName must be present"); + } + + if (isEmpty(tcaAppConfig.getTcaVESMessageStatusTableName())) { + validationResponse.addErrorMessage("tcaVESMessageStatusTableName", + "tcaVESMessageStatusTableName must be present"); + } + if (isEmpty(tcaAppConfig.getTcaVESAlertsTableName())) { + validationResponse.addErrorMessage("tcaVESAlertsTableName", + "tcaVESAlertsTableName must be present"); + } + + return validationResponse; + } +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/validator/TCAPolicyPreferencesValidator.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/validator/TCAPolicyPreferencesValidator.java new file mode 100644 index 0000000..0ff0eb6 --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/validator/TCAPolicyPreferencesValidator.java @@ -0,0 +1,94 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.validator; + +import org.openecomp.dcae.analytics.common.cdap.validation.CDAPAppSettingsValidator; +import org.openecomp.dcae.analytics.common.validation.GenericValidationResponse; +import org.openecomp.dcae.analytics.model.domain.cef.EventSeverity; +import org.openecomp.dcae.analytics.model.domain.policy.tca.Direction; +import org.openecomp.dcae.analytics.model.domain.policy.tca.MetricsPerFunctionalRole; +import org.openecomp.dcae.analytics.model.domain.policy.tca.Threshold; +import org.openecomp.dcae.analytics.tca.settings.TCAPolicyPreferences; +import org.openecomp.dcae.analytics.tca.utils.TCAUtils; + +import java.util.List; + +import static org.openecomp.dcae.analytics.common.utils.ValidationUtils.isEmpty; + +/** + * Validates TCA Policy Preferences + * <p> + * @author Rajiv Singla. Creation Date: 11/29/2016. + */ +public class TCAPolicyPreferencesValidator implements CDAPAppSettingsValidator<TCAPolicyPreferences, + GenericValidationResponse<TCAPolicyPreferences>> { + + @Override + public GenericValidationResponse<TCAPolicyPreferences> validateAppSettings( + final TCAPolicyPreferences tcaPolicyPreferences) { + + final GenericValidationResponse<TCAPolicyPreferences> validationResponse = new GenericValidationResponse<>(); + + // validate TCA Policy must domain present + final String domain = tcaPolicyPreferences.getDomain(); + if (isEmpty(domain)) { + validationResponse.addErrorMessage("domain", "TCA Policy must have only one domain present"); + } + + // validate TCA Policy must have at least one functional role + final List<String> policyFunctionalRoles = TCAUtils.getPolicyFunctionalRoles(tcaPolicyPreferences); + if (policyFunctionalRoles.size() <= 0) { + validationResponse.addErrorMessage("metricsPerFunctionalRoles", + "TCA Policy must have at least one or more functional roles"); + } + + final List<MetricsPerFunctionalRole> metricsPerFunctionalRoles = + tcaPolicyPreferences.getMetricsPerFunctionalRole(); + + // validate each Functional Role must have at least one threshold + for (MetricsPerFunctionalRole metricsPerFunctionalRole : metricsPerFunctionalRoles) { + if (metricsPerFunctionalRole.getThresholds().size() <= 0) { + validationResponse.addErrorMessage("thresholds", + "TCA Policy Functional Role must have at least one threshold. " + + "Functional Role causing this validation error:" + metricsPerFunctionalRole); + } + } + + // validate each threshold must have non null - fieldPath, thresholdValue, direction and severity + for (MetricsPerFunctionalRole metricsPerFunctionalRole : metricsPerFunctionalRoles) { + final List<Threshold> functionalRoleThresholds = metricsPerFunctionalRole.getThresholds(); + for (Threshold functionalRoleThreshold : functionalRoleThresholds) { + final String fieldPath = functionalRoleThreshold.getFieldPath(); + final Long thresholdValue = functionalRoleThreshold.getThresholdValue(); + final Direction direction = functionalRoleThreshold.getDirection(); + final EventSeverity severity = functionalRoleThreshold.getSeverity(); + if (isEmpty(fieldPath) || thresholdValue == null || direction == null || severity == null) { + validationResponse.addErrorMessage("threshold", + "TCA Policy threshold must have fieldPath, thresholdValue, direction and severity present." + + "Threshold causing this validation error:" + functionalRoleThreshold); + } + } + } + + + return validationResponse; + } +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/validator/TCAPreferencesValidator.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/validator/TCAPreferencesValidator.java new file mode 100644 index 0000000..a7cbbf5 --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/validator/TCAPreferencesValidator.java @@ -0,0 +1,63 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.validator; + +import org.openecomp.dcae.analytics.common.cdap.validation.CDAPAppSettingsValidator; +import org.openecomp.dcae.analytics.common.validation.GenericValidationResponse; +import org.openecomp.dcae.analytics.tca.settings.TCAAppPreferences; + +import static org.openecomp.dcae.analytics.common.utils.ValidationUtils.isEmpty; + +/** + * + * @author Rajiv Singla. Creation Date: 11/3/2016. + */ +public class TCAPreferencesValidator implements CDAPAppSettingsValidator<TCAAppPreferences, + GenericValidationResponse<TCAAppPreferences>> { + + @Override + public GenericValidationResponse<TCAAppPreferences> validateAppSettings(TCAAppPreferences appPreferences) { + + final GenericValidationResponse<TCAAppPreferences> validationResponse = new GenericValidationResponse<>(); + + // subscriber validations + final String subscriberHostName = appPreferences.getSubscriberHostName(); + if (isEmpty(subscriberHostName)) { + validationResponse.addErrorMessage("subscriberHostName", "Subscriber host name must be present"); + } + final String subscriberTopicName = appPreferences.getSubscriberTopicName(); + if (isEmpty(subscriberTopicName)) { + validationResponse.addErrorMessage("subscriberTopicName", "Subscriber topic name must be present"); + } + + // publisher validations + final String publisherHostName = appPreferences.getPublisherHostName(); + if (isEmpty(publisherHostName)) { + validationResponse.addErrorMessage("publisherHostName", "Publisher host name must be present"); + } + final String publisherTopicName = appPreferences.getPublisherTopicName(); + if (isEmpty(publisherTopicName)) { + validationResponse.addErrorMessage("publisherTopicName", "Publisher topic name must be present"); + } + + return validationResponse; + } +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/worker/TCADMaaPMRPublisherJob.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/worker/TCADMaaPMRPublisherJob.java new file mode 100644 index 0000000..4a9a7ab --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/worker/TCADMaaPMRPublisherJob.java @@ -0,0 +1,189 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.worker; + +import co.cask.cdap.api.TxRunnable; +import co.cask.cdap.api.common.Bytes; +import co.cask.cdap.api.data.DatasetContext; +import co.cask.cdap.api.dataset.lib.CloseableIterator; +import co.cask.cdap.api.dataset.lib.KeyValue; +import co.cask.cdap.api.dataset.lib.ObjectMappedTable; +import co.cask.cdap.api.metrics.Metrics; +import co.cask.cdap.api.worker.WorkerContext; +import com.google.common.base.Joiner; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.openecomp.dcae.analytics.common.CDAPMetricsConstants; +import org.openecomp.dcae.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.openecomp.dcae.analytics.common.utils.HTTPUtils; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRPublisherResponse; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisher; +import org.openecomp.dcae.analytics.tca.persistance.TCAVESAlertEntity; +import org.openecomp.dcae.analytics.tca.persistance.TCAVESAlertsPersister; +import org.openecomp.dcae.analytics.tca.utils.TCAUtils; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.Job; +import org.quartz.JobDataMap; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.quartz.PersistJobDataAfterExecution; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Date; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.CDAP_ALERTS_TABLE_VARIABLE_NAME; +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.DMAAP_METRICS_VARIABLE_NAME; +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.DMAAP_PUBLISHER_VARIABLE_NAME; +import static org.openecomp.dcae.analytics.common.AnalyticsConstants.WORKER_CONTEXT_VARIABLE_NAME; + +/** + * Quartz Job that will monitor any new alert messages in given TCA Alerts table and if any found publish them to + * DMaaP MR topic + *<p> + * @author Rajiv Singla. Creation Date: 11/17/2016. + */ +@DisallowConcurrentExecution +@PersistJobDataAfterExecution +@SuppressFBWarnings("SIC_INNER_SHOULD_BE_STATIC_ANON") +public class TCADMaaPMRPublisherJob implements Job { + + private static final Logger LOG = LoggerFactory.getLogger(TCADMaaPMRPublisherJob.class); + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + + LOG.debug("Starting DMaaP MR Topic Publisher fetch Job. Next firing time will be: {}", + jobExecutionContext.getNextFireTime()); + + // Get Job Data Map + final JobDataMap jobDataMap = jobExecutionContext.getMergedJobDataMap(); + + // Fetch all Job Params from Job Data Map + final String cdapAlertsTableName = jobDataMap.getString(CDAP_ALERTS_TABLE_VARIABLE_NAME); + final WorkerContext workerContext = (WorkerContext) jobDataMap.get(WORKER_CONTEXT_VARIABLE_NAME); + final DMaaPMRPublisher publisher = (DMaaPMRPublisher) jobDataMap.get(DMAAP_PUBLISHER_VARIABLE_NAME); + final Metrics metrics = (Metrics) jobDataMap.get(DMAAP_METRICS_VARIABLE_NAME); + + LOG.debug("Start looking for new message in Alerts Table: {}", cdapAlertsTableName); + + // Get new alerts from alerts table + final Map<String, TCAVESAlertEntity> newAlertsMap = getNewAlertsMap(cdapAlertsTableName, workerContext); + + // If no new alerts are found - nothing to publish + if (newAlertsMap.isEmpty()) { + LOG.debug("No new alerts found in Alerts Table name: {}. Nothing to Publisher....", cdapAlertsTableName); + metrics.count(CDAPMetricsConstants.TCA_PUBLISHER_NO_NEW_ALERTS_LOOKUP_METRIC, 1); + return; + } + + final int newAlertsCount = newAlertsMap.size(); + LOG.debug("Found new alerts in Alerts Table name: {}. No of new alerts: {}", cdapAlertsTableName, + newAlertsCount); + metrics.count(CDAPMetricsConstants.TCA_PUBLISHER_NEW_ALERTS_METRIC, newAlertsCount); + + // Get alert message strings from alert Entities + final List<String> newAlertsMessages = TCAUtils.extractAlertFromAlertEntities(newAlertsMap.values()); + + // Publish messages to DMaaP MR Topic + + try { + + final DMaaPMRPublisherResponse publisherResponse = publisher.publish(newAlertsMessages); + + final Integer responseCode = publisherResponse.getResponseCode(); + final String responseMessage = publisherResponse.getResponseMessage(); + final int pendingMessagesCount = publisherResponse.getPendingMessagesCount(); + + LOG.debug("Publisher Response Code: {}, Publisher message: {}, Pending Messages Count: {}", responseCode, + responseMessage, pendingMessagesCount); + + if (HTTPUtils.isSuccessfulResponseCode(responseCode)) { + LOG.debug("Successfully Published alerts to DMaaP MR Topic."); + metrics.count(CDAPMetricsConstants.TCA_PUBLISHER_SUCCESSFUL_DMAAP_RESPONSE_METRIC, 1); + } else { + LOG.warn("Unable to publish alerts to DMaaP MR Topic. Publisher will try to send it later...."); + metrics.count(CDAPMetricsConstants.TCA_PUBLISHER_UNSUCCESSFUL_DMAAP_RESPONSE_METRIC, 1); + } + + } catch (DCAEAnalyticsRuntimeException e) { + LOG.error("Exception while publishing messages to DMaaP MR Topic: {}", e); + } finally { + // delete send message from alerts table + deleteAlertsByKey(cdapAlertsTableName, workerContext, newAlertsMap.keySet(), metrics); + } + + LOG.debug("Finished DMaaP MR Topic Publisher fetch Job."); + + } + + /** + * Gets New Messages from alerts table as Map with row keys as keys and {@link TCAVESAlertEntity} as values + * + * @param cdapAlertsTableName alerts table name + * @param workerContext worker context + * @return Map with row keys as keys and {@link TCAVESAlertEntity} as values + */ + private Map<String, TCAVESAlertEntity> getNewAlertsMap(final String cdapAlertsTableName, + final WorkerContext workerContext) { + final Map<String, TCAVESAlertEntity> newAlertsMap = new LinkedHashMap<>(); + workerContext.execute(new TxRunnable() { + @Override + public void run(DatasetContext context) throws Exception { + final ObjectMappedTable<TCAVESAlertEntity> alertsTable = context.getDataset(cdapAlertsTableName); + final Date currentTime = new Date(); + final String rowKey = TCAVESAlertsPersister.createRowKey(currentTime); + final CloseableIterator<KeyValue<byte[], TCAVESAlertEntity>> scan = alertsTable.scan(null, rowKey); + while (scan.hasNext()) { + final KeyValue<byte[], TCAVESAlertEntity> alertEntityKeyValue = scan.next(); + newAlertsMap.put(Bytes.toString(alertEntityKeyValue.getKey()), alertEntityKeyValue.getValue()); + } + } + }); + return newAlertsMap; + } + + /** + * Deletes rows in Alerts table for give rowKeys + * + * @param cdapAlertsTableName CDAP Alerts Table Name + * @param workerContext Worker Context + * @param rowKeys Row Key Set + * @param metrics CDAP metrics + */ + private void deleteAlertsByKey(final String cdapAlertsTableName, final WorkerContext workerContext, + final Set<String> rowKeys, final Metrics metrics) { + LOG.debug("Deleting Published Alerts from alerts table with rowKeys: {}", Joiner.on(",").join(rowKeys)); + workerContext.execute(new TxRunnable() { + @Override + public void run(DatasetContext context) throws Exception { + final ObjectMappedTable<TCAVESAlertEntity> alertsTable = context.getDataset(cdapAlertsTableName); + for (String rowKey : rowKeys) { + alertsTable.delete(rowKey); + metrics.count(CDAPMetricsConstants.TCA_PUBLISHER_DELETED_ALERTS_METRIC, 1); + } + } + }); + } +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/worker/TCADMaaPMRSubscriberJob.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/worker/TCADMaaPMRSubscriberJob.java new file mode 100644 index 0000000..7212527 --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/worker/TCADMaaPMRSubscriberJob.java @@ -0,0 +1,175 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.worker; + +import co.cask.cdap.api.metrics.Metrics; +import co.cask.cdap.api.worker.WorkerContext; +import com.google.common.base.Optional; +import com.google.common.base.Stopwatch; +import org.openecomp.dcae.analytics.common.AnalyticsConstants; +import org.openecomp.dcae.analytics.common.CDAPMetricsConstants; +import org.openecomp.dcae.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.openecomp.dcae.analytics.common.utils.HTTPUtils; +import org.openecomp.dcae.analytics.dmaap.domain.response.DMaaPMRSubscriberResponse; +import org.openecomp.dcae.analytics.dmaap.service.subscriber.DMaaPMRSubscriber; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.Job; +import org.quartz.JobDataMap; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.quartz.PersistJobDataAfterExecution; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.List; + +import static java.lang.String.format; + +/** + * Quartz Job which polls DMaaP MR VES Collector Topic for messages and writes them to + * a given CDAP Stream + * + * @author Rajiv Singla. Creation Date: 10/24/2016. + */ +@DisallowConcurrentExecution +@PersistJobDataAfterExecution +public class TCADMaaPMRSubscriberJob implements Job { + + private static final Logger LOG = LoggerFactory.getLogger(TCADMaaPMRSubscriberJob.class); + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + + LOG.debug("Starting DMaaP MR Topic Subscriber fetch Job. Next firing time will be: {}", + jobExecutionContext.getNextFireTime()); + + // Get Job Data Map + final JobDataMap jobDataMap = jobExecutionContext.getMergedJobDataMap(); + + // Fetch all Job Params from Job Data Map + final String cdapStreamName = jobDataMap.getString(AnalyticsConstants.CDAP_STREAM_VARIABLE_NAME); + final WorkerContext workerContext = + (WorkerContext) jobDataMap.get(AnalyticsConstants.WORKER_CONTEXT_VARIABLE_NAME); + final DMaaPMRSubscriber subscriber = + (DMaaPMRSubscriber) jobDataMap.get(AnalyticsConstants.DMAAP_SUBSCRIBER_VARIABLE_NAME); + final Metrics metrics = (Metrics) jobDataMap.get(AnalyticsConstants.DMAAP_METRICS_VARIABLE_NAME); + + final Optional<DMaaPMRSubscriberResponse> subscriberResponseOptional = + getSubscriberResponse(subscriber, metrics); + + // If response is not present, unable to proceed + if (!subscriberResponseOptional.isPresent()) { + return; + } + + final DMaaPMRSubscriberResponse subscriberResponse = subscriberResponseOptional.get(); + + // If response code return by the subscriber call is not successful, unable to do proceed + if (!HTTPUtils.isSuccessfulResponseCode(subscriberResponse.getResponseCode())) { + LOG.error("Subscriber was unable to fetch messages properly. Subscriber Response Code: {} " + + "Unable to proceed further....", subscriberResponse.getResponseCode()); + metrics.count(CDAPMetricsConstants.TCA_SUBSCRIBER_UNSUCCESSFUL_RESPONSES_METRIC, 1); + return; + } + + LOG.debug("Subscriber HTTP Response Status Code match successful: {}", subscriberResponse, + HTTPUtils.HTTP_SUCCESS_STATUS_CODE); + + final List<String> actualMessages = subscriberResponse.getFetchedMessages(); + + // If there are no message returned during from Subscriber, nothing to write to CDAP Stream + if (actualMessages.isEmpty()) { + LOG.debug("Subscriber Response has no messages. Nothing to write to CDAP stream...."); + metrics.count(CDAPMetricsConstants.TCA_SUBSCRIBER_RESPONSES_WITH_NO_MESSAGES_METRIC, 1); + return; + } + + LOG.debug("DMaaP MR Subscriber found new messages in DMaaP Topic. Message count: {}", actualMessages.size()); + metrics.count(CDAPMetricsConstants.TCA_SUBSCRIBER_TOTAL_MESSAGES_PROCESSED_METRIC, actualMessages.size()); + + // Write message to CDAP Stream using Stream Batch Writer + LOG.debug("Writing message to CDAP Stream: {}, Message Count: {}", cdapStreamName, actualMessages.size()); + try { + + for (String message : actualMessages) { + workerContext.write(cdapStreamName, message); + } + + } catch (IOException e) { + metrics.count(CDAPMetricsConstants.TCA_SUBSCRIBER_FAILURE_TO_WRITE_TO_STREAM_METRIC, 1); + final String errorMessage = + format("Error while DMaaP message router subscriber attempting to write to CDAP Stream: %s, " + + "Exception: %s", cdapStreamName, e); + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); + } + + LOG.debug("DMaaP MR Subscriber successfully finished writing messages to CDAP Stream: {}, Message count: {}", + cdapStreamName, actualMessages.size()); + } + + + /** + * Get Subscriber response and records time taken to fetch messages. Returns Optional.None if Subscriber response + * is null or response status code is not present + * + * @param subscriber - DMaaP Subscriber + * @param metrics - CDAP Metrics collector + * + * @return - Optional of Subscriber Response + */ + private static Optional<DMaaPMRSubscriberResponse> getSubscriberResponse(final DMaaPMRSubscriber subscriber, + final Metrics metrics) { + + // Check how long it took for subscriber to respond + final Stopwatch stopwatch = new Stopwatch(); + stopwatch.start(); + + DMaaPMRSubscriberResponse subscriberResponse = null; + // Fetch messages from DMaaP MR Topic + try { + subscriberResponse = subscriber.fetchMessages(); + } catch (DCAEAnalyticsRuntimeException e) { + LOG.error("Error while fetching messages for DMaaP MR Topic: {}", e); + } + + stopwatch.stop(); + final long subscriberResponseTimeMS = stopwatch.elapsedMillis(); + + // If response is null is null or response code is null, unable to proceed nothing to do + if (subscriberResponse == null || subscriberResponse.getResponseCode() == null) { + LOG.error("Subscriber Response is null or subscriber Response code is null. Unable to proceed further..."); + return Optional.absent(); + } + + LOG.debug("Subscriber Response:{}, Subscriber HTTP Response Status Code {}, Subscriber Response Time(ms): {}", + subscriberResponse, subscriberResponse.getResponseCode(), subscriberResponseTimeMS); + + // Record subscriber response time + metrics.gauge(CDAPMetricsConstants.TCA_SUBSCRIBER_RESPONSE_TIME_MS_METRIC, subscriberResponseTimeMS); + + // Record all response count from subscriber + metrics.count(CDAPMetricsConstants.TCA_SUBSCRIBER_ALL_RESPONSES_COUNT_METRIC, 1); + + return Optional.of(subscriberResponse); + } + +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/worker/TCADMaaPMockSubscriberWorker.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/worker/TCADMaaPMockSubscriberWorker.java new file mode 100644 index 0000000..d8d1968 --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/worker/TCADMaaPMockSubscriberWorker.java @@ -0,0 +1,139 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.worker; + +import co.cask.cdap.api.annotation.Property; +import co.cask.cdap.api.worker.AbstractWorker; +import co.cask.cdap.api.worker.WorkerContext; +import com.fasterxml.jackson.core.type.TypeReference; +import org.openecomp.dcae.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.openecomp.dcae.analytics.model.domain.cef.EventListener; +import org.openecomp.dcae.analytics.tca.settings.TCAAppPreferences; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +import static org.openecomp.dcae.analytics.tca.utils.TCAUtils.getValidatedTCAAppPreferences; +import static org.openecomp.dcae.analytics.tca.utils.TCAUtils.readValue; +import static org.openecomp.dcae.analytics.tca.utils.TCAUtils.writeValueAsString; + +/** + * CDAP Worker which mocks fetching VES Messages from DMaaP MR topic. + * The mock instead of making DMaaP MR calls will actually take messages + * from file and send them to stream at subscriber polling interval + * + * TODO: To be removed before going to production - only for testing purposes + * + * @author Rajiv Singla. Creation Date: 11/4/2016. + */ +public class TCADMaaPMockSubscriberWorker extends AbstractWorker { + + private static final Logger LOG = LoggerFactory.getLogger(TCADMaaPMockSubscriberWorker.class); + + // TODO: Remove this file before going to production - only for mocking purposes + private static final String MOCK_MESSAGE_FILE_LOCATION = "ves_mock_messages.json"; + private static final TypeReference<List<EventListener>> EVENT_LISTENER_TYPE_REFERENCE = + new TypeReference<List<EventListener>>() { + }; + + private TCAAppPreferences tcaAppPreferences; + private boolean stopSendingMessages; + @Property + private final String tcaSubscriberOutputStreamName; + + public TCADMaaPMockSubscriberWorker(final String tcaSubscriberOutputStreamName) { + this.tcaSubscriberOutputStreamName = tcaSubscriberOutputStreamName; + } + + @Override + public void configure() { + setName("MockTCASubscriberWorker"); + setDescription("Writes Mocked VES messages to CDAP Stream"); + LOG.info("Configuring Mock TCA MR DMaaP Subscriber worker with name: {}", "MockTCASubscriberWorker"); + } + + @Override + public void initialize(WorkerContext context) throws Exception { + super.initialize(context); + + final TCAAppPreferences tcaAppPreferences = getValidatedTCAAppPreferences(context); + LOG.info("Initializing Mock TCA MR DMaaP Subscriber worker with preferences: {}", tcaAppPreferences); + this.tcaAppPreferences = tcaAppPreferences; + this.stopSendingMessages = false; + } + + + @Override + public void run() { + final Integer subscriberPollingInterval = tcaAppPreferences.getSubscriberPollingInterval(); + LOG.debug("Mock TCA Subscriber Polling interval: {}", subscriberPollingInterval); + + final InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream + (MOCK_MESSAGE_FILE_LOCATION); + + if (resourceAsStream == null) { + LOG.error("Unable to find file at location: {}", MOCK_MESSAGE_FILE_LOCATION); + throw new DCAEAnalyticsRuntimeException("Unable to find file", LOG, new FileNotFoundException()); + } + + + try { + List<EventListener> eventListeners = readValue(resourceAsStream, EVENT_LISTENER_TYPE_REFERENCE); + + final int totalMessageCount = eventListeners.size(); + LOG.debug("Mock message count to be written to cdap stream: ()", totalMessageCount); + + int i = 1; + for (EventListener eventListener : eventListeners) { + if (stopSendingMessages) { + LOG.debug("Stop sending messages......"); + break; + } + final String eventListenerString = writeValueAsString(eventListener); + LOG.debug("=======>> Writing message to cdap stream no: {} of {}", i, totalMessageCount); + getContext().write(tcaSubscriberOutputStreamName, eventListenerString); + i++; + try { + Thread.sleep(subscriberPollingInterval); + } catch (InterruptedException e) { + LOG.error("Error while sleeping"); + } + } + + LOG.debug("Finished writing mock messages to CDAP Stream"); + + } catch (IOException e) { + LOG.error("Error while parsing json file"); + throw new DCAEAnalyticsRuntimeException("Error while parsing mock json file", LOG, e); + } + + + } + + @Override + public void stop() { + stopSendingMessages = true; + } +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/worker/TCADMaaPPublisherWorker.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/worker/TCADMaaPPublisherWorker.java new file mode 100644 index 0000000..49f98fc --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/worker/TCADMaaPPublisherWorker.java @@ -0,0 +1,230 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.worker; + +import co.cask.cdap.api.annotation.Property; +import co.cask.cdap.api.metrics.Metrics; +import co.cask.cdap.api.worker.AbstractWorker; +import co.cask.cdap.api.worker.WorkerContext; +import org.openecomp.dcae.analytics.common.AnalyticsConstants; +import org.openecomp.dcae.analytics.common.CDAPComponentsConstants; +import org.openecomp.dcae.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.openecomp.dcae.analytics.dmaap.DMaaPMRFactory; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRPublisherConfig; +import org.openecomp.dcae.analytics.dmaap.service.publisher.DMaaPMRPublisher; +import org.openecomp.dcae.analytics.model.util.AnalyticsModelIOUtils; +import org.openecomp.dcae.analytics.tca.settings.TCAAppPreferences; +import org.openecomp.dcae.analytics.tca.utils.AppPreferencesToPublisherConfigMapper; +import org.openecomp.dcae.analytics.tca.utils.TCAUtils; +import org.quartz.JobBuilder; +import org.quartz.JobDataMap; +import org.quartz.JobDetail; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.quartz.SimpleScheduleBuilder; +import org.quartz.SimpleTrigger; +import org.quartz.TriggerBuilder; +import org.quartz.impl.StdSchedulerFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Properties; +import java.util.concurrent.atomic.AtomicBoolean; + +import static java.lang.String.format; + +/** + * TCA DMaaP Publisher will monitor alerts table at regular intervals and publish any alerts to DMaaP MR Publishing + * Topic + * <p> + * @author Rajiv Singla. Creation Date: 11/16/2016. + */ +public class TCADMaaPPublisherWorker extends AbstractWorker { + + private static final Logger LOG = LoggerFactory.getLogger(TCADMaaPPublisherWorker.class); + + /** + * DMaaP MR Publisher + */ + private DMaaPMRPublisher publisher; + /** + * Quartz Scheduler + */ + private Scheduler scheduler; + /** + * Determines if scheduler is shutdown + */ + private AtomicBoolean isSchedulerShutdown; + /** + * Store runtime metrics + */ + private Metrics metrics; + + @Property + private final String tcaVESAlertsTableName; + + public TCADMaaPPublisherWorker(final String tcaVESAlertsTableName) { + this.tcaVESAlertsTableName = tcaVESAlertsTableName; + } + + @Override + public void configure() { + // configure + setName(CDAPComponentsConstants.TCA_FIXED_DMAAP_PUBLISHER_WORKER); + setDescription(CDAPComponentsConstants.TCA_FIXED_DMAAP_PUBLISHER_DESCRIPTION_WORKER); + LOG.debug("Configuring TCA MR DMaaP Publisher worker with name: {}", + CDAPComponentsConstants.TCA_FIXED_DMAAP_PUBLISHER_WORKER); + } + + + @Override + public void initialize(WorkerContext context) throws Exception { + super.initialize(context); + + // Parse runtime arguments + final TCAAppPreferences tcaAppPreferences = TCAUtils.getValidatedTCAAppPreferences(context); + + LOG.info("Initializing TCA MR DMaaP Publisher worker with preferences: {}", tcaAppPreferences); + + // Map TCA App Preferences to DMaaP MR Publisher Config + final DMaaPMRPublisherConfig publisherConfig = AppPreferencesToPublisherConfigMapper.map(tcaAppPreferences); + + LOG.info("TCA DMaaP MR Publisher worker will be polling TCA Alerts Table Name: {}", tcaVESAlertsTableName); + + // Create an instance of DMaaP MR Publisher + LOG.debug("Creating an instance of DMaaP Publisher"); + publisher = DMaaPMRFactory.create().createPublisher(publisherConfig); + + // initialize a new Quartz scheduler + initializeScheduler(tcaAppPreferences); + // initialize scheduler state + isSchedulerShutdown = new AtomicBoolean(true); + } + + + @Override + public void run() { + // Start Publisher scheduler + try { + scheduler.start(); + isSchedulerShutdown.getAndSet(false); + + } catch (SchedulerException e) { + final String errorMessage = + format("Error while starting TCA DMaaP MR Publisher scheduler: %s", e.toString()); + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); + } + + LOG.info("TCA DMaaP MR Publisher Scheduler started successfully"); + + // indefinite loop which wakes up and confirms scheduler is indeed running + while (!isSchedulerShutdown.get()) { + try { + + Thread.sleep(AnalyticsConstants.TCA_DEFAULT_WORKER_SHUTDOWN_CHECK_INTERVAL_MS); + + } catch (InterruptedException e) { + + final String errorMessage = + format("Error while checking TCA DMaaP MR Publisher worker status: %s", e); + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); + } + } + + LOG.info("Finished execution of TCA DMaaP MR Publisher worker thread"); + + } + + @Override + public void stop() { + // Stop Publisher - which will flush any batch messages if present + try { + publisher.close(); + } catch (Exception e) { + + final String errorMessage = format("Error while shutting down DMaaP MR Publisher: %s", e); + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); + + } + // Stop Publisher scheduler + try { + + LOG.info("Shutting TCA DMaaP MR Publisher Scheduler"); + + scheduler.shutdown(); + isSchedulerShutdown.getAndSet(true); + + } catch (SchedulerException e) { + + final String errorMessage = + format("Error while shutting down TCA DMaaP MR Publisher scheduler: %s", e); + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); + } + } + + + /** + * Initializes a scheduler instance for DMaaP MR Publisher Job + * + * @throws SchedulerException SchedulerException + */ + private void initializeScheduler(TCAAppPreferences tcaAnalyticsAppConfig) throws SchedulerException { + + // Initialize a new Quartz Standard scheduler - settings settings are in quartz-publisher.properties file + final StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory(); + final String quartzPublisherPropertiesFileName = AnalyticsConstants.TCA_QUARTZ_PUBLISHER_PROPERTIES_FILE_NAME; + LOG.debug("Configuring quartz scheduler for TCA DMaaP MR Publisher with properties file: {}", + quartzPublisherPropertiesFileName); + final Properties publisherProperties = + AnalyticsModelIOUtils.loadPropertiesFile(quartzPublisherPropertiesFileName); + stdSchedulerFactory.initialize(publisherProperties); + scheduler = stdSchedulerFactory.getScheduler(); + + // Create a new JobDataMap containing information required by TCA DMaaP Publisher Job + final JobDataMap jobDataMap = new JobDataMap(); + jobDataMap.put(AnalyticsConstants.CDAP_ALERTS_TABLE_VARIABLE_NAME, tcaVESAlertsTableName); + jobDataMap.put(AnalyticsConstants.WORKER_CONTEXT_VARIABLE_NAME, getContext()); + jobDataMap.put(AnalyticsConstants.DMAAP_PUBLISHER_VARIABLE_NAME, publisher); + jobDataMap.put(AnalyticsConstants.DMAAP_METRICS_VARIABLE_NAME, metrics); + + // Create a new job detail + final JobDetail jobDetail = JobBuilder.newJob(TCADMaaPMRPublisherJob.class) + .withIdentity(AnalyticsConstants.TCA_DMAAP_PUBLISHER_QUARTZ_JOB_NAME, + AnalyticsConstants.TCA_QUARTZ_GROUP_NAME) + .usingJobData(jobDataMap).build(); + + // Create a new scheduling builder + final Integer publisherPollingInterval = tcaAnalyticsAppConfig.getPublisherPollingInterval(); + final SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule() + .withIntervalInMilliseconds(publisherPollingInterval) // job will use custom polling schedule + .repeatForever(); // repeats while worker is running + + // Create a trigger for the TCA Publisher Job + final SimpleTrigger simpleTrigger = TriggerBuilder.newTrigger() + .withIdentity(AnalyticsConstants.TCA_DMAAP_PUBLISHER_QUARTZ_TRIGGER_NAME, + AnalyticsConstants.TCA_QUARTZ_GROUP_NAME) + .startNow() // job starts right away + .withSchedule(simpleScheduleBuilder).build(); + + scheduler.scheduleJob(jobDetail, simpleTrigger); + LOG.info("Initialized TCA DMaaP MR Publisher Scheduler"); + } +} diff --git a/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/worker/TCADMaaPSubscriberWorker.java b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/worker/TCADMaaPSubscriberWorker.java new file mode 100644 index 0000000..8d773e4 --- /dev/null +++ b/dcae-analytics-tca/src/main/java/org/openecomp/dcae/analytics/tca/worker/TCADMaaPSubscriberWorker.java @@ -0,0 +1,226 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.worker; + +import co.cask.cdap.api.annotation.Property; +import co.cask.cdap.api.metrics.Metrics; +import co.cask.cdap.api.worker.AbstractWorker; +import co.cask.cdap.api.worker.WorkerContext; +import org.openecomp.dcae.analytics.common.AnalyticsConstants; +import org.openecomp.dcae.analytics.common.CDAPComponentsConstants; +import org.openecomp.dcae.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.openecomp.dcae.analytics.dmaap.DMaaPMRFactory; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRSubscriberConfig; +import org.openecomp.dcae.analytics.dmaap.service.subscriber.DMaaPMRSubscriber; +import org.openecomp.dcae.analytics.model.util.AnalyticsModelIOUtils; +import org.openecomp.dcae.analytics.tca.settings.TCAAppPreferences; +import org.openecomp.dcae.analytics.tca.utils.AppPreferencesToSubscriberConfigMapper; +import org.openecomp.dcae.analytics.tca.utils.TCAUtils; +import org.quartz.JobBuilder; +import org.quartz.JobDataMap; +import org.quartz.JobDetail; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.quartz.SimpleScheduleBuilder; +import org.quartz.SimpleTrigger; +import org.quartz.TriggerBuilder; +import org.quartz.impl.StdSchedulerFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Properties; +import java.util.concurrent.atomic.AtomicBoolean; + +import static java.lang.String.format; + +/** + * TCA DMaaP Subscriber will read messages and post them to cdap stream at regular intervals + * <p> + * @author Rajiv Singla. Creation Date: 10/14/2016. + */ +public class TCADMaaPSubscriberWorker extends AbstractWorker { + + private static final Logger LOG = LoggerFactory.getLogger(TCADMaaPSubscriberWorker.class); + + /** + * DMaaP MR Subscriber + */ + private DMaaPMRSubscriber subscriber; + /** + * Quartz Scheduler + */ + private Scheduler scheduler; + /** + * Determines if scheduler is shutdown + */ + private AtomicBoolean isSchedulerShutdown; + /** + * Store runtime metrics + */ + private Metrics metrics; + + /** + * CDAP output stream name + */ + @Property + private final String tcaSubscriberOutputStreamName; + + public TCADMaaPSubscriberWorker(final String tcaSubscriberOutputStreamName) { + this.tcaSubscriberOutputStreamName = tcaSubscriberOutputStreamName; + } + + + @Override + public void configure() { + // configure + setName(CDAPComponentsConstants.TCA_FIXED_DMAAP_SUBSCRIBER_WORKER); + setDescription(CDAPComponentsConstants.TCA_FIXED_DMAAP_SUBSCRIBER_DESCRIPTION_WORKER); + LOG.debug("Configuring TCA MR DMaaP Subscriber worker with name: {}", + CDAPComponentsConstants.TCA_FIXED_DMAAP_SUBSCRIBER_WORKER); + } + + @Override + public void initialize(WorkerContext context) throws Exception { + super.initialize(context); + + // Parse runtime arguments + final TCAAppPreferences tcaAppPreferences = TCAUtils.getValidatedTCAAppPreferences(context); + + LOG.info("Initializing TCA MR DMaaP Subscriber worker with preferences: {}", tcaAppPreferences); + + // Map TCA App Preferences to DMaaP MR Subscriber Config + final DMaaPMRSubscriberConfig subscriberConfig = AppPreferencesToSubscriberConfigMapper.map(tcaAppPreferences); + + LOG.info("TCA DMaaP MR Subscriber worker will be writing to CDAP Stream: {}", tcaSubscriberOutputStreamName); + + // Create an instance of DMaaP MR Subscriber + LOG.debug("Creating an instance of DMaaP Subscriber"); + subscriber = DMaaPMRFactory.create().createSubscriber(subscriberConfig); + + // initialize a new Quartz scheduler + initializeScheduler(tcaAppPreferences); + + // initialize scheduler state + isSchedulerShutdown = new AtomicBoolean(true); + } + + + @Override + public void run() { + // Start scheduler + try { + scheduler.start(); + isSchedulerShutdown.getAndSet(false); + + } catch (SchedulerException e) { + final String errorMessage = + format("Error while starting TCA DMaaP MR Subscriber scheduler: %s", e.toString()); + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); + } + + LOG.info("TCA DMaaP MR Subscriber Scheduler started successfully"); + + // indefinite loop which wakes up and confirms scheduler is indeed running + while (!isSchedulerShutdown.get()) { + try { + + Thread.sleep(AnalyticsConstants.TCA_DEFAULT_WORKER_SHUTDOWN_CHECK_INTERVAL_MS); + + } catch (InterruptedException e) { + + final String errorMessage = + format("Error while checking TCA DMaaP MR Subscriber worker status: %s", e); + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); + } + } + + LOG.info("Finished execution of TCA DMaaP MR Subscriber worker thread"); + + } + + @Override + public void stop() { + + // Stop scheduler + try { + + LOG.info("Shutting TCA DMaaP MR Subscriber Scheduler"); + + scheduler.shutdown(); + isSchedulerShutdown.getAndSet(true); + + } catch (SchedulerException e) { + + final String errorMessage = + format("Error while shutting down TCA DMaaP MR Subscriber scheduler: %s", e); + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); + } + } + + /** + * Initializes a scheduler instance for DMaaP MR Subscriber Job + * + * @throws SchedulerException SchedulerException + */ + private void initializeScheduler(TCAAppPreferences tcaAppPreferences) throws SchedulerException { + + // Initialize a new Quartz Standard scheduler - settings settings are in quartz-subscriber.properties file + final StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory(); + final String quartzSubscriberPropertiesFileName = AnalyticsConstants.TCA_QUARTZ_SUBSCRIBER_PROPERTIES_FILE_NAME; + LOG.debug("Configuring quartz scheduler for TCA DMaaP MR Subscriber with properties file: {}", + quartzSubscriberPropertiesFileName); + final Properties subscriberProperties = + AnalyticsModelIOUtils.loadPropertiesFile(quartzSubscriberPropertiesFileName); + stdSchedulerFactory.initialize(subscriberProperties); + scheduler = stdSchedulerFactory.getScheduler(); + + // Create a new JobDataMap containing information required by TCA DMaaP Subscriber Job + final JobDataMap jobDataMap = new JobDataMap(); + jobDataMap.put(AnalyticsConstants.CDAP_STREAM_VARIABLE_NAME, tcaSubscriberOutputStreamName); + jobDataMap.put(AnalyticsConstants.WORKER_CONTEXT_VARIABLE_NAME, getContext()); + jobDataMap.put(AnalyticsConstants.DMAAP_SUBSCRIBER_VARIABLE_NAME, subscriber); + jobDataMap.put(AnalyticsConstants.DMAAP_METRICS_VARIABLE_NAME, metrics); + + // Create a new job detail + final JobDetail jobDetail = JobBuilder.newJob(TCADMaaPMRSubscriberJob.class) + .withIdentity(AnalyticsConstants.TCA_DMAAP_SUBSCRIBER_QUARTZ_JOB_NAME, + AnalyticsConstants.TCA_QUARTZ_GROUP_NAME) + .usingJobData(jobDataMap).build(); + + // Create a new scheduling builder + final Integer subscriberPollingInterval = tcaAppPreferences.getSubscriberPollingInterval(); + final SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule() + .withIntervalInMilliseconds(subscriberPollingInterval) // job will use custom polling schedule + .repeatForever(); // repeats while worker is running + + // Create a trigger for the TCA Subscriber Job + final SimpleTrigger simpleTrigger = TriggerBuilder.newTrigger() + .withIdentity(AnalyticsConstants.TCA_DMAAP_SUBSCRIBER_QUARTZ_TRIGGER_NAME, + AnalyticsConstants.TCA_QUARTZ_GROUP_NAME) + .startNow() // job starts right away + .withSchedule(simpleScheduleBuilder).build(); + + scheduler.scheduleJob(jobDetail, simpleTrigger); + LOG.info("Initialized TCA DMaaP MR Subscriber Scheduler"); + } + + +} diff --git a/dcae-analytics-tca/src/main/resources/quartz-publisher.properties b/dcae-analytics-tca/src/main/resources/quartz-publisher.properties new file mode 100644 index 0000000..17d564d --- /dev/null +++ b/dcae-analytics-tca/src/main/resources/quartz-publisher.properties @@ -0,0 +1,23 @@ +# +# ============LICENSE_START========================================================= +# dcae-analytics +# ================================================================================ +# Copyright © 2017 AT&T Intellectual Property. All rights reserved. +# ================================================================================ +# Licensed 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. +# ============LICENSE_END========================================================= +# +org.quartz.scheduler.instanceName=TCA_DMaaPMRPublisher_Scheduler +org.quartz.threadPool.threadCount=3 +org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore +org.quartz.scheduler.skipUpdateCheck=true diff --git a/dcae-analytics-tca/src/main/resources/quartz-subscriber.properties b/dcae-analytics-tca/src/main/resources/quartz-subscriber.properties new file mode 100644 index 0000000..78a968f --- /dev/null +++ b/dcae-analytics-tca/src/main/resources/quartz-subscriber.properties @@ -0,0 +1,23 @@ +# +# ============LICENSE_START========================================================= +# dcae-analytics +# ================================================================================ +# Copyright © 2017 AT&T Intellectual Property. All rights reserved. +# ================================================================================ +# Licensed 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. +# ============LICENSE_END========================================================= +# +org.quartz.scheduler.instanceName=TCA_DMaaPMRSubscriber_Scheduler +org.quartz.threadPool.threadCount=3 +org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore +org.quartz.scheduler.skipUpdateCheck=true diff --git a/dcae-analytics-tca/src/main/resources/ves_mock_messages.json b/dcae-analytics-tca/src/main/resources/ves_mock_messages.json new file mode 100644 index 0000000..483c1d5 --- /dev/null +++ b/dcae-analytics-tca/src/main/resources/ves_mock_messages.json @@ -0,0 +1,113 @@ +[ + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "multicastPacketsIn": 0, + "bytesIn": 20445, + "unicastPacketsIn": 0, + "multicastPacketsOut": 0, + "broadcastPacketsOut": 0, + "packetsOut": 0, + "bytesOut": 0, + "broadcastPacketsIn": 0, + "packetsIn": 700, + "unicastPacketsOut": 0, + "vNicIdentifier": "eth1" + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "zdfw1fwl01fwl02", + "startEpochMicrosec": 1484335735737754, + "lastEpochMicrosec": 1484335745737754, + "eventId": "61542", + "sourceName": "Dummy VM name - No Metadata available", + "sequence": 61542, + "priority": "Normal", + "functionalRole": "vFirewall", + "domain": "measurementsForVfScaling", + "reportingEntityId": "No UUID available", + "sourceId": "Dummy VM UUID - No Metadata available", + "version": 1.1 + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "multicastPacketsIn": 0, + "bytesIn": 20445, + "unicastPacketsIn": 0, + "multicastPacketsOut": 0, + "broadcastPacketsOut": 0, + "packetsOut": 0, + "bytesOut": 0, + "broadcastPacketsIn": 0, + "packetsIn": 300, + "unicastPacketsOut": 0, + "vNicIdentifier": "eth1" + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "zdfw1fwl01fwl02", + "startEpochMicrosec": 1484335735737754, + "lastEpochMicrosec": 1484335745737754, + "eventId": "61542", + "sourceName": "Dummy VM name - No Metadata available", + "sequence": 61542, + "priority": "Normal", + "functionalRole": "vFirewall", + "domain": "measurementsForVfScaling", + "reportingEntityId": "No UUID available", + "sourceId": "Dummy VM UUID - No Metadata available", + "version": 1.1 + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "multicastPacketsIn": 0, + "bytesIn": 20445, + "unicastPacketsIn": 0, + "multicastPacketsOut": 0, + "broadcastPacketsOut": 0, + "packetsOut": 0, + "bytesOut": 0, + "broadcastPacketsIn": 0, + "packetsIn": 400, + "unicastPacketsOut": 0, + "vNicIdentifier": "eth1" + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "zdfw1fwl01fwl02", + "startEpochMicrosec": 1484335735737754, + "lastEpochMicrosec": 1484335745737754, + "eventId": "61542", + "sourceName": "Dummy VM name - No Metadata available", + "sequence": 61542, + "priority": "Normal", + "functionalRole": "vFirewall", + "domain": "measurementsForVfScaling", + "reportingEntityId": "No UUID available", + "sourceId": "Dummy VM UUID - No Metadata available", + "version": 1.1 + } + } + } +] diff --git a/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/BaseAnalyticsTCAIT.java b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/BaseAnalyticsTCAIT.java new file mode 100644 index 0000000..4dedf98 --- /dev/null +++ b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/BaseAnalyticsTCAIT.java @@ -0,0 +1,141 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.common.base.Suppliers; +import org.junit.BeforeClass; +import org.openecomp.dcae.analytics.common.AnalyticsConstants; +import org.openecomp.dcae.analytics.model.util.AnalyticsModelIOUtils; +import org.openecomp.dcae.analytics.model.util.json.AnalyticsModelObjectMapperSupplier; +import org.openecomp.dcae.analytics.tca.settings.TCATestAppConfig; +import org.openecomp.dcae.analytics.tca.settings.TCATestAppPreferences; +import org.openecomp.dcae.analytics.test.BaseDCAEAnalyticsIT; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Properties; + +/** + * + * @author Rajiv Singla. Creation Date: 10/25/2016. + */ +public class BaseAnalyticsTCAIT extends BaseDCAEAnalyticsIT { + + protected static ObjectMapper objectMapper; + + @BeforeClass + public static void beforeClass() { + final AnalyticsModelObjectMapperSupplier analyticsModelObjectMapperSupplier = + new AnalyticsModelObjectMapperSupplier(); + objectMapper = Suppliers.memoize(analyticsModelObjectMapperSupplier).get(); + objectMapper.enable(SerializationFeature.INDENT_OUTPUT); + } + + protected static final String TCA_CONTROLLER_POLICY_FILE_LOCATION = + "data/properties/tca_controller_policy.properties"; + + // App Settings + protected static final String DCAE_ANALYTICS_TCA_TEST_APP_NAME = "dcae-tca"; + protected static final String DCAE_ANALYTICS_TCA_TEST_APP_DESC = + "DCAE Analytics Threshold Crossing Alert Application"; + + // Subscriber App Preferences + protected static final String SUBSCRIBER_HOST_NAME = "mrlocal-mtnjftle01.homer.com"; + protected static final Integer SUBSCRIBER_PORT_NUMBER = 3905; + protected static final String SUBSCRIBER_TOPIC_NAME = "com.dcae.dmaap.mtnje2.DcaeTestVESSub"; + protected static final String SUBSCRIBER_USERNAME = "m00502@tca.af.dcae.com"; + protected static final String SUBSCRIBER_PASSWORD = "Te5021abc"; + protected static final String SUBSCRIBER_HTTP_PROTOCOL = "https"; + protected static final String SUBSCRIBER_CONTENT_TYPE = "application/json"; + protected static final Integer SUBSCRIBER_POLLING_INTERVAL = 20000; + + protected static final String SUBSCRIBER_CONSUMER_ID = "c12"; + protected static final String SUBSCRIBER_CONSUMER_GROUP_NAME = AnalyticsConstants.DMAAP_GROUP_PREFIX + + SUBSCRIBER_CONSUMER_ID; + protected static final int SUBSCRIBER_TIMOUT_MS = -1; + protected static final int SUBSCRIBER_MESSAGE_LIMIT = -1; + + // Publisher App Preferences + protected static final String PUBLISHER_HOST_NAME = "mrlocal-mtnjftle01.homer.com"; + protected static final Integer PUBLISHER_PORT_NUMBER = 3905; + protected static final String PUBLISHER_TOPIC_NAME = "com.dcae.dmaap.mtnje2.DcaeTestVESPub"; + protected static final String PUBLISHER_USERNAME = "m00502@tca.af.dcae.com"; + protected static final String PUBLISHER_PASSWORD = "Te5021abc"; + protected static final String PUBLISHER_HTTP_PROTOCOL = "https"; + protected static final String PUBLISHER_CONTENT_TYPE = "application/json"; + protected static final Integer PUBLISHER_BATCH_QUEUE_SIZE = 10; + protected static final Integer PUBLISHER_RECOVERY_QUEUE_SIZE = 100000; + protected static final Integer PUBLISHER_POLLING_INTERVAL = 20000; + + protected static TCATestAppConfig getTCATestAppConfig() { + final TCATestAppConfig tcaTestAppConfig = new TCATestAppConfig(); + tcaTestAppConfig.setAppName(DCAE_ANALYTICS_TCA_TEST_APP_NAME); + tcaTestAppConfig.setAppDescription(DCAE_ANALYTICS_TCA_TEST_APP_DESC); + return tcaTestAppConfig; + } + + protected static TCATestAppPreferences getTCATestAppPreferences() { + final TCATestAppPreferences tcaTestAppPreferences = new TCATestAppPreferences(getTCAPolicyPreferences()); + tcaTestAppPreferences.setSubscriberHostName(SUBSCRIBER_HOST_NAME); + tcaTestAppPreferences.setSubscriberHostPortNumber(SUBSCRIBER_PORT_NUMBER); + tcaTestAppPreferences.setSubscriberTopicName(SUBSCRIBER_TOPIC_NAME); + tcaTestAppPreferences.setSubscriberUserName(SUBSCRIBER_USERNAME); + tcaTestAppPreferences.setSubscriberUserPassword(SUBSCRIBER_PASSWORD); + tcaTestAppPreferences.setSubscriberProtocol(SUBSCRIBER_HTTP_PROTOCOL); + tcaTestAppPreferences.setSubscriberContentType(SUBSCRIBER_CONTENT_TYPE); + tcaTestAppPreferences.setSubscriberConsumerId(SUBSCRIBER_CONSUMER_ID); + tcaTestAppPreferences.setSubscriberConsumerGroup(SUBSCRIBER_CONSUMER_GROUP_NAME); + tcaTestAppPreferences.setSubscriberTimeoutMS(SUBSCRIBER_TIMOUT_MS); + tcaTestAppPreferences.setSubscriberMessageLimit(SUBSCRIBER_MESSAGE_LIMIT); + tcaTestAppPreferences.setSubscriberPollingInterval(SUBSCRIBER_POLLING_INTERVAL); + + tcaTestAppPreferences.setPublisherHostName(PUBLISHER_HOST_NAME); + tcaTestAppPreferences.setPublisherHostPort(PUBLISHER_PORT_NUMBER); + tcaTestAppPreferences.setPublisherTopicName(PUBLISHER_TOPIC_NAME); + tcaTestAppPreferences.setPublisherUserName(PUBLISHER_USERNAME); + tcaTestAppPreferences.setPublisherUserPassword(PUBLISHER_PASSWORD); + tcaTestAppPreferences.setPublisherProtocol(PUBLISHER_HTTP_PROTOCOL); + tcaTestAppPreferences.setPublisherContentType(PUBLISHER_CONTENT_TYPE); + tcaTestAppPreferences.setPublisherMaxBatchSize(PUBLISHER_BATCH_QUEUE_SIZE); + tcaTestAppPreferences.setPublisherMaxRecoveryQueueSize(PUBLISHER_RECOVERY_QUEUE_SIZE); + tcaTestAppPreferences.setPublisherPollingInterval(PUBLISHER_POLLING_INTERVAL); + return tcaTestAppPreferences; + } + + + protected static Map<String, String> getTCAPolicyPreferences() { + final Map<String, String> policyPreferences = new LinkedHashMap<>(); + final Properties policyPreferencesProps = + AnalyticsModelIOUtils.loadPropertiesFile(TCA_CONTROLLER_POLICY_FILE_LOCATION); + for (Map.Entry<Object, Object> propEntry : policyPreferencesProps.entrySet()) { + policyPreferences.put(propEntry.getKey().toString(), propEntry.getValue().toString()); + } + + return policyPreferences; + } + + protected static String serializeModelToJson(Object model) throws JsonProcessingException { + return objectMapper.writeValueAsString(model); + } +} diff --git a/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/BaseAnalyticsTCAUnitTest.java b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/BaseAnalyticsTCAUnitTest.java new file mode 100644 index 0000000..38e4ce1 --- /dev/null +++ b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/BaseAnalyticsTCAUnitTest.java @@ -0,0 +1,220 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.base.Suppliers; +import org.junit.Assert; +import org.openecomp.dcae.analytics.model.domain.cef.EventListener; +import org.openecomp.dcae.analytics.model.domain.policy.tca.Direction; +import org.openecomp.dcae.analytics.model.domain.policy.tca.TCAPolicy; +import org.openecomp.dcae.analytics.model.domain.policy.tca.Threshold; +import org.openecomp.dcae.analytics.model.util.json.AnalyticsModelObjectMapperSupplier; +import org.openecomp.dcae.analytics.tca.settings.TCATestAppPreferences; +import org.openecomp.dcae.analytics.test.BaseDCAEAnalyticsUnitTest; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Rajiv Singla. Creation Date: 10/25/2016. + */ +public class BaseAnalyticsTCAUnitTest extends BaseDCAEAnalyticsUnitTest { + + /** + * Object mapper to be used for all TCA Json Parsing + */ + protected static final ObjectMapper ANALYTICS_MODEL_OBJECT_MAPPER = + Suppliers.memoize(new AnalyticsModelObjectMapperSupplier()).get(); + + protected static final String TCA_POLICY_JSON_FILE_LOCATION = "data/json/policy/tca_policy.json"; + protected static final String CEF_MESSAGES_JSON_FILE_LOCATION = "data/json/cef/cef_messages.json"; + protected static final String CEF_MESSAGE_JSON_FILE_LOCATION = "data/json/cef/cef_message.json"; + protected static final String CEF_MESSAGE_WITH_THRESHOLD_VIOLATION_JSON_FILE_LOCATION = + "data/json/cef/cef_message_with_threshold_violation.json"; + + protected static final String TCA_CONTROLLER_POLICY_FILE_LOCATION = + "data/properties/tca_controller_policy.properties"; + + + /** + * Provides TCA Policy that can be used for testing + * + * @return test TCA Policy Object + */ + protected TCAPolicy getSampleTCAPolicy() { + return deserializeJsonFileToModel(TCA_POLICY_JSON_FILE_LOCATION, TCAPolicy.class); + } + + /** + * Provides list containing 350 CEF messages + * + * @return CEF Test Message + * @throws Exception Exception + */ + protected List<EventListener> getCEFMessages() throws Exception { + final String cefMessageAsString = fromStream(CEF_MESSAGES_JSON_FILE_LOCATION); + final TypeReference<List<EventListener>> eventListenerListTypeReference = + new TypeReference<List<EventListener>>() { + }; + return ANALYTICS_MODEL_OBJECT_MAPPER.readValue(cefMessageAsString, eventListenerListTypeReference); + } + + /** + * Provides 1 valid CEF messages which does not violate Threshold as String + * + * @return CEF Test Message String + * @throws Exception Exception + */ + protected String getValidCEFMessage() throws Exception { + return fromStream(CEF_MESSAGE_JSON_FILE_LOCATION); + } + + + /** + * Provides single CEF Test Message + * + * @return CEF Test Message + * @throws Exception Exception + */ + protected EventListener getCEFEventListener() throws Exception { + final String cefMessageAsString = fromStream(CEF_MESSAGE_JSON_FILE_LOCATION); + return ANALYTICS_MODEL_OBJECT_MAPPER.readValue(cefMessageAsString, EventListener.class); + } + + /** + * Deserialize given Json file location to given model class and returns it back without any validation check + * + * @param jsonFileLocation Classpath location of the json file + * @param modelClass Model Class type + * @param <T> Json Model Type + * @return Json model object + */ + public static <T> T deserializeJsonFileToModel(String jsonFileLocation, Class<T> modelClass) { + final InputStream jsonFileInputStream = + BaseDCAEAnalyticsUnitTest.class.getClassLoader().getResourceAsStream(jsonFileLocation); + Assert.assertNotNull("Json File Location must be valid", jsonFileInputStream); + try { + return ANALYTICS_MODEL_OBJECT_MAPPER.readValue(jsonFileInputStream, modelClass); + } catch (IOException ex) { + LOG.error("Error while doing assert Json for fileLocation: {}, modelClass: {}, Exception {}", + jsonFileLocation, modelClass, ex); + throw new RuntimeException(ex); + } finally { + try { + jsonFileInputStream.close(); + } catch (IOException e) { + LOG.error("Error while closing input stream at file location: {}", jsonFileLocation); + throw new RuntimeException(e); + } + } + } + + /** + * Provides a test application preference for unit testing + * + * @return tca app preferences + */ + protected static TCATestAppPreferences getTCATestAppPreferences() { + final TCATestAppPreferences tcaTestAppPreferences = new TCATestAppPreferences(); + tcaTestAppPreferences.setSubscriberHostName("SUBSCRIBER_HOST_NAME"); + tcaTestAppPreferences.setSubscriberHostPortNumber(10000); + tcaTestAppPreferences.setSubscriberTopicName("SUBSCRIBER_TOPIC_NAME"); + tcaTestAppPreferences.setSubscriberUserName("SUBSCRIBER_USERNAME"); + tcaTestAppPreferences.setSubscriberUserPassword("SUBSCRIBER_PASSWORD"); + tcaTestAppPreferences.setSubscriberProtocol("https"); + tcaTestAppPreferences.setSubscriberContentType("application/json"); + tcaTestAppPreferences.setSubscriberConsumerId("SUBSCRIBER_CONSUMER_ID"); + tcaTestAppPreferences.setSubscriberConsumerGroup("SUBSCRIBER_CONSUMER_GROUP_NAME"); + tcaTestAppPreferences.setSubscriberTimeoutMS(10); + tcaTestAppPreferences.setSubscriberMessageLimit(100); + tcaTestAppPreferences.setSubscriberPollingInterval(1000); + + tcaTestAppPreferences.setPublisherHostName("PUBLISHER_HOST_NAME"); + tcaTestAppPreferences.setPublisherHostPort(1234); + tcaTestAppPreferences.setPublisherTopicName("PUBLISHER_TOPIC_NAME"); + tcaTestAppPreferences.setPublisherUserName("PUBLISHER_USERNAME"); + tcaTestAppPreferences.setPublisherUserPassword("PUBLISHER_PASSWORD"); + tcaTestAppPreferences.setPublisherProtocol("https"); + tcaTestAppPreferences.setPublisherContentType("application/json"); + tcaTestAppPreferences.setPublisherMaxBatchSize(100); + tcaTestAppPreferences.setPublisherMaxRecoveryQueueSize(100); + tcaTestAppPreferences.setPublisherPollingInterval(6000); + return tcaTestAppPreferences; + } + + protected static Map<String, String> getPreferenceMap() { + Map<String, String> preference = new HashMap<>(); + preference.put("subscriberHostName", "mrlocal-mtnjftle01.homer.com"); + preference.put("subscriberHostPort", "3905"); + preference.put("subscriberTopicName", "com.dcae.dmaap.mtnje2.DcaeTestVESPub"); + preference.put("subscriberProtocol", "https"); + preference.put("subscriberUserName", "m00502@tca.af.dcae.com"); + preference.put("subscriberUserPassword", "Te5021abc"); + preference.put("subscriberContentType", "application/json"); + preference.put("subscriberConsumerId", "123"); + preference.put("subscriberConsumerGroup", "testTCAConsumerName-123"); + preference.put("subscriberTimeoutMS", "-1"); + preference.put("subscriberMessageLimit", "-1"); + preference.put("subscriberPollingInterval", "30000"); + + preference.put("publisherHostName", "publisherHostName"); + preference.put("publisherHostPort", "3905"); + preference.put("publisherTopicName", "publisherTopicName"); + preference.put("publisherProtocol", "https"); + preference.put("publisherUserName", "publisherUserName"); + preference.put("publisherContentType", "application/json"); + preference.put("publisherMaxBatchSize", "1000"); + preference.put("publisherMaxRecoveryQueueSize", "100"); + preference.put("publisherPollingInterval", "6000"); + return preference; + } + + protected static Threshold getCriticalThreshold() { + Threshold criticalThreshold = new Threshold(); + criticalThreshold.setClosedLoopControlName("CL-LBAL-LOW-TRAFFIC-SIG-FB480F95-A453-6F24-B767-FD703241AB1A"); + criticalThreshold.setThresholdValue(5000L); + criticalThreshold.setFieldPath("$.event.measurementsForVfScalingFields.vNicUsageArray[*].packetsIn"); + criticalThreshold.setDirection(Direction.GREATER_OR_EQUAL); + return criticalThreshold; + } + + protected static List<Threshold> getThresholds() { + Threshold majorThreshold = new Threshold(); + majorThreshold.setClosedLoopControlName("CL-LBAL-LOW-TRAFFIC-SIG-FB480F95-A453-6F24-B767-FD703241AB1A"); + majorThreshold.setFieldPath("$.event.measurementsForVfScalingFields.vNicUsageArray[*].packetsIn"); + majorThreshold.setVersion("Test Version"); + majorThreshold.setThresholdValue(500L); + majorThreshold.setDirection(Direction.LESS_OR_EQUAL); + + Threshold criticalThreshold = new Threshold(); + criticalThreshold.setClosedLoopControlName("CL-LBAL-LOW-TRAFFIC-SIG-FB480F95-A453-6F24-B767-FD703241AB1A"); + criticalThreshold.setThresholdValue(5000L); + criticalThreshold.setFieldPath("$.event.measurementsForVfScalingFields.vNicUsageArray[*].packetsIn"); + criticalThreshold.setDirection(Direction.GREATER_OR_EQUAL); + return Arrays.asList(majorThreshold, criticalThreshold); + } +} diff --git a/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/it/TCAnalyticsAppConfigIT.java b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/it/TCAnalyticsAppConfigIT.java new file mode 100644 index 0000000..2ed5252 --- /dev/null +++ b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/it/TCAnalyticsAppConfigIT.java @@ -0,0 +1,53 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.it; + +import org.junit.Test; +import org.openecomp.dcae.analytics.tca.BaseAnalyticsTCAIT; +import org.openecomp.dcae.analytics.tca.settings.TCATestAppConfig; +import org.openecomp.dcae.analytics.tca.settings.TCATestAppConfigHolder; +import org.openecomp.dcae.analytics.tca.settings.TCATestAppPreferences; + +/** + * + * @author Rajiv Singla. Creation Date: 10/25/2016. + */ +public class TCAnalyticsAppConfigIT extends BaseAnalyticsTCAIT { + + + @Test + public void createTestAppConfigJson() throws Exception { + final TCATestAppConfig tcaTestAppConfig = getTCATestAppConfig(); + final TCATestAppConfigHolder appConfigHolder = new TCATestAppConfigHolder(tcaTestAppConfig); + final String appConfigJson = serializeModelToJson(appConfigHolder); + LOG.info("AppConfigJson: \n{}", appConfigJson); + writeToOutputTextFile("appSettings/tca_app_config.json", appConfigJson, TCAnalyticsAppConfigIT.class); + } + + @Test + public void createTestAppPreferencesJson() throws Exception { + final TCATestAppPreferences tcaTestAppPreferences = getTCATestAppPreferences(); + final String appPreferencesJson = serializeModelToJson(tcaTestAppPreferences); + LOG.info("AppPreferences: \n{}", appPreferencesJson); + writeToOutputTextFile("appSettings/tca_app_preferences.json", + appPreferencesJson, TCAnalyticsAppConfigIT.class); + } +} diff --git a/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/processor/TCACEFJsonProcessorTest.java b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/processor/TCACEFJsonProcessorTest.java new file mode 100644 index 0000000..05efcd6 --- /dev/null +++ b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/processor/TCACEFJsonProcessorTest.java @@ -0,0 +1,117 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.processor; + +import org.junit.Test; +import org.openecomp.dcae.analytics.common.exception.MessageProcessingException; +import org.openecomp.dcae.analytics.model.domain.cef.EventListener; +import org.openecomp.dcae.analytics.tca.BaseAnalyticsTCAUnitTest; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; + +/** + * + * @author Rajiv Singla. Creation Date: 11/9/2016. + */ +public class TCACEFJsonProcessorTest extends BaseAnalyticsTCAUnitTest { + + + // A valid CEF Message + @Test + public void testCEFJsonProcessorWithValidCEFMessage() throws Exception { + + final String cefMessageString = fromStream(CEF_MESSAGE_JSON_FILE_LOCATION); + final TCACEFProcessorContext tcacefProcessorContext = + new TCACEFProcessorContext(cefMessageString, getSampleTCAPolicy()); + + TCACEFJsonProcessor tcacefJsonProcessor = new TCACEFJsonProcessor(); + final TCACEFProcessorContext finalProcessorContext = tcacefJsonProcessor.apply(tcacefProcessorContext); + + final EventListener cefEventListener = finalProcessorContext.getCEFEventListener(); + + assertNotNull("CEF Event Listener must be present", cefEventListener); + + } + + // Even if message is not a valid CEF format but still a Json - Json Processor will parse it + @Test + public void testCEFJsonProcessorWithValidJson() throws Exception { + + final TCACEFProcessorContext tcacefProcessorContext = new TCACEFProcessorContext( + " { \"key\" : \"value\" } ", getSampleTCAPolicy()); + + TCACEFJsonProcessor tcacefJsonProcessor = new TCACEFJsonProcessor(); + final TCACEFProcessorContext finalProcessorContext = tcacefJsonProcessor.apply(tcacefProcessorContext); + final EventListener cefEventListener = finalProcessorContext.getCEFEventListener(); + + assertNotNull("Even if message is not a valid CEF format but a valid Json.Json Processor must be able to " + + "parse it", + cefEventListener); + } + + @Test(expected = MessageProcessingException.class) + public void testCEFJsonProcessorWithCEFMessageAsNull() throws Exception { + + final TCACEFProcessorContext tcacefProcessorContext = new TCACEFProcessorContext(null, getSampleTCAPolicy()); + + TCACEFJsonProcessor tcacefJsonProcessor = new TCACEFJsonProcessor(); + tcacefJsonProcessor.apply(tcacefProcessorContext); + + } + + @Test + public void testCEFJsonProcessorWithCEFMessageIsBlank() throws Exception { + + final TCACEFProcessorContext tcacefProcessorContext = new TCACEFProcessorContext(" ", getSampleTCAPolicy()); + + TCACEFJsonProcessor tcacefJsonProcessor = new TCACEFJsonProcessor(); + final TCACEFProcessorContext finalProcessorContext = tcacefJsonProcessor.apply(tcacefProcessorContext); + assertFalse("Blank message must terminate processing of message chain", finalProcessorContext + .canProcessingContinue()); + } + + + @Test + public void testCEFJsonProcessorWithCEFMessageWhichIsNotValidMessage() throws Exception { + + final TCACEFProcessorContext tcacefProcessorContext = new TCACEFProcessorContext(" Invalid Message ", + getSampleTCAPolicy()); + + TCACEFJsonProcessor tcacefJsonProcessor = new TCACEFJsonProcessor(); + final TCACEFProcessorContext finalProcessorContext = tcacefJsonProcessor.apply(tcacefProcessorContext); + assertFalse("Invalid message must terminate processing of message chain", finalProcessorContext + .canProcessingContinue()); + } + + + @Test(expected = MessageProcessingException.class) + public void testCEFJsonProcessorWithCEFMessageWhichIsNotValidJson() throws Exception { + + final TCACEFProcessorContext tcacefProcessorContext = new TCACEFProcessorContext( + " { \"Invalid Event Listener Json\" } ", getSampleTCAPolicy()); + + TCACEFJsonProcessor tcacefJsonProcessor = new TCACEFJsonProcessor(); + tcacefJsonProcessor.apply(tcacefProcessorContext); + } + + +} diff --git a/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/processor/TCACEFPolicyThresholdsProcessorTest.java b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/processor/TCACEFPolicyThresholdsProcessorTest.java new file mode 100644 index 0000000..8d83307 --- /dev/null +++ b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/processor/TCACEFPolicyThresholdsProcessorTest.java @@ -0,0 +1,77 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.processor; + +import org.junit.Test; +import org.openecomp.dcae.analytics.common.service.processor.ProcessingState; +import org.openecomp.dcae.analytics.model.domain.cef.EventListener; +import org.openecomp.dcae.analytics.tca.BaseAnalyticsTCAUnitTest; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +/** + * + * @author Rajiv Singla. Creation Date: 11/9/2016. + */ +public class TCACEFPolicyThresholdsProcessorTest extends BaseAnalyticsTCAUnitTest { + + @Test + public void testCEFPolicyThresholdProcessorWithNoThresholdViolation() throws Exception { + + final String cefMessageString = fromStream(CEF_MESSAGE_JSON_FILE_LOCATION); + final TCACEFProcessorContext tcacefProcessorContext = new TCACEFProcessorContext(cefMessageString, + getSampleTCAPolicy()); + tcacefProcessorContext.setCEFEventListener(getCEFEventListener()); + + AbstractTCAECEFPolicyProcessor policyThresholdsProcessor = new TCACEFPolicyThresholdsProcessor(); + final TCACEFProcessorContext finalProcessorContext = policyThresholdsProcessor.apply(tcacefProcessorContext); + + assertFalse("Process Context can Processing Continue flag should be false", finalProcessorContext + .canProcessingContinue()); + assertThat("Policy Threshold Processor State must be terminated early", + policyThresholdsProcessor.getProcessingState(), is(ProcessingState.PROCESSING_TERMINATED_EARLY)); + + } + + @Test + public void testCEFPolicyThresholdProcessorWithThresholdViolation() throws Exception { + + final String cefMessageString = fromStream(CEF_MESSAGE_WITH_THRESHOLD_VIOLATION_JSON_FILE_LOCATION); + final TCACEFProcessorContext tcacefProcessorContext = new TCACEFProcessorContext(cefMessageString, + getSampleTCAPolicy()); + + final EventListener eventListener = getCEFEventListener(); + tcacefProcessorContext.setCEFEventListener(eventListener); + + AbstractTCAECEFPolicyProcessor policyThresholdsProcessor = new TCACEFPolicyThresholdsProcessor(); + final TCACEFProcessorContext finalProcessorContext = policyThresholdsProcessor.apply(tcacefProcessorContext); + + assertTrue("Process Context can Processing Continue flag should be true", finalProcessorContext + .canProcessingContinue()); + assertThat("Policy Threshold Processor State must be successful", + policyThresholdsProcessor.getProcessingState(), is(ProcessingState.PROCESSING_FINISHED_SUCCESSFULLY)); + + } + +} diff --git a/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/processor/TCACEFProcessorContextTest.java b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/processor/TCACEFProcessorContextTest.java new file mode 100644 index 0000000..d955d81 --- /dev/null +++ b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/processor/TCACEFProcessorContextTest.java @@ -0,0 +1,38 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.processor; + +import org.junit.Test; +import org.openecomp.dcae.analytics.tca.BaseAnalyticsTCAUnitTest; + +/** + * + * @author Rajiv Singla. Creation Date: 11/14/2016. + */ +public class TCACEFProcessorContextTest extends BaseAnalyticsTCAUnitTest { + + @Test + public void testProcessorContextSerialization() throws Exception { + TCACEFProcessorContext tcacefProcessorContext = new TCACEFProcessorContext(getValidCEFMessage(), + getSampleTCAPolicy()); + testSerialization(tcacefProcessorContext, TCACEFProcessorContextTest.class); + } +} diff --git a/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/settings/TCATestAppConfig.java b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/settings/TCATestAppConfig.java new file mode 100644 index 0000000..4e057cc --- /dev/null +++ b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/settings/TCATestAppConfig.java @@ -0,0 +1,38 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.settings; + +/** + * TCA Test App Config is used for testing purposes only + * + * @author Rajiv Singla. Creation Date: 11/3/2016. + */ +public class TCATestAppConfig extends TCAAppConfig { + + public void setAppName(String appName) { + this.appName = appName; + } + + public void setAppDescription(String appDescription) { + this.appDescription = appDescription; + } + +} diff --git a/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/settings/TCATestAppConfigHolder.java b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/settings/TCATestAppConfigHolder.java new file mode 100644 index 0000000..e854cac --- /dev/null +++ b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/settings/TCATestAppConfigHolder.java @@ -0,0 +1,40 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.settings; + +/** + * Holder for TCA Test App Config + * + * @author Rajiv Singla. Creation Date: 11/3/2016. + */ +public class TCATestAppConfigHolder { + + private final TCATestAppConfig config; + + public TCATestAppConfigHolder(TCATestAppConfig config) { + this.config = config; + } + + public TCATestAppConfig getConfig() { + return config; + } + +} diff --git a/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/settings/TCATestAppPreferences.java b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/settings/TCATestAppPreferences.java new file mode 100644 index 0000000..f8a0474 --- /dev/null +++ b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/settings/TCATestAppPreferences.java @@ -0,0 +1,136 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.settings; + + +import com.fasterxml.jackson.annotation.JsonAnyGetter; + +import java.util.Map; + +/** + * TCA Test App Preferences are used for testing purposes only + * + * @author Rajiv Singla. Creation Date: 11/3/2016. + */ +public class TCATestAppPreferences extends TCAAppPreferences { + + private Map<String, String> policyPreferences; + + public TCATestAppPreferences() { + } + + public TCATestAppPreferences(final Map<String, String> policyPreferences) { + this.policyPreferences = policyPreferences; + } + + @JsonAnyGetter + public Map<String, String> getPolicyPreferences() { + return policyPreferences; + } + + public void setSubscriberHostName(String subscriberHostName) { + this.subscriberHostName = subscriberHostName; + } + + public void setSubscriberHostPortNumber(Integer subscriberHostPort) { + this.subscriberHostPort = subscriberHostPort; + } + + public void setSubscriberTopicName(String subscriberTopicName) { + this.subscriberTopicName = subscriberTopicName; + } + + public void setSubscriberProtocol(String subscriberProtocol) { + this.subscriberProtocol = subscriberProtocol; + } + + public void setSubscriberUserName(String subscriberUserName) { + this.subscriberUserName = subscriberUserName; + } + + public void setSubscriberUserPassword(String subscriberUserPassword) { + this.subscriberUserPassword = subscriberUserPassword; + } + + public void setSubscriberContentType(String subscriberContentType) { + this.subscriberContentType = subscriberContentType; + } + + public void setSubscriberConsumerId(String subscriberConsumerId) { + this.subscriberConsumerId = subscriberConsumerId; + } + + public void setSubscriberConsumerGroup(String subscriberConsumerGroup) { + this.subscriberConsumerGroup = subscriberConsumerGroup; + } + + public void setSubscriberTimeoutMS(Integer subscriberTimeoutMS) { + this.subscriberTimeoutMS = subscriberTimeoutMS; + } + + public void setSubscriberMessageLimit(Integer subscriberMessageLimit) { + this.subscriberMessageLimit = subscriberMessageLimit; + } + + public void setSubscriberPollingInterval(Integer subscriberPollingInterval) { + this.subscriberPollingInterval = subscriberPollingInterval; + } + + public void setPublisherHostName(String publisherHostName) { + this.publisherHostName = publisherHostName; + } + + public void setPublisherHostPort(Integer publisherHostPort) { + this.publisherHostPort = publisherHostPort; + } + + public void setPublisherTopicName(String publisherTopicName) { + this.publisherTopicName = publisherTopicName; + } + + public void setPublisherProtocol(String publisherProtocol) { + this.publisherProtocol = publisherProtocol; + } + + public void setPublisherUserName(String publisherUserName) { + this.publisherUserName = publisherUserName; + } + + public void setPublisherUserPassword(String publisherUserPassword) { + this.publisherUserPassword = publisherUserPassword; + } + + public void setPublisherContentType(String publisherContentType) { + this.publisherContentType = publisherContentType; + } + + public void setPublisherMaxBatchSize(Integer publisherMaxBatchSize) { + this.publisherMaxBatchSize = publisherMaxBatchSize; + } + + public void setPublisherMaxRecoveryQueueSize(Integer publisherMaxRecoveryQueueSize) { + this.publisherMaxRecoveryQueueSize = publisherMaxRecoveryQueueSize; + } + + public void setPublisherPollingInterval(Integer publisherPollingInterval) { + this.publisherPollingInterval = publisherPollingInterval; + } +} diff --git a/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/utils/AppPreferencesToPublisherConfigMapperTest.java b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/utils/AppPreferencesToPublisherConfigMapperTest.java new file mode 100644 index 0000000..d66ef52 --- /dev/null +++ b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/utils/AppPreferencesToPublisherConfigMapperTest.java @@ -0,0 +1,58 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.utils; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRPublisherConfig; +import org.openecomp.dcae.analytics.tca.BaseAnalyticsTCAUnitTest; +import org.openecomp.dcae.analytics.tca.settings.TCATestAppPreferences; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +/** + * @author Manjesh Gowda. Creation Date: 11/21/2016. + */ +@RunWith(MockitoJUnitRunner.class) +public class AppPreferencesToPublisherConfigMapperTest extends BaseAnalyticsTCAUnitTest { + @Test + public void testMapTCAConfigToSubscriberConfigFunctionGood() { + DMaaPMRPublisherConfig dMaaPMRPublisherConfig = + (new AppPreferencesToPublisherConfigMapper()).apply(getTCATestAppPreferences()); + assertEquals(dMaaPMRPublisherConfig.getHostName(), "PUBLISHER_HOST_NAME"); + } + + @Test + public void testMapTCAConfigToSubscriberConfigFunctionMap() { + DMaaPMRPublisherConfig dMaaPMRPublisherConfig = AppPreferencesToPublisherConfigMapper.map( + getTCATestAppPreferences()); + assertEquals(dMaaPMRPublisherConfig.getHostName(), "PUBLISHER_HOST_NAME"); + } + + @Test + public void testMapTCAConfigToSubscriberConfigFunctionAllNull() { + DMaaPMRPublisherConfig dMaaPMRPublisherConfig = + (new AppPreferencesToPublisherConfigMapper()).apply(new TCATestAppPreferences()); + assertNull(dMaaPMRPublisherConfig.getHostName()); + } +} diff --git a/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/utils/AppPreferencesToSubscriberConfigMapperTest.java b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/utils/AppPreferencesToSubscriberConfigMapperTest.java new file mode 100644 index 0000000..6963201 --- /dev/null +++ b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/utils/AppPreferencesToSubscriberConfigMapperTest.java @@ -0,0 +1,59 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.utils; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; +import org.openecomp.dcae.analytics.dmaap.domain.config.DMaaPMRSubscriberConfig; +import org.openecomp.dcae.analytics.tca.BaseAnalyticsTCAUnitTest; +import org.openecomp.dcae.analytics.tca.settings.TCATestAppPreferences; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +/** + * @author Manjesh Gowda. Creation Date: 11/21/2016. + */ +@RunWith(MockitoJUnitRunner.class) +public class AppPreferencesToSubscriberConfigMapperTest extends BaseAnalyticsTCAUnitTest { + + @Test + public void testMapTCAConfigToSubscriberConfigFunctionGood() { + DMaaPMRSubscriberConfig dMaaPMRSubscriberConfig = + (new AppPreferencesToSubscriberConfigMapper()).apply(getTCATestAppPreferences()); + assertEquals(dMaaPMRSubscriberConfig.getHostName(), "SUBSCRIBER_HOST_NAME"); + } + + @Test + public void testMapTCAConfigToSubscriberConfigFunctionMap() { + DMaaPMRSubscriberConfig dMaaPMRSubscriberConfig = + AppPreferencesToSubscriberConfigMapper.map(getTCATestAppPreferences()); + assertEquals(dMaaPMRSubscriberConfig.getHostName(), "SUBSCRIBER_HOST_NAME"); + } + + @Test + public void testMapTCAConfigToSubscriberConfigFunctionAllNull() { + DMaaPMRSubscriberConfig dMaaPMRSubscriberConfig = + (new AppPreferencesToSubscriberConfigMapper()).apply(new TCATestAppPreferences()); + assertNull(dMaaPMRSubscriberConfig.getHostName()); + } +} diff --git a/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/utils/TCAUtilsTest.java b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/utils/TCAUtilsTest.java new file mode 100644 index 0000000..19c80d2 --- /dev/null +++ b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/utils/TCAUtilsTest.java @@ -0,0 +1,357 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.utils; + +import co.cask.cdap.api.RuntimeContext; +import com.google.common.base.Supplier; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Table; +import org.apache.commons.lang3.tuple.Pair; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; +import org.openecomp.dcae.analytics.common.exception.MessageProcessingException; +import org.openecomp.dcae.analytics.model.domain.cef.CommonEventHeader; +import org.openecomp.dcae.analytics.model.domain.cef.Event; +import org.openecomp.dcae.analytics.model.domain.cef.EventListener; +import org.openecomp.dcae.analytics.model.domain.cef.EventSeverity; +import org.openecomp.dcae.analytics.model.domain.policy.tca.MetricsPerFunctionalRole; +import org.openecomp.dcae.analytics.model.domain.policy.tca.TCAPolicy; +import org.openecomp.dcae.analytics.model.domain.policy.tca.Threshold; +import org.openecomp.dcae.analytics.model.facade.tca.TCAVESResponse; +import org.openecomp.dcae.analytics.model.util.AnalyticsModelIOUtils; +import org.openecomp.dcae.analytics.tca.BaseAnalyticsTCAUnitTest; +import org.openecomp.dcae.analytics.tca.processor.TCACEFProcessorContext; +import org.openecomp.dcae.analytics.tca.settings.TCAAppPreferences; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Set; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.isA; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +/** + * @author Rajiv Singla. Creation Date: 11/9/2016. + */ +@RunWith(MockitoJUnitRunner.class) +public class TCAUtilsTest extends BaseAnalyticsTCAUnitTest { + + @Test + public void testGetPolicyFunctionalRoles() throws Exception { + + final TCAPolicy sampleTCAPolicy = getSampleTCAPolicy(); + final List<String> policyFunctionalRoles = TCAUtils.getPolicyFunctionalRoles(sampleTCAPolicy); + + assertThat("Policy Functional Roles must contain vFirewall and vLoadBalancer", policyFunctionalRoles, + containsInAnyOrder("vFirewall", "vLoadBalancer")); + } + + @Test + public void testGetPolicyFunctionalRoleSupplier() throws Exception { + final TCAPolicy sampleTCAPolicy = getSampleTCAPolicy(); + final Supplier<List<String>> policyFunctionalRoleSupplier = TCAUtils.getPolicyFunctionalRoleSupplier + (sampleTCAPolicy); + final List<String> policyFunctionalRoles = policyFunctionalRoleSupplier.get(); + assertThat("Policy Functional Roles must contain vFirewall and vLoadBalancer", policyFunctionalRoles, + containsInAnyOrder("vFirewall", "vLoadBalancer")); + } + + @Test + public void testProcessCEFMessage() throws Exception { + final String cefMessageString = fromStream(CEF_MESSAGE_JSON_FILE_LOCATION); + final TCACEFProcessorContext tcacefProcessorContext = TCAUtils.filterCEFMessage(cefMessageString, + getSampleTCAPolicy()); + assertThat("TCAECEFProcessor Processor Context can continue flag is true", tcacefProcessorContext + .canProcessingContinue(), is(true)); + } + + @Test + public void testGetPolicyFRThresholdsTableSupplier() throws Exception { + final Table<String, String, List<Threshold>> policyFRThresholdPathTable = TCAUtils + .getPolicyFRThresholdsTableSupplier(getSampleTCAPolicy()).get(); + + final Map<String, List<Threshold>> vFirewall = policyFRThresholdPathTable.row("vFirewall"); + final Map<String, List<Threshold>> vLoadBalancer = policyFRThresholdPathTable.row("vLoadBalancer"); + + final Set<String> vFirewallThresholdPaths = vFirewall.keySet(); + final Set<String> vLoadBalancerPaths = vLoadBalancer.keySet(); + + assertThat("vFirewall threshold field path size must be " + + "\"$.event.measurementsForVfScalingFields.vNicUsageArray[*].bytesIn\"", + vFirewallThresholdPaths.iterator().next(), + is("$.event.measurementsForVfScalingFields.vNicUsageArray[*].bytesIn")); + + assertThat("vLoadBalancer threshold field path size must be " + + "\"\"$.event.measurementsForVfScalingFields.vNicUsageArray[*].packetsIn\"", + vLoadBalancerPaths.iterator().next(), + is("$.event.measurementsForVfScalingFields.vNicUsageArray[*].packetsIn")); + + final List<Threshold> firewallThresholds = policyFRThresholdPathTable.get("vFirewall", + "$.event.measurementsForVfScalingFields.vNicUsageArray[*].bytesIn"); + final List<Threshold> vLoadBalancerThresholds = policyFRThresholdPathTable.get("vLoadBalancer", + "$.event.measurementsForVfScalingFields.vNicUsageArray[*].packetsIn"); + + assertThat("vFirewall Threshold size must be 2", firewallThresholds.size(), is(2)); + assertThat("vLoadBalancer Threshold size must be 2", vLoadBalancerThresholds.size(), is(2)); + } + + @Test + public void testGetJsonPathValueWithValidMessageAndPolicy() throws Exception { + final String cefMessageString = fromStream(CEF_MESSAGE_JSON_FILE_LOCATION); + final String jsonPath = "$.event.measurementsForVfScalingFields.vNicUsageArray[*].bytesIn"; + final ImmutableSet<String> fieldPaths = ImmutableSet.of(jsonPath); + final Map<String, List<Long>> jsonPathValueMap = TCAUtils.getJsonPathValue(cefMessageString, fieldPaths); + assertThat("Json Path value must match", jsonPathValueMap.get(jsonPath).get(0), is(6086L)); + + } + + @Test + public void testGetJsonPathValueWithValidPath() throws Exception { + final String cefMessageString = fromStream(CEF_MESSAGE_JSON_FILE_LOCATION); + final String jsonPath = "$.event.measurementsForVfScalingFields.vNicUsageArray[*].invalid"; + final ImmutableSet<String> fieldPaths = ImmutableSet.of(jsonPath); + final Map<String, List<Long>> jsonPathValueMap = TCAUtils.getJsonPathValue(cefMessageString, fieldPaths); + assertThat("Json path value must be empty", jsonPathValueMap.size(), is(0)); + + } + + @Test + public void testGetValidatedTCAAppPreferences() throws Exception { + RuntimeContext runtimeContext = mock(RuntimeContext.class); + when(runtimeContext.getRuntimeArguments()).thenReturn(getPreferenceMap()); + TCAAppPreferences validatedTCAAppPreferences = TCAUtils.getValidatedTCAAppPreferences(runtimeContext); + assertEquals(validatedTCAAppPreferences.getSubscriberHostName(), "mrlocal-mtnjftle01.homer.com"); + } + + @Test + public void testGetValidatedTCAAppPreferencesWhenDMaaPUrlArePresent() throws Exception { + RuntimeContext runtimeContext = mock(RuntimeContext.class); + final Map<String, String> preferenceMap = getPreferenceMap(); + preferenceMap.put("dmaap.in.event-input.dmaapUrl", + "http://zldcmtd1njcoll00.research.com/unauthenticated.SEC_MEASUREMENT_OUTPUT"); + preferenceMap.put("dmaap.out.alert-output.dmaapUrl", + "http://zldcmtd1njcoll00.research.com/unauthenticated.TCA_EVENT_OUTPUT"); + + preferenceMap.put("dmaap.in.event-input.dmaapUserName", null); + preferenceMap.put("dmaap.in.event-input.dmaapPassword", null); + preferenceMap.put("dmaap.out.alert-output.dmaapUserName", null); + preferenceMap.put("dmaap.out.alert-output.dmaapPassword", null); + + when(runtimeContext.getRuntimeArguments()).thenReturn(preferenceMap); + TCAAppPreferences validatedTCAAppPreferences = TCAUtils.getValidatedTCAAppPreferences(runtimeContext); + + assertEquals(validatedTCAAppPreferences.getSubscriberProtocol(), "http"); + assertEquals(validatedTCAAppPreferences.getPublisherProtocol(), "http"); + + assertEquals(validatedTCAAppPreferences.getSubscriberHostName(), "zldcmtd1njcoll00.research.com"); + assertEquals(validatedTCAAppPreferences.getPublisherHostName(), "zldcmtd1njcoll00.research.com"); + + assertEquals(validatedTCAAppPreferences.getSubscriberHostPort(), new Integer(3904)); + assertEquals(validatedTCAAppPreferences.getPublisherHostPort(), new Integer(3904)); + + assertEquals(validatedTCAAppPreferences.getSubscriberTopicName(), "unauthenticated.SEC_MEASUREMENT_OUTPUT"); + assertEquals(validatedTCAAppPreferences.getPublisherTopicName(), "unauthenticated.TCA_EVENT_OUTPUT"); + + assertNull(validatedTCAAppPreferences.getSubscriberUserName()); + assertNull(validatedTCAAppPreferences.getSubscriberUserPassword()); + assertNull(validatedTCAAppPreferences.getPublisherUserName()); + assertNull(validatedTCAAppPreferences.getPublisherUserPassword()); + + } + + @Test + public void testCreateNewTCAVESResponse() throws Exception { + TCACEFProcessorContext tcacefProcessorContext = mock(TCACEFProcessorContext.class); + + MetricsPerFunctionalRole metricsPerFunctionalRole = mock(MetricsPerFunctionalRole.class); + when(metricsPerFunctionalRole.getThresholds()).thenReturn(getThresholds()); + when(metricsPerFunctionalRole.getPolicyScope()).thenReturn("Test Policy scope"); + when(tcacefProcessorContext.getMetricsPerFunctionalRole()).thenReturn(metricsPerFunctionalRole); + when(metricsPerFunctionalRole.getFunctionalRole()).thenReturn("vLoadBalancer"); + + when(tcacefProcessorContext.getCEFEventListener()).thenReturn(getCEFEventListener()); + TCAVESResponse tcaVESResponse = TCAUtils.createNewTCAVESResponse(tcacefProcessorContext, "TCA_APP_NAME"); + + //TODO : Add proper assertions, as the usage is not clearly understood + assertThat(tcaVESResponse.getClosedLoopControlName(), + is("CL-LBAL-LOW-TRAFFIC-SIG-FB480F95-A453-6F24-B767-FD703241AB1A")); + assertThat(tcaVESResponse.getVersion(), is("Test Version")); + assertThat(tcaVESResponse.getPolicyScope(), is("Test Policy scope")); + } + + @Rule + public ExpectedException expectedIllegalArgumentException = ExpectedException.none(); + + @Test + public void testCreateNewTCAVESResponseNullFunctionalRole() throws Exception { + expectedIllegalArgumentException.expect(MessageProcessingException.class); + expectedIllegalArgumentException.expectCause(isA(IllegalArgumentException.class)); + expectedIllegalArgumentException.expectMessage("No violations metrics. Unable to create VES Response"); + + TCACEFProcessorContext tcacefProcessorContext = mock(TCACEFProcessorContext.class); + TCAVESResponse tcaVESResponse = TCAUtils.createNewTCAVESResponse(tcacefProcessorContext, "TCA_APP_NAME"); + assertNotNull(tcaVESResponse.getClosedLoopControlName()); + } + + @Test + public void testPrioritizeThresholdViolations() throws Exception { + + Map<String, Threshold> thresholdMap = new HashMap<>(); + Threshold majorThreshold = mock(Threshold.class); + when(majorThreshold.getSeverity()).thenReturn(EventSeverity.MAJOR); + thresholdMap.put("MAJOR", majorThreshold); + + Threshold result1 = TCAUtils.prioritizeThresholdViolations(thresholdMap); + assertEquals(result1.getSeverity(), EventSeverity.MAJOR); + + Threshold criticalThreshold = mock(Threshold.class); + when(criticalThreshold.getSeverity()).thenReturn(EventSeverity.CRITICAL); + thresholdMap.put("CRITICAL", criticalThreshold); + + Threshold result2 = TCAUtils.prioritizeThresholdViolations(thresholdMap); + assertEquals(result2.getSeverity(), EventSeverity.CRITICAL); + } + + @Test + public void testCreateViolatedMetrics() throws Exception { + TCAPolicy tcaPolicy = getSampleTCAPolicy(); + Threshold violatedThreshold = getCriticalThreshold(); + String functionalRole = "vFirewall"; + MetricsPerFunctionalRole result = TCAUtils.createViolatedMetrics(tcaPolicy, violatedThreshold, functionalRole); + assertThat(result.getPolicyScope(), is("resource=vFirewall;type=configuration")); + assertThat(result.getPolicyName(), is("configuration.dcae.microservice.tca.xml")); + } + + @Test + public void testCreateViolatedMetricsWrongFunctionalRole() throws Exception { + expectedIllegalArgumentException.expect(MessageProcessingException.class); + expectedIllegalArgumentException.expectCause(isA(IllegalStateException.class)); + expectedIllegalArgumentException.expectMessage("TCA Policy must contain functional Role: badFunctionRoleName"); + + TCAPolicy tcaPolicy = getSampleTCAPolicy(); + Threshold violatedThreshold = getCriticalThreshold(); + String functionalRole = "badFunctionRoleName"; + MetricsPerFunctionalRole result = TCAUtils.createViolatedMetrics(tcaPolicy, violatedThreshold, functionalRole); + } + + @Test + public void testGetDomainAndFunctionalRole() { + TCACEFProcessorContext tcacefProcessorContext = mock(TCACEFProcessorContext.class); + EventListener eventListener = mock(EventListener.class); + Event event = mock(Event.class); + CommonEventHeader commonEventHeader = mock(CommonEventHeader.class); + + Pair<String, String> result = TCAUtils.getDomainAndFunctionalRole(tcacefProcessorContext); + assertNull(result.getLeft()); + assertNull(result.getRight()); + + when(tcacefProcessorContext.getCEFEventListener()).thenReturn(eventListener); + result = TCAUtils.getDomainAndFunctionalRole(tcacefProcessorContext); + assertNull(result.getLeft()); + assertNull(result.getRight()); + + when(eventListener.getEvent()).thenReturn(event); + result = TCAUtils.getDomainAndFunctionalRole(tcacefProcessorContext); + assertNull(result.getLeft()); + assertNull(result.getRight()); + + when(event.getCommonEventHeader()).thenReturn(commonEventHeader); + result = TCAUtils.getDomainAndFunctionalRole(tcacefProcessorContext); + assertNull(result.getLeft()); + assertNull(result.getRight()); + + when(commonEventHeader.getDomain()).thenReturn("testDomain"); + when(commonEventHeader.getFunctionalRole()).thenReturn("functionalRole"); + + result = TCAUtils.getDomainAndFunctionalRole(tcacefProcessorContext); + assertEquals(result.getLeft(), "testDomain"); + assertEquals(result.getRight(), "functionalRole"); + + } + + @Test + public void testComputeThresholdViolationsNotPresent() throws Exception { + TCACEFProcessorContext tcacefProcessorContext = mock(TCACEFProcessorContext.class); + when(tcacefProcessorContext.canProcessingContinue()).thenReturn(true); + when(tcacefProcessorContext.getMessage()).thenReturn(getValidCEFMessage()); + + when(tcacefProcessorContext.getTCAPolicy()).thenReturn(getSampleTCAPolicy()); + when(tcacefProcessorContext.getCEFEventListener()).thenReturn(getCEFEventListener()); + + TCACEFProcessorContext result = TCAUtils.computeThresholdViolations(tcacefProcessorContext); + assertNotNull(result); + verify(result, times(0)).setMetricsPerFunctionalRole(Mockito.any(MetricsPerFunctionalRole.class)); + } + + @Test + public void testComputeThresholdViolationsPresent() throws Exception { + TCACEFProcessorContext tcacefProcessorContext = mock(TCACEFProcessorContext.class); + when(tcacefProcessorContext.canProcessingContinue()).thenReturn(true); + final String cefMessageString = fromStream(CEF_MESSAGE_WITH_THRESHOLD_VIOLATION_JSON_FILE_LOCATION); + when(tcacefProcessorContext.getMessage()).thenReturn(cefMessageString); + + when(tcacefProcessorContext.getTCAPolicy()).thenReturn(getSampleTCAPolicy()); + when(tcacefProcessorContext.getCEFEventListener()).thenReturn(getCEFEventListener()); + + TCACEFProcessorContext result = TCAUtils.computeThresholdViolations(tcacefProcessorContext); + verify(result, times(1)).setMetricsPerFunctionalRole(Mockito.any(MetricsPerFunctionalRole.class)); + } + + + @Test + public void testConvertRuntimeContextToTCAPolicy() throws Exception { + + final Properties controllerProperties = + AnalyticsModelIOUtils.loadPropertiesFile(TCA_CONTROLLER_POLICY_FILE_LOCATION); + + Map<String, String> runtimeArgs = new LinkedHashMap<>(); + for (Map.Entry<Object, Object> property : controllerProperties.entrySet()) { + runtimeArgs.put(property.getKey().toString(), property.getValue().toString()); + } + + RuntimeContext runtimeContext = mock(RuntimeContext.class); + when(runtimeContext.getRuntimeArguments()).thenReturn(runtimeArgs); + final TCAPolicy tcaPolicy = TCAUtils.getValidatedTCAPolicyPreferences(runtimeContext); + + assertThat("Policy Domain must be measurementsForVfScaling", + tcaPolicy.getDomain(), is("measurementsForVfScaling")); + + assertThat("Policy must have 2 metrics per functional roles", + tcaPolicy.getMetricsPerFunctionalRole().size(), is(2)); + + } +} diff --git a/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/worker/TCADMaaPMRSubscriberJobTest.java b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/worker/TCADMaaPMRSubscriberJobTest.java new file mode 100644 index 0000000..bc8a6f0 --- /dev/null +++ b/dcae-analytics-tca/src/test/java/org/openecomp/dcae/analytics/tca/worker/TCADMaaPMRSubscriberJobTest.java @@ -0,0 +1,80 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.tca.worker; + +import co.cask.cdap.api.metrics.Metrics; +import co.cask.cdap.api.worker.WorkerConfigurer; +import co.cask.cdap.api.worker.WorkerContext; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; +import org.openecomp.dcae.analytics.common.AnalyticsConstants; +import org.openecomp.dcae.analytics.dmaap.service.subscriber.DMaaPMRSubscriber; +import org.openecomp.dcae.analytics.tca.BaseAnalyticsTCAUnitTest; +import org.quartz.JobDataMap; +import org.quartz.JobExecutionContext; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +/** + * @author Manjesh Gowda. Creation Date: 11/18/2016. + */ +@RunWith(MockitoJUnitRunner.class) +public class TCADMaaPMRSubscriberJobTest extends BaseAnalyticsTCAUnitTest { + + @Test + public void testExecute() throws Exception { + + DMaaPMRSubscriber mockDMaaPMRSubscriber = mock(DMaaPMRSubscriber.class); + Metrics mockMetrics = mock(Metrics.class); + + WorkerContext workerContext = mock(WorkerContext.class); + WorkerConfigurer workerConfigurer = mock(WorkerConfigurer.class); + //when(workerContext.getRuntimeArguments()).thenReturn(getPreferenceMap()); + + JobExecutionContext mockJobExecutionContext = mock(JobExecutionContext.class); + JobDataMap mockJobDataMap = mock(JobDataMap.class); + when(mockJobExecutionContext.getMergedJobDataMap()).thenReturn(mockJobDataMap); + + /*when(mockJobDataMap.getString(AnalyticsConstants.CDAP_STREAM_VARIABLE_NAME)) + .thenReturn(CDAPComponentsConstants.TCA_FIXED_SUBSCRIBER_OUTPUT_NAME_STREAM);*/ + + when(mockJobDataMap.get(AnalyticsConstants.WORKER_CONTEXT_VARIABLE_NAME)) + .thenReturn(workerContext); + + when(mockJobDataMap.get(AnalyticsConstants.DMAAP_SUBSCRIBER_VARIABLE_NAME)) + .thenReturn(mockDMaaPMRSubscriber); + + /*when(mockJobDataMap.get(AnalyticsConstants.DMAAP_SUBSCRIBER_METRICS_VARIABLE_NAME)) + .thenReturn(mockMetrics);*/ + + TCADMaaPMRSubscriberJob tcaDMaaPMRSubscriberJob = new TCADMaaPMRSubscriberJob(); + tcaDMaaPMRSubscriberJob.execute(mockJobExecutionContext); + + verify(mockJobDataMap, times(1)).getString(Mockito.anyString()); + verify(mockJobDataMap, times(3)).get(any()); + } +} diff --git a/dcae-analytics-tca/src/test/resources/data/json/cef/cef_message.json b/dcae-analytics-tca/src/test/resources/data/json/cef/cef_message.json new file mode 100644 index 0000000..52cf53b --- /dev/null +++ b/dcae-analytics-tca/src/test/resources/data/json/cef/cef_message.json @@ -0,0 +1,37 @@ +{ + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6086, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7156, + "packetsIn": 93, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070210290442, + "eventId": "375", + "lastEpochMicrosec": 1477070220290442, + "priority": "Normal", + "sequence": 375, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } +} diff --git a/dcae-analytics-tca/src/test/resources/data/json/cef/cef_message_with_threshold_violation.json b/dcae-analytics-tca/src/test/resources/data/json/cef/cef_message_with_threshold_violation.json new file mode 100644 index 0000000..bfb1672 --- /dev/null +++ b/dcae-analytics-tca/src/test/resources/data/json/cef/cef_message_with_threshold_violation.json @@ -0,0 +1,37 @@ +{ + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 20000, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7156, + "packetsIn": 93, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070210290442, + "eventId": "375", + "lastEpochMicrosec": 1477070220290442, + "priority": "Normal", + "sequence": 375, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } +} diff --git a/dcae-analytics-tca/src/test/resources/data/json/cef/cef_messages.json b/dcae-analytics-tca/src/test/resources/data/json/cef/cef_messages.json new file mode 100644 index 0000000..bc7a924 --- /dev/null +++ b/dcae-analytics-tca/src/test/resources/data/json/cef/cef_messages.json @@ -0,0 +1,12952 @@ +[ + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6086, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7156, + "packetsIn": 93, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070210290442, + "eventId": "375", + "lastEpochMicrosec": 1477070220290442, + "priority": "Normal", + "sequence": 375, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5403, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 4530, + "packetsIn": 78, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070260383311, + "eventId": "380", + "lastEpochMicrosec": 1477070270383311, + "priority": "Normal", + "sequence": 380, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3972, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5316, + "packetsIn": 56, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070290441950, + "eventId": "383", + "lastEpochMicrosec": 1477070300441950, + "priority": "Normal", + "sequence": 383, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4761, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5528, + "packetsIn": 70, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070380597960, + "eventId": "392", + "lastEpochMicrosec": 1477070390597960, + "priority": "Normal", + "sequence": 392, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5828, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5222, + "packetsIn": 89, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070390615151, + "eventId": "393", + "lastEpochMicrosec": 1477070400615151, + "priority": "Normal", + "sequence": 393, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3834, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4334, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070701189940, + "eventId": "424", + "lastEpochMicrosec": 1477070711189940, + "priority": "Normal", + "sequence": 424, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3892, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4400, + "packetsIn": 53, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070851466814, + "eventId": "439", + "lastEpochMicrosec": 1477070861466814, + "priority": "Normal", + "sequence": 439, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5948, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5215, + "packetsIn": 90, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070931613946, + "eventId": "447", + "lastEpochMicrosec": 1477070941613946, + "priority": "Normal", + "sequence": 447, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4324, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5436, + "packetsIn": 57, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070971689950, + "eventId": "451", + "lastEpochMicrosec": 1477070981689950, + "priority": "Normal", + "sequence": 451, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5918, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 34, + "bytesOut": 5668, + "packetsIn": 91, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070991724150, + "eventId": "453", + "lastEpochMicrosec": 1477071001724150, + "priority": "Normal", + "sequence": 453, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4200, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 5192, + "packetsIn": 63, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071081905713, + "eventId": "462", + "lastEpochMicrosec": 1477071091905713, + "priority": "Normal", + "sequence": 462, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4490, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 36, + "bytesOut": 5920, + "packetsIn": 67, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071262221510, + "eventId": "480", + "lastEpochMicrosec": 1477071272221510, + "priority": "Normal", + "sequence": 480, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 25940, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 157, + "bytesOut": 27474, + "packetsIn": 303, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071412476618, + "eventId": "495", + "lastEpochMicrosec": 1477071422476618, + "priority": "Normal", + "sequence": 495, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7160, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5418, + "packetsIn": 112, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071532712315, + "eventId": "507", + "lastEpochMicrosec": 1477071542712315, + "priority": "Normal", + "sequence": 507, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5563, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4192, + "packetsIn": 81, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071582806156, + "eventId": "512", + "lastEpochMicrosec": 1477071592806156, + "priority": "Normal", + "sequence": 512, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4988, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5218, + "packetsIn": 77, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071592825964, + "eventId": "513", + "lastEpochMicrosec": 1477071602825964, + "priority": "Normal", + "sequence": 513, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 9123, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 53, + "bytesOut": 8412, + "packetsIn": 127, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071642920935, + "eventId": "518", + "lastEpochMicrosec": 1477071652920935, + "priority": "Normal", + "sequence": 518, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 18442, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 112, + "bytesOut": 19404, + "packetsIn": 218, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071733101176, + "eventId": "527", + "lastEpochMicrosec": 1477071743101176, + "priority": "Normal", + "sequence": 527, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5216, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5130, + "packetsIn": 80, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071743125902, + "eventId": "528", + "lastEpochMicrosec": 1477071753125902, + "priority": "Normal", + "sequence": 528, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5870, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 36, + "bytesOut": 6716, + "packetsIn": 91, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071903446337, + "eventId": "544", + "lastEpochMicrosec": 1477071913446337, + "priority": "Normal", + "sequence": 544, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 35138, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 220, + "bytesOut": 47818, + "packetsIn": 407, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071953549981, + "eventId": "549", + "lastEpochMicrosec": 1477071963549981, + "priority": "Normal", + "sequence": 549, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 63510, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 398, + "bytesOut": 71038, + "packetsIn": 703, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071963565170, + "eventId": "550", + "lastEpochMicrosec": 1477071973565170, + "priority": "Normal", + "sequence": 550, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4250, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 5060, + "packetsIn": 64, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072103847337, + "eventId": "564", + "lastEpochMicrosec": 1477072113847337, + "priority": "Normal", + "sequence": 564, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3344, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 23, + "bytesOut": 4138, + "packetsIn": 49, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072163977616, + "eventId": "570", + "lastEpochMicrosec": 1477072173977616, + "priority": "Normal", + "sequence": 570, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4190, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 5032, + "packetsIn": 63, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072194037594, + "eventId": "573", + "lastEpochMicrosec": 1477072204037594, + "priority": "Normal", + "sequence": 573, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4102, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5418, + "packetsIn": 54, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072234105966, + "eventId": "577", + "lastEpochMicrosec": 1477072244105966, + "priority": "Normal", + "sequence": 577, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4040, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5410, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072284197410, + "eventId": "582", + "lastEpochMicrosec": 1477072294197410, + "priority": "Normal", + "sequence": 582, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4348, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5556, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072294217952, + "eventId": "583", + "lastEpochMicrosec": 1477072304217952, + "priority": "Normal", + "sequence": 583, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4820, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5402, + "packetsIn": 66, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072354321794, + "eventId": "589", + "lastEpochMicrosec": 1477072364321794, + "priority": "Normal", + "sequence": 589, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5006, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7156, + "packetsIn": 73, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072454499759, + "eventId": "599", + "lastEpochMicrosec": 1477072464499759, + "priority": "Normal", + "sequence": 599, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4964, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 35, + "bytesOut": 5834, + "packetsIn": 75, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072494602015, + "eventId": "603", + "lastEpochMicrosec": 1477072504602015, + "priority": "Normal", + "sequence": 603, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5330, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 46, + "bytesOut": 7420, + "packetsIn": 80, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072634866475, + "eventId": "617", + "lastEpochMicrosec": 1477072644866475, + "priority": "Normal", + "sequence": 617, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5330, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 46, + "bytesOut": 7420, + "packetsIn": 80, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072745069203, + "eventId": "628", + "lastEpochMicrosec": 1477072755069203, + "priority": "Normal", + "sequence": 628, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 263112, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 1165, + "bytesOut": 337182, + "packetsIn": 2570, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072805174346, + "eventId": "634", + "lastEpochMicrosec": 1477072815174346, + "priority": "Normal", + "sequence": 634, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 11212, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4232, + "packetsIn": 176, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072835250994, + "eventId": "637", + "lastEpochMicrosec": 1477072845250994, + "priority": "Normal", + "sequence": 637, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6375, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5516, + "packetsIn": 94, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072845276414, + "eventId": "638", + "lastEpochMicrosec": 1477072855276414, + "priority": "Normal", + "sequence": 638, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3492, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 5252, + "packetsIn": 50, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072995553968, + "eventId": "653", + "lastEpochMicrosec": 1477073005553968, + "priority": "Normal", + "sequence": 653, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4256, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5407, + "packetsIn": 63, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073095741898, + "eventId": "663", + "lastEpochMicrosec": 1477073105741898, + "priority": "Normal", + "sequence": 663, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4280, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4866, + "packetsIn": 56, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073195929121, + "eventId": "673", + "lastEpochMicrosec": 1477073205929121, + "priority": "Normal", + "sequence": 673, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4076, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5126, + "packetsIn": 61, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073286097936, + "eventId": "682", + "lastEpochMicrosec": 1477073296097936, + "priority": "Normal", + "sequence": 682, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5054, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6600, + "packetsIn": 78, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073366234417, + "eventId": "690", + "lastEpochMicrosec": 1477073376234417, + "priority": "Normal", + "sequence": 690, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5186, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7220, + "packetsIn": 78, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073426339606, + "eventId": "696", + "lastEpochMicrosec": 1477073436339606, + "priority": "Normal", + "sequence": 696, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4568, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 39, + "bytesOut": 6606, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073556577962, + "eventId": "709", + "lastEpochMicrosec": 1477073566577962, + "priority": "Normal", + "sequence": 709, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4472, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5630, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073606669965, + "eventId": "714", + "lastEpochMicrosec": 1477073616669965, + "priority": "Normal", + "sequence": 714, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3554, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 5192, + "packetsIn": 52, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073666794004, + "eventId": "720", + "lastEpochMicrosec": 1477073676794004, + "priority": "Normal", + "sequence": 720, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4682, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6540, + "packetsIn": 70, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070300458069, + "eventId": "384", + "lastEpochMicrosec": 1477070310458069, + "priority": "Normal", + "sequence": 384, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4470, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 43, + "bytesOut": 7250, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070350545310, + "eventId": "389", + "lastEpochMicrosec": 1477070360545310, + "priority": "Normal", + "sequence": 389, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5864, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 45, + "bytesOut": 7318, + "packetsIn": 88, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070450716636, + "eventId": "399", + "lastEpochMicrosec": 1477070460716636, + "priority": "Normal", + "sequence": 399, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3558, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5362, + "packetsIn": 51, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070470756168, + "eventId": "401", + "lastEpochMicrosec": 1477070480756168, + "priority": "Normal", + "sequence": 401, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5022, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 45, + "bytesOut": 7382, + "packetsIn": 74, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070530883239, + "eventId": "407", + "lastEpochMicrosec": 1477070540883239, + "priority": "Normal", + "sequence": 407, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4816, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5344, + "packetsIn": 66, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070611026436, + "eventId": "415", + "lastEpochMicrosec": 1477070621026436, + "priority": "Normal", + "sequence": 415, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 8898, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 63, + "bytesOut": 9201, + "packetsIn": 113, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070831428780, + "eventId": "437", + "lastEpochMicrosec": 1477070841428780, + "priority": "Normal", + "sequence": 437, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3836, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 23, + "bytesOut": 4162, + "packetsIn": 57, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070941633936, + "eventId": "448", + "lastEpochMicrosec": 1477070951633936, + "priority": "Normal", + "sequence": 448, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3248, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 4546, + "packetsIn": 47, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071071883807, + "eventId": "461", + "lastEpochMicrosec": 1477071081883807, + "priority": "Normal", + "sequence": 461, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5006, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5286, + "packetsIn": 76, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071172066272, + "eventId": "471", + "lastEpochMicrosec": 1477071182066272, + "priority": "Normal", + "sequence": 471, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5438, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 34, + "bytesOut": 6084, + "packetsIn": 83, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071182086282, + "eventId": "472", + "lastEpochMicrosec": 1477071192086282, + "priority": "Normal", + "sequence": 472, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 14114, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 92, + "bytesOut": 16060, + "packetsIn": 172, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071382426114, + "eventId": "492", + "lastEpochMicrosec": 1477071392426114, + "priority": "Normal", + "sequence": 492, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5617, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5427, + "packetsIn": 86, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071542733962, + "eventId": "508", + "lastEpochMicrosec": 1477071552733962, + "priority": "Normal", + "sequence": 508, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4448, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 4538, + "packetsIn": 67, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071682993575, + "eventId": "522", + "lastEpochMicrosec": 1477071692993575, + "priority": "Normal", + "sequence": 522, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6113, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5298, + "packetsIn": 87, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071703031027, + "eventId": "524", + "lastEpochMicrosec": 1477071713031027, + "priority": "Normal", + "sequence": 524, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5542, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5434, + "packetsIn": 78, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071813273088, + "eventId": "535", + "lastEpochMicrosec": 1477071823273088, + "priority": "Normal", + "sequence": 535, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 34574, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 214, + "bytesOut": 47040, + "packetsIn": 395, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072023686281, + "eventId": "556", + "lastEpochMicrosec": 1477072033686281, + "priority": "Normal", + "sequence": 556, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 2798, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 22, + "bytesOut": 4028, + "packetsIn": 40, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072093829958, + "eventId": "563", + "lastEpochMicrosec": 1477072103829958, + "priority": "Normal", + "sequence": 563, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3446, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5536, + "packetsIn": 50, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072153957985, + "eventId": "569", + "lastEpochMicrosec": 1477072163957985, + "priority": "Normal", + "sequence": 569, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4190, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 36, + "bytesOut": 6760, + "packetsIn": 62, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072204053021, + "eventId": "574", + "lastEpochMicrosec": 1477072214053021, + "priority": "Normal", + "sequence": 574, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5939, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 4522, + "packetsIn": 85, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072244123508, + "eventId": "578", + "lastEpochMicrosec": 1477072254123508, + "priority": "Normal", + "sequence": 578, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4022, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 4584, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072464518421, + "eventId": "600", + "lastEpochMicrosec": 1477072474518421, + "priority": "Normal", + "sequence": 600, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3692, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 21, + "bytesOut": 3918, + "packetsIn": 47, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072654900903, + "eventId": "619", + "lastEpochMicrosec": 1477072664900903, + "priority": "Normal", + "sequence": 619, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5006, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5728, + "packetsIn": 76, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072704996775, + "eventId": "624", + "lastEpochMicrosec": 1477072714996775, + "priority": "Normal", + "sequence": 624, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3836, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 5036, + "packetsIn": 57, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072925428340, + "eventId": "646", + "lastEpochMicrosec": 1477072935428340, + "priority": "Normal", + "sequence": 646, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4040, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5382, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072985535172, + "eventId": "652", + "lastEpochMicrosec": 1477072995535172, + "priority": "Normal", + "sequence": 652, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4694, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5316, + "packetsIn": 63, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073075701224, + "eventId": "661", + "lastEpochMicrosec": 1477073085701224, + "priority": "Normal", + "sequence": 661, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5066, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7120, + "packetsIn": 76, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073105759457, + "eventId": "664", + "lastEpochMicrosec": 1477073115759457, + "priority": "Normal", + "sequence": 664, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5510, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 46, + "bytesOut": 7421, + "packetsIn": 83, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073155858608, + "eventId": "669", + "lastEpochMicrosec": 1477073165858608, + "priority": "Normal", + "sequence": 669, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4146, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5214, + "packetsIn": 61, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073416320492, + "eventId": "695", + "lastEpochMicrosec": 1477073426320492, + "priority": "Normal", + "sequence": 695, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5610, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 44, + "bytesOut": 7392, + "packetsIn": 76, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073436360527, + "eventId": "697", + "lastEpochMicrosec": 1477073446360527, + "priority": "Normal", + "sequence": 697, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6777, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5276, + "packetsIn": 101, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073506489807, + "eventId": "704", + "lastEpochMicrosec": 1477073516489807, + "priority": "Normal", + "sequence": 704, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4898, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 34, + "bytesOut": 6005, + "packetsIn": 74, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073516505974, + "eventId": "705", + "lastEpochMicrosec": 1477073526505974, + "priority": "Normal", + "sequence": 705, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3902, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5120, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073656765261, + "eventId": "719", + "lastEpochMicrosec": 1477073666765261, + "priority": "Normal", + "sequence": 719, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7185, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 37, + "bytesOut": 6488, + "packetsIn": 108, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073686831588, + "eventId": "722", + "lastEpochMicrosec": 1477073696831588, + "priority": "Normal", + "sequence": 722, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4778, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5084, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070240346627, + "eventId": "378", + "lastEpochMicrosec": 1477070250346627, + "priority": "Normal", + "sequence": 378, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5318, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4864, + "packetsIn": 82, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070270398947, + "eventId": "381", + "lastEpochMicrosec": 1477070280398947, + "priority": "Normal", + "sequence": 381, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5079, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5266, + "packetsIn": 71, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070440700538, + "eventId": "398", + "lastEpochMicrosec": 1477070450700538, + "priority": "Normal", + "sequence": 398, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3866, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 22, + "bytesOut": 3980, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070601009676, + "eventId": "414", + "lastEpochMicrosec": 1477070611009676, + "priority": "Normal", + "sequence": 414, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 10154, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 43, + "bytesOut": 7884, + "packetsIn": 99, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070751281687, + "eventId": "429", + "lastEpochMicrosec": 1477070761281687, + "priority": "Normal", + "sequence": 429, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7970, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5427, + "packetsIn": 128, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070781332864, + "eventId": "432", + "lastEpochMicrosec": 1477070791332864, + "priority": "Normal", + "sequence": 432, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6052, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7480, + "packetsIn": 82, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070891536182, + "eventId": "443", + "lastEpochMicrosec": 1477070901536182, + "priority": "Normal", + "sequence": 443, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5080, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 44, + "bytesOut": 7288, + "packetsIn": 69, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071031806592, + "eventId": "457", + "lastEpochMicrosec": 1477071041806592, + "priority": "Normal", + "sequence": 457, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4777, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4122, + "packetsIn": 67, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071041825555, + "eventId": "458", + "lastEpochMicrosec": 1477071051825555, + "priority": "Normal", + "sequence": 458, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4736, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4302, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071111957977, + "eventId": "465", + "lastEpochMicrosec": 1477071121957977, + "priority": "Normal", + "sequence": 465, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6283, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 35, + "bytesOut": 5272, + "packetsIn": 89, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071162050981, + "eventId": "470", + "lastEpochMicrosec": 1477071172050981, + "priority": "Normal", + "sequence": 470, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5010, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 43, + "bytesOut": 7250, + "packetsIn": 74, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071192103048, + "eventId": "473", + "lastEpochMicrosec": 1477071202103048, + "priority": "Normal", + "sequence": 473, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3360, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 5112, + "packetsIn": 48, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071252204852, + "eventId": "479", + "lastEpochMicrosec": 1477071262204852, + "priority": "Normal", + "sequence": 479, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3912, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5324, + "packetsIn": 57, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071312304729, + "eventId": "485", + "lastEpochMicrosec": 1477071322304729, + "priority": "Normal", + "sequence": 485, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4568, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5294, + "packetsIn": 70, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071352377904, + "eventId": "489", + "lastEpochMicrosec": 1477071362377904, + "priority": "Normal", + "sequence": 489, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 26549, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 158, + "bytesOut": 28258, + "packetsIn": 311, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071402460522, + "eventId": "494", + "lastEpochMicrosec": 1477071412460522, + "priority": "Normal", + "sequence": 494, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5329, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4270, + "packetsIn": 78, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071462573938, + "eventId": "500", + "lastEpochMicrosec": 1477071472573938, + "priority": "Normal", + "sequence": 500, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6232, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 46, + "bytesOut": 7420, + "packetsIn": 86, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071572787941, + "eventId": "511", + "lastEpochMicrosec": 1477071582787941, + "priority": "Normal", + "sequence": 511, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4532, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 20, + "bytesOut": 3809, + "packetsIn": 69, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071662956095, + "eventId": "520", + "lastEpochMicrosec": 1477071672956095, + "priority": "Normal", + "sequence": 520, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4520, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5490, + "packetsIn": 68, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071672977950, + "eventId": "521", + "lastEpochMicrosec": 1477071682977950, + "priority": "Normal", + "sequence": 521, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5002, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 4734, + "packetsIn": 68, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071693013688, + "eventId": "523", + "lastEpochMicrosec": 1477071703013688, + "priority": "Normal", + "sequence": 523, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5516, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 5023, + "packetsIn": 85, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071893429573, + "eventId": "543", + "lastEpochMicrosec": 1477071903429573, + "priority": "Normal", + "sequence": 543, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 18644, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 120, + "bytesOut": 20884, + "packetsIn": 230, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071923478914, + "eventId": "546", + "lastEpochMicrosec": 1477071933478914, + "priority": "Normal", + "sequence": 546, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4914, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5640, + "packetsIn": 71, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071983602387, + "eventId": "552", + "lastEpochMicrosec": 1477071993602387, + "priority": "Normal", + "sequence": 552, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 8506, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 60, + "bytesOut": 11100, + "packetsIn": 110, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071993632316, + "eventId": "553", + "lastEpochMicrosec": 1477072003632316, + "priority": "Normal", + "sequence": 553, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 17750, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 120, + "bytesOut": 25832, + "packetsIn": 215, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072043723108, + "eventId": "558", + "lastEpochMicrosec": 1477072053723108, + "priority": "Normal", + "sequence": 558, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4592, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5504, + "packetsIn": 69, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072143938037, + "eventId": "568", + "lastEpochMicrosec": 1477072153938037, + "priority": "Normal", + "sequence": 568, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 8125, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 55, + "bytesOut": 8060, + "packetsIn": 119, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072364341906, + "eventId": "590", + "lastEpochMicrosec": 1477072374341906, + "priority": "Normal", + "sequence": 590, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4136, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5851, + "packetsIn": 62, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072374359351, + "eventId": "591", + "lastEpochMicrosec": 1477072384359351, + "priority": "Normal", + "sequence": 591, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4388, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5206, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072474537911, + "eventId": "601", + "lastEpochMicrosec": 1477072484537911, + "priority": "Normal", + "sequence": 601, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5228, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6932, + "packetsIn": 71, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072534679739, + "eventId": "607", + "lastEpochMicrosec": 1477072544679739, + "priority": "Normal", + "sequence": 607, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3836, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5018, + "packetsIn": 55, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072574755001, + "eventId": "611", + "lastEpochMicrosec": 1477072584755001, + "priority": "Normal", + "sequence": 611, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6919, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5628, + "packetsIn": 104, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072725036569, + "eventId": "626", + "lastEpochMicrosec": 1477072735036569, + "priority": "Normal", + "sequence": 626, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4442, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6892, + "packetsIn": 66, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072855292945, + "eventId": "639", + "lastEpochMicrosec": 1477072865292945, + "priority": "Normal", + "sequence": 639, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6909, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 6802, + "packetsIn": 102, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072905381152, + "eventId": "644", + "lastEpochMicrosec": 1477072915381152, + "priority": "Normal", + "sequence": 644, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4826, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7156, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072945465009, + "eventId": "648", + "lastEpochMicrosec": 1477072955465009, + "priority": "Normal", + "sequence": 648, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3636, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4160, + "packetsIn": 53, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073115777000, + "eventId": "665", + "lastEpochMicrosec": 1477073125777000, + "priority": "Normal", + "sequence": 665, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4098, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5354, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073235998974, + "eventId": "677", + "lastEpochMicrosec": 1477073245998974, + "priority": "Normal", + "sequence": 677, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4508, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5166, + "packetsIn": 68, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073246017901, + "eventId": "678", + "lastEpochMicrosec": 1477073256017901, + "priority": "Normal", + "sequence": 678, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4026, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5358, + "packetsIn": 59, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073296117387, + "eventId": "683", + "lastEpochMicrosec": 1477073306117387, + "priority": "Normal", + "sequence": 683, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3938, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4168, + "packetsIn": 49, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073376250039, + "eventId": "691", + "lastEpochMicrosec": 1477073386250039, + "priority": "Normal", + "sequence": 691, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4514, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5324, + "packetsIn": 70, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073586625284, + "eventId": "712", + "lastEpochMicrosec": 1477073596625284, + "priority": "Normal", + "sequence": 712, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5193, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 35, + "bytesOut": 5748, + "packetsIn": 74, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070200274642, + "eventId": "374", + "lastEpochMicrosec": 1477070210274642, + "priority": "Normal", + "sequence": 374, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4208, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 4874, + "packetsIn": 63, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070220308044, + "eventId": "376", + "lastEpochMicrosec": 1477070230308044, + "priority": "Normal", + "sequence": 376, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4102, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5346, + "packetsIn": 55, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070490793952, + "eventId": "403", + "lastEpochMicrosec": 1477070500793952, + "priority": "Normal", + "sequence": 403, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3278, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 22, + "bytesOut": 4036, + "packetsIn": 48, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070540900880, + "eventId": "408", + "lastEpochMicrosec": 1477070550900880, + "priority": "Normal", + "sequence": 408, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4094, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5333, + "packetsIn": 61, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070580972300, + "eventId": "412", + "lastEpochMicrosec": 1477070590972300, + "priority": "Normal", + "sequence": 412, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6261, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5472, + "packetsIn": 93, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070621041944, + "eventId": "416", + "lastEpochMicrosec": 1477070631041944, + "priority": "Normal", + "sequence": 416, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4462, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5302, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070671133935, + "eventId": "421", + "lastEpochMicrosec": 1477070681133935, + "priority": "Normal", + "sequence": 421, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3518, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 22, + "bytesOut": 4028, + "packetsIn": 52, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070721225970, + "eventId": "426", + "lastEpochMicrosec": 1477070731225970, + "priority": "Normal", + "sequence": 426, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7454, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 50, + "bytesOut": 7435, + "packetsIn": 100, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070771317040, + "eventId": "431", + "lastEpochMicrosec": 1477070781317040, + "priority": "Normal", + "sequence": 431, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 46408, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 282, + "bytesOut": 41467, + "packetsIn": 531, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070811385505, + "eventId": "435", + "lastEpochMicrosec": 1477070821385505, + "priority": "Normal", + "sequence": 435, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4444, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 4436, + "packetsIn": 61, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071091925961, + "eventId": "463", + "lastEpochMicrosec": 1477071101925961, + "priority": "Normal", + "sequence": 463, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5120, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 4898, + "packetsIn": 77, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071362393895, + "eventId": "490", + "lastEpochMicrosec": 1477071372393895, + "priority": "Normal", + "sequence": 490, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4314, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4326, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071372410540, + "eventId": "491", + "lastEpochMicrosec": 1477071382410540, + "priority": "Normal", + "sequence": 491, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5072, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5518, + "packetsIn": 77, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071422497943, + "eventId": "496", + "lastEpochMicrosec": 1477071432497943, + "priority": "Normal", + "sequence": 496, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4868, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5286, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071602842823, + "eventId": "514", + "lastEpochMicrosec": 1477071612842823, + "priority": "Normal", + "sequence": 514, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5534, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5324, + "packetsIn": 85, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071863369947, + "eventId": "540", + "lastEpochMicrosec": 1477071873369947, + "priority": "Normal", + "sequence": 540, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4594, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 23, + "bytesOut": 4074, + "packetsIn": 63, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071873389953, + "eventId": "541", + "lastEpochMicrosec": 1477071883389953, + "priority": "Normal", + "sequence": 541, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 9377, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 46, + "bytesOut": 7894, + "packetsIn": 130, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071883407370, + "eventId": "542", + "lastEpochMicrosec": 1477071893407370, + "priority": "Normal", + "sequence": 542, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5864, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 45, + "bytesOut": 7318, + "packetsIn": 88, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071913462011, + "eventId": "545", + "lastEpochMicrosec": 1477071923462011, + "priority": "Normal", + "sequence": 545, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 27350, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 164, + "bytesOut": 35804, + "packetsIn": 324, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072013669950, + "eventId": "555", + "lastEpochMicrosec": 1477072023669950, + "priority": "Normal", + "sequence": 555, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5981, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 4364, + "packetsIn": 86, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072304235475, + "eventId": "584", + "lastEpochMicrosec": 1477072314235475, + "priority": "Normal", + "sequence": 584, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 203574, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 23, + "bytesOut": 4122, + "packetsIn": 308, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072554718395, + "eventId": "609", + "lastEpochMicrosec": 1477072564718395, + "priority": "Normal", + "sequence": 609, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4142, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5495, + "packetsIn": 63, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072564737954, + "eventId": "610", + "lastEpochMicrosec": 1477072574737954, + "priority": "Normal", + "sequence": 610, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4172, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 23, + "bytesOut": 4066, + "packetsIn": 63, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072684959633, + "eventId": "622", + "lastEpochMicrosec": 1477072694959633, + "priority": "Normal", + "sequence": 622, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4682, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 36, + "bytesOut": 6100, + "packetsIn": 70, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072694977636, + "eventId": "623", + "lastEpochMicrosec": 1477072704977636, + "priority": "Normal", + "sequence": 623, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5024, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 35, + "bytesOut": 5999, + "packetsIn": 74, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072735051857, + "eventId": "627", + "lastEpochMicrosec": 1477072745051857, + "priority": "Normal", + "sequence": 627, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6750, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7198, + "packetsIn": 98, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072785141695, + "eventId": "632", + "lastEpochMicrosec": 1477072795141695, + "priority": "Normal", + "sequence": 632, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 38530, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 249, + "bytesOut": 54426, + "packetsIn": 436, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072795156085, + "eventId": "633", + "lastEpochMicrosec": 1477072805156085, + "priority": "Normal", + "sequence": 633, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4616, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 37, + "bytesOut": 6826, + "packetsIn": 69, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072885342781, + "eventId": "642", + "lastEpochMicrosec": 1477072895342781, + "priority": "Normal", + "sequence": 642, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4934, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5316, + "packetsIn": 67, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072895361934, + "eventId": "643", + "lastEpochMicrosec": 1477072905361934, + "priority": "Normal", + "sequence": 643, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4362, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 35, + "bytesOut": 6786, + "packetsIn": 64, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072935447654, + "eventId": "647", + "lastEpochMicrosec": 1477072945447654, + "priority": "Normal", + "sequence": 647, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4562, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 5136, + "packetsIn": 68, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073065678387, + "eventId": "660", + "lastEpochMicrosec": 1477073075678387, + "priority": "Normal", + "sequence": 660, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7173, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 45, + "bytesOut": 7368, + "packetsIn": 106, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073085719086, + "eventId": "662", + "lastEpochMicrosec": 1477073095719086, + "priority": "Normal", + "sequence": 662, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4826, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 44, + "bytesOut": 7120, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073185910566, + "eventId": "672", + "lastEpochMicrosec": 1477073195910566, + "priority": "Normal", + "sequence": 672, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4502, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 5304, + "packetsIn": 70, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073336185348, + "eventId": "687", + "lastEpochMicrosec": 1477073346185348, + "priority": "Normal", + "sequence": 687, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4448, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5558, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073346200536, + "eventId": "688", + "lastEpochMicrosec": 1477073356200536, + "priority": "Normal", + "sequence": 688, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7053, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 45, + "bytesOut": 7368, + "packetsIn": 105, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073446375491, + "eventId": "698", + "lastEpochMicrosec": 1477073456375491, + "priority": "Normal", + "sequence": 698, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3966, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5214, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073596641959, + "eventId": "713", + "lastEpochMicrosec": 1477073606641959, + "priority": "Normal", + "sequence": 713, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4318, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 4634, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070250365937, + "eventId": "379", + "lastEpochMicrosec": 1477070260365937, + "priority": "Normal", + "sequence": 379, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3746, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5536, + "packetsIn": 53, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070340529599, + "eventId": "388", + "lastEpochMicrosec": 1477070350529599, + "priority": "Normal", + "sequence": 388, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7322, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 48, + "bytesOut": 7616, + "packetsIn": 113, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070510835835, + "eventId": "405", + "lastEpochMicrosec": 1477070520835835, + "priority": "Normal", + "sequence": 405, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4442, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6469, + "packetsIn": 66, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070520864347, + "eventId": "406", + "lastEpochMicrosec": 1477070530864347, + "priority": "Normal", + "sequence": 406, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3638, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 22, + "bytesOut": 4044, + "packetsIn": 53, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070651095730, + "eventId": "419", + "lastEpochMicrosec": 1477070661095730, + "priority": "Normal", + "sequence": 419, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3416, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5090, + "packetsIn": 48, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070711206504, + "eventId": "425", + "lastEpochMicrosec": 1477070721206504, + "priority": "Normal", + "sequence": 425, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5908, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6213, + "packetsIn": 78, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070791351649, + "eventId": "433", + "lastEpochMicrosec": 1477070801351649, + "priority": "Normal", + "sequence": 433, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 10199, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 68, + "bytesOut": 11842, + "packetsIn": 135, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070801369956, + "eventId": "434", + "lastEpochMicrosec": 1477070811369956, + "priority": "Normal", + "sequence": 434, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 26090, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 164, + "bytesOut": 33153, + "packetsIn": 300, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070841450160, + "eventId": "438", + "lastEpochMicrosec": 1477070851450160, + "priority": "Normal", + "sequence": 438, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6205, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 34, + "bytesOut": 5794, + "packetsIn": 90, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070981705399, + "eventId": "452", + "lastEpochMicrosec": 1477070991705399, + "priority": "Normal", + "sequence": 452, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3980, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5410, + "packetsIn": 59, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071061865954, + "eventId": "460", + "lastEpochMicrosec": 1477071071865954, + "priority": "Normal", + "sequence": 460, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 31224, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 197, + "bytesOut": 34890, + "packetsIn": 357, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071121977934, + "eventId": "466", + "lastEpochMicrosec": 1477071131977934, + "priority": "Normal", + "sequence": 466, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 25732, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 162, + "bytesOut": 31700, + "packetsIn": 302, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071131999094, + "eventId": "467", + "lastEpochMicrosec": 1477071141999094, + "priority": "Normal", + "sequence": 467, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 169618, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7186, + "packetsIn": 289, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071212141392, + "eventId": "475", + "lastEpochMicrosec": 1477071222141392, + "priority": "Normal", + "sequence": 475, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7477, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 46, + "bytesOut": 7465, + "packetsIn": 110, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071222158382, + "eventId": "476", + "lastEpochMicrosec": 1477071232158382, + "priority": "Normal", + "sequence": 476, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5908, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7156, + "packetsIn": 83, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071272238317, + "eventId": "481", + "lastEpochMicrosec": 1477071282238317, + "priority": "Normal", + "sequence": 481, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4504, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5074, + "packetsIn": 61, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071332342318, + "eventId": "487", + "lastEpochMicrosec": 1477071342342318, + "priority": "Normal", + "sequence": 487, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6139, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 4836, + "packetsIn": 89, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071342361964, + "eventId": "488", + "lastEpochMicrosec": 1477071352361964, + "priority": "Normal", + "sequence": 488, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 22038, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 143, + "bytesOut": 25109, + "packetsIn": 257, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071392443903, + "eventId": "493", + "lastEpochMicrosec": 1477071402443903, + "priority": "Normal", + "sequence": 493, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 28990, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 185, + "bytesOut": 34734, + "packetsIn": 342, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071442534871, + "eventId": "498", + "lastEpochMicrosec": 1477071452534871, + "priority": "Normal", + "sequence": 498, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 19000, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 111, + "bytesOut": 18886, + "packetsIn": 232, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071723077968, + "eventId": "526", + "lastEpochMicrosec": 1477071733077968, + "priority": "Normal", + "sequence": 526, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 22554, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 150, + "bytesOut": 27120, + "packetsIn": 270, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071783210923, + "eventId": "532", + "lastEpochMicrosec": 1477071793210923, + "priority": "Normal", + "sequence": 532, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 31406, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 192, + "bytesOut": 40382, + "packetsIn": 369, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071973585969, + "eventId": "551", + "lastEpochMicrosec": 1477071983585969, + "priority": "Normal", + "sequence": 551, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 28415, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 168, + "bytesOut": 36888, + "packetsIn": 330, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072003648795, + "eventId": "554", + "lastEpochMicrosec": 1477072013648795, + "priority": "Normal", + "sequence": 554, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4736, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5027, + "packetsIn": 71, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072073789969, + "eventId": "561", + "lastEpochMicrosec": 1477072083789969, + "priority": "Normal", + "sequence": 561, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5332, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4082, + "packetsIn": 75, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072184014433, + "eventId": "572", + "lastEpochMicrosec": 1477072194014433, + "priority": "Normal", + "sequence": 572, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3752, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5666, + "packetsIn": 55, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072214069942, + "eventId": "575", + "lastEpochMicrosec": 1477072224069942, + "priority": "Normal", + "sequence": 575, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4046, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7120, + "packetsIn": 59, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072274176817, + "eventId": "581", + "lastEpochMicrosec": 1477072284176817, + "priority": "Normal", + "sequence": 581, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4208, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5166, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072444481666, + "eventId": "598", + "lastEpochMicrosec": 1477072454481666, + "priority": "Normal", + "sequence": 598, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6649, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6038, + "packetsIn": 97, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072484565977, + "eventId": "602", + "lastEpochMicrosec": 1477072494565977, + "priority": "Normal", + "sequence": 602, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3848, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 4822, + "packetsIn": 57, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072514639844, + "eventId": "605", + "lastEpochMicrosec": 1477072524639844, + "priority": "Normal", + "sequence": 605, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6367, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 4624, + "packetsIn": 93, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072544701945, + "eventId": "608", + "lastEpochMicrosec": 1477072554701945, + "priority": "Normal", + "sequence": 608, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6553, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5362, + "packetsIn": 98, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072604809380, + "eventId": "614", + "lastEpochMicrosec": 1477072614809380, + "priority": "Normal", + "sequence": 614, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4628, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5412, + "packetsIn": 68, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072614829190, + "eventId": "615", + "lastEpochMicrosec": 1477072624829190, + "priority": "Normal", + "sequence": 615, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4352, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5630, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072644885943, + "eventId": "618", + "lastEpochMicrosec": 1477072654885943, + "priority": "Normal", + "sequence": 618, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5036, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 47, + "bytesOut": 7514, + "packetsIn": 75, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072755088807, + "eventId": "629", + "lastEpochMicrosec": 1477072765088807, + "priority": "Normal", + "sequence": 629, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4370, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4351, + "packetsIn": 66, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072915408472, + "eventId": "645", + "lastEpochMicrosec": 1477072925408472, + "priority": "Normal", + "sequence": 645, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4304, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4254, + "packetsIn": 57, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072955481939, + "eventId": "649", + "lastEpochMicrosec": 1477072965481939, + "priority": "Normal", + "sequence": 649, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4388, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5150, + "packetsIn": 66, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073005573900, + "eventId": "654", + "lastEpochMicrosec": 1477073015573900, + "priority": "Normal", + "sequence": 654, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5906, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7148, + "packetsIn": 82, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073015590437, + "eventId": "655", + "lastEpochMicrosec": 1477073025590437, + "priority": "Normal", + "sequence": 655, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3764, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 23, + "bytesOut": 4122, + "packetsIn": 56, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073045647448, + "eventId": "658", + "lastEpochMicrosec": 1477073055647448, + "priority": "Normal", + "sequence": 658, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4706, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7220, + "packetsIn": 70, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073125796934, + "eventId": "666", + "lastEpochMicrosec": 1477073135796934, + "priority": "Normal", + "sequence": 666, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7132, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 43, + "bytesOut": 7250, + "packetsIn": 103, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073135815158, + "eventId": "667", + "lastEpochMicrosec": 1477073145815158, + "priority": "Normal", + "sequence": 667, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7143, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 50, + "bytesOut": 7727, + "packetsIn": 104, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073145841670, + "eventId": "668", + "lastEpochMicrosec": 1477073155841670, + "priority": "Normal", + "sequence": 668, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6135, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5426, + "packetsIn": 90, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073266054311, + "eventId": "680", + "lastEpochMicrosec": 1477073276054311, + "priority": "Normal", + "sequence": 680, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4052, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5498, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073466418004, + "eventId": "700", + "lastEpochMicrosec": 1477073476418004, + "priority": "Normal", + "sequence": 700, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3732, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 5244, + "packetsIn": 54, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073476437957, + "eventId": "701", + "lastEpochMicrosec": 1477073486437957, + "priority": "Normal", + "sequence": 701, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4688, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5222, + "packetsIn": 71, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073526524510, + "eventId": "706", + "lastEpochMicrosec": 1477073536524510, + "priority": "Normal", + "sequence": 706, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7963, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 49, + "bytesOut": 7608, + "packetsIn": 118, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073566594681, + "eventId": "710", + "lastEpochMicrosec": 1477073576594681, + "priority": "Normal", + "sequence": 710, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5168, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5214, + "packetsIn": 71, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073616685940, + "eventId": "715", + "lastEpochMicrosec": 1477073626685940, + "priority": "Normal", + "sequence": 715, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6483, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 34, + "bytesOut": 5586, + "packetsIn": 95, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073626701958, + "eventId": "716", + "lastEpochMicrosec": 1477073636701958, + "priority": "Normal", + "sequence": 716, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3660, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 4712, + "packetsIn": 53, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070230330088, + "eventId": "377", + "lastEpochMicrosec": 1477070240330088, + "priority": "Normal", + "sequence": 377, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4069, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5506, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070360563689, + "eventId": "390", + "lastEpochMicrosec": 1477070370563689, + "priority": "Normal", + "sequence": 390, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4280, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5418, + "packetsIn": 64, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070460736142, + "eventId": "400", + "lastEpochMicrosec": 1477070470736142, + "priority": "Normal", + "sequence": 400, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4562, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6892, + "packetsIn": 68, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070480772828, + "eventId": "402", + "lastEpochMicrosec": 1477070490772828, + "priority": "Normal", + "sequence": 402, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5129, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5396, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070500813728, + "eventId": "404", + "lastEpochMicrosec": 1477070510813728, + "priority": "Normal", + "sequence": 404, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4456, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5380, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070550916395, + "eventId": "409", + "lastEpochMicrosec": 1477070560916395, + "priority": "Normal", + "sequence": 409, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3738, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 4750, + "packetsIn": 54, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070590993953, + "eventId": "413", + "lastEpochMicrosec": 1477070600993953, + "priority": "Normal", + "sequence": 413, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5954, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5380, + "packetsIn": 94, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070631061957, + "eventId": "417", + "lastEpochMicrosec": 1477070641061957, + "priority": "Normal", + "sequence": 417, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4416, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 22, + "bytesOut": 4020, + "packetsIn": 64, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070641079999, + "eventId": "418", + "lastEpochMicrosec": 1477070651079999, + "priority": "Normal", + "sequence": 418, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4911, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 4342, + "packetsIn": 70, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070681153946, + "eventId": "422", + "lastEpochMicrosec": 1477070691153946, + "priority": "Normal", + "sequence": 422, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5228, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5294, + "packetsIn": 80, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070691170336, + "eventId": "423", + "lastEpochMicrosec": 1477070701170336, + "priority": "Normal", + "sequence": 423, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 137612, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 776, + "bytesOut": 136724, + "packetsIn": 1458, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070821405142, + "eventId": "436", + "lastEpochMicrosec": 1477070831405142, + "priority": "Normal", + "sequence": 436, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6724, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 48, + "bytesOut": 8288, + "packetsIn": 90, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071021788719, + "eventId": "456", + "lastEpochMicrosec": 1477071031788719, + "priority": "Normal", + "sequence": 456, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5216, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5098, + "packetsIn": 80, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071051846152, + "eventId": "459", + "lastEpochMicrosec": 1477071061846152, + "priority": "Normal", + "sequence": 459, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5965, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 34, + "bytesOut": 5686, + "packetsIn": 84, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071101941618, + "eventId": "464", + "lastEpochMicrosec": 1477071111941618, + "priority": "Normal", + "sequence": 464, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4334, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 5232, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071142014557, + "eventId": "468", + "lastEpochMicrosec": 1477071152014557, + "priority": "Normal", + "sequence": 468, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3976, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5360, + "packetsIn": 54, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071152034019, + "eventId": "469", + "lastEpochMicrosec": 1477071162034019, + "priority": "Normal", + "sequence": 469, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 41028, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5214, + "packetsIn": 121, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071202120024, + "eventId": "474", + "lastEpochMicrosec": 1477071212120024, + "priority": "Normal", + "sequence": 474, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5066, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7157, + "packetsIn": 76, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071242189163, + "eventId": "478", + "lastEpochMicrosec": 1477071252189163, + "priority": "Normal", + "sequence": 478, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5528, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5302, + "packetsIn": 83, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071472593939, + "eventId": "501", + "lastEpochMicrosec": 1477071482593939, + "priority": "Normal", + "sequence": 501, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4190, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 4160, + "packetsIn": 63, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071492634731, + "eventId": "503", + "lastEpochMicrosec": 1477071502634731, + "priority": "Normal", + "sequence": 503, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5918, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 34, + "bytesOut": 6588, + "packetsIn": 90, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071502654137, + "eventId": "504", + "lastEpochMicrosec": 1477071512654137, + "priority": "Normal", + "sequence": 504, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4270, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 19, + "bytesOut": 3650, + "packetsIn": 57, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071632900848, + "eventId": "517", + "lastEpochMicrosec": 1477071642900848, + "priority": "Normal", + "sequence": 517, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7250, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 47, + "bytesOut": 7539, + "packetsIn": 112, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071652936794, + "eventId": "519", + "lastEpochMicrosec": 1477071662936794, + "priority": "Normal", + "sequence": 519, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 20894, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 127, + "bytesOut": 23654, + "packetsIn": 256, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071713058031, + "eventId": "525", + "lastEpochMicrosec": 1477071723058031, + "priority": "Normal", + "sequence": 525, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7297, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 46, + "bytesOut": 7430, + "packetsIn": 107, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071763172262, + "eventId": "530", + "lastEpochMicrosec": 1477071773172262, + "priority": "Normal", + "sequence": 530, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5472, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5427, + "packetsIn": 83, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071773193658, + "eventId": "531", + "lastEpochMicrosec": 1477071783193658, + "priority": "Normal", + "sequence": 531, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4784, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4386, + "packetsIn": 73, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071803251128, + "eventId": "534", + "lastEpochMicrosec": 1477071813251128, + "priority": "Normal", + "sequence": 534, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 33146, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 202, + "bytesOut": 45220, + "packetsIn": 373, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071933509978, + "eventId": "547", + "lastEpochMicrosec": 1477071943509978, + "priority": "Normal", + "sequence": 547, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3640, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 22, + "bytesOut": 4128, + "packetsIn": 47, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072113869917, + "eventId": "565", + "lastEpochMicrosec": 1477072123869917, + "priority": "Normal", + "sequence": 565, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4928, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5412, + "packetsIn": 75, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072133905970, + "eventId": "567", + "lastEpochMicrosec": 1477072143905970, + "priority": "Normal", + "sequence": 567, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4286, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5436, + "packetsIn": 64, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072314253035, + "eventId": "585", + "lastEpochMicrosec": 1477072324253035, + "priority": "Normal", + "sequence": 585, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4568, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5602, + "packetsIn": 69, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072384378243, + "eventId": "592", + "lastEpochMicrosec": 1477072394378243, + "priority": "Normal", + "sequence": 592, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3854, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 4772, + "packetsIn": 57, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072404411223, + "eventId": "594", + "lastEpochMicrosec": 1477072414411223, + "priority": "Normal", + "sequence": 594, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3740, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 21, + "bytesOut": 3862, + "packetsIn": 50, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072414424973, + "eventId": "595", + "lastEpochMicrosec": 1477072424424973, + "priority": "Normal", + "sequence": 595, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6259, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5072, + "packetsIn": 89, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072424442934, + "eventId": "596", + "lastEpochMicrosec": 1477072434442934, + "priority": "Normal", + "sequence": 596, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5576, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 46, + "bytesOut": 7404, + "packetsIn": 84, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072624849269, + "eventId": "616", + "lastEpochMicrosec": 1477072634849269, + "priority": "Normal", + "sequence": 616, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5172, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 4998, + "packetsIn": 78, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072674941938, + "eventId": "621", + "lastEpochMicrosec": 1477072684941938, + "priority": "Normal", + "sequence": 621, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4256, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4294, + "packetsIn": 56, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072715018487, + "eventId": "625", + "lastEpochMicrosec": 1477072725018487, + "priority": "Normal", + "sequence": 625, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3932, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5526, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072825213947, + "eventId": "636", + "lastEpochMicrosec": 1477072835213947, + "priority": "Normal", + "sequence": 636, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3956, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 35, + "bytesOut": 6318, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072865310238, + "eventId": "640", + "lastEpochMicrosec": 1477072875310238, + "priority": "Normal", + "sequence": 640, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4080, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 4388, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072875328458, + "eventId": "641", + "lastEpochMicrosec": 1477072885328458, + "priority": "Normal", + "sequence": 641, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6081, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5528, + "packetsIn": 89, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072965498915, + "eventId": "650", + "lastEpochMicrosec": 1477072975498915, + "priority": "Normal", + "sequence": 650, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6141, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5528, + "packetsIn": 90, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073025609941, + "eventId": "656", + "lastEpochMicrosec": 1477073035609941, + "priority": "Normal", + "sequence": 656, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4446, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 39, + "bytesOut": 6986, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073175893195, + "eventId": "671", + "lastEpochMicrosec": 1477073185893195, + "priority": "Normal", + "sequence": 671, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4232, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 23, + "bytesOut": 4066, + "packetsIn": 64, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073225981156, + "eventId": "676", + "lastEpochMicrosec": 1477073235981156, + "priority": "Normal", + "sequence": 676, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5739, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4138, + "packetsIn": 84, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073326167021, + "eventId": "686", + "lastEpochMicrosec": 1477073336167021, + "priority": "Normal", + "sequence": 686, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4104, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 22, + "bytesOut": 4020, + "packetsIn": 61, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073356218618, + "eventId": "689", + "lastEpochMicrosec": 1477073366218618, + "priority": "Normal", + "sequence": 689, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4886, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7121, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073456394852, + "eventId": "699", + "lastEpochMicrosec": 1477073466394852, + "priority": "Normal", + "sequence": 699, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4034, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 4808, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073486456069, + "eventId": "702", + "lastEpochMicrosec": 1477073496456069, + "priority": "Normal", + "sequence": 702, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4706, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5765, + "packetsIn": 71, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073576611503, + "eventId": "711", + "lastEpochMicrosec": 1477073586611503, + "priority": "Normal", + "sequence": 711, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6046, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 40, + "bytesOut": 9108, + "packetsIn": 90, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073636730319, + "eventId": "717", + "lastEpochMicrosec": 1477073646730319, + "priority": "Normal", + "sequence": 717, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4450, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5230, + "packetsIn": 62, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070310474544, + "eventId": "385", + "lastEpochMicrosec": 1477070320474544, + "priority": "Normal", + "sequence": 385, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5703, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 40, + "bytesOut": 6658, + "packetsIn": 82, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070320490200, + "eventId": "386", + "lastEpochMicrosec": 1477070330490200, + "priority": "Normal", + "sequence": 386, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4384, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 5096, + "packetsIn": 59, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070370579195, + "eventId": "391", + "lastEpochMicrosec": 1477070380579195, + "priority": "Normal", + "sequence": 391, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3986, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5544, + "packetsIn": 59, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070400631290, + "eventId": "394", + "lastEpochMicrosec": 1477070410631290, + "priority": "Normal", + "sequence": 394, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4428, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 4364, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070410646466, + "eventId": "395", + "lastEpochMicrosec": 1477070420646466, + "priority": "Normal", + "sequence": 395, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3776, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 4562, + "packetsIn": 56, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070661113931, + "eventId": "420", + "lastEpochMicrosec": 1477070671113931, + "priority": "Normal", + "sequence": 420, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5482, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5446, + "packetsIn": 77, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070731245952, + "eventId": "427", + "lastEpochMicrosec": 1477070741245952, + "priority": "Normal", + "sequence": 427, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 12391, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 78, + "bytesOut": 10049, + "packetsIn": 124, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070761301949, + "eventId": "430", + "lastEpochMicrosec": 1477070771301949, + "priority": "Normal", + "sequence": 430, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 19997, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 132, + "bytesOut": 23502, + "packetsIn": 240, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070861482944, + "eventId": "440", + "lastEpochMicrosec": 1477070871482944, + "priority": "Normal", + "sequence": 440, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 19924, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 116, + "bytesOut": 19236, + "packetsIn": 243, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070871499185, + "eventId": "441", + "lastEpochMicrosec": 1477070881499185, + "priority": "Normal", + "sequence": 441, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4394, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 40, + "bytesOut": 7024, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070901553877, + "eventId": "444", + "lastEpochMicrosec": 1477070911553877, + "priority": "Normal", + "sequence": 444, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3402, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4950, + "packetsIn": 51, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070951649582, + "eventId": "449", + "lastEpochMicrosec": 1477070961649582, + "priority": "Normal", + "sequence": 449, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3650, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 5024, + "packetsIn": 52, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070961673097, + "eventId": "450", + "lastEpochMicrosec": 1477070971673097, + "priority": "Normal", + "sequence": 450, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4681, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 45, + "bytesOut": 7354, + "packetsIn": 69, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071001744811, + "eventId": "454", + "lastEpochMicrosec": 1477071011744811, + "priority": "Normal", + "sequence": 454, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4536, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5168, + "packetsIn": 67, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071011760312, + "eventId": "455", + "lastEpochMicrosec": 1477071021760312, + "priority": "Normal", + "sequence": 455, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6458, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 36, + "bytesOut": 6017, + "packetsIn": 100, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071232173922, + "eventId": "477", + "lastEpochMicrosec": 1477071242173922, + "priority": "Normal", + "sequence": 477, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6871, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 36, + "bytesOut": 6766, + "packetsIn": 101, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071282252737, + "eventId": "482", + "lastEpochMicrosec": 1477071292252737, + "priority": "Normal", + "sequence": 482, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3884, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4248, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071322325958, + "eventId": "486", + "lastEpochMicrosec": 1477071332325958, + "priority": "Normal", + "sequence": 486, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 34518, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 192, + "bytesOut": 34192, + "packetsIn": 384, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071432517955, + "eventId": "497", + "lastEpochMicrosec": 1477071442517955, + "priority": "Normal", + "sequence": 497, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4916, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4318, + "packetsIn": 67, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071512671652, + "eventId": "505", + "lastEpochMicrosec": 1477071522671652, + "priority": "Normal", + "sequence": 505, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6259, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5600, + "packetsIn": 91, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071522697277, + "eventId": "506", + "lastEpochMicrosec": 1477071532697277, + "priority": "Normal", + "sequence": 506, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5240, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5426, + "packetsIn": 80, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071552753988, + "eventId": "509", + "lastEpochMicrosec": 1477071562753988, + "priority": "Normal", + "sequence": 509, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5060, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5434, + "packetsIn": 79, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071612865423, + "eventId": "515", + "lastEpochMicrosec": 1477071622865423, + "priority": "Normal", + "sequence": 515, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3974, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 4660, + "packetsIn": 59, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071793233631, + "eventId": "533", + "lastEpochMicrosec": 1477071803233631, + "priority": "Normal", + "sequence": 533, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6859, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 43, + "bytesOut": 6912, + "packetsIn": 100, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071823290532, + "eventId": "536", + "lastEpochMicrosec": 1477071833290532, + "priority": "Normal", + "sequence": 536, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4982, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 26, + "bytesOut": 5081, + "packetsIn": 76, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071833308226, + "eventId": "537", + "lastEpochMicrosec": 1477071843308226, + "priority": "Normal", + "sequence": 537, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4974, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4426, + "packetsIn": 75, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071843328660, + "eventId": "538", + "lastEpochMicrosec": 1477071853328660, + "priority": "Normal", + "sequence": 538, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 13226, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 89, + "bytesOut": 18924, + "packetsIn": 153, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072053741964, + "eventId": "559", + "lastEpochMicrosec": 1477072063741964, + "priority": "Normal", + "sequence": 559, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 8673, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 53, + "bytesOut": 9805, + "packetsIn": 117, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072063763247, + "eventId": "560", + "lastEpochMicrosec": 1477072073763247, + "priority": "Normal", + "sequence": 560, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4676, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 37, + "bytesOut": 6446, + "packetsIn": 70, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072224086825, + "eventId": "576", + "lastEpochMicrosec": 1477072234086825, + "priority": "Normal", + "sequence": 576, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4262, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5318, + "packetsIn": 64, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072254141660, + "eventId": "579", + "lastEpochMicrosec": 1477072264141660, + "priority": "Normal", + "sequence": 579, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4946, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7156, + "packetsIn": 74, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072344303482, + "eventId": "588", + "lastEpochMicrosec": 1477072354303482, + "priority": "Normal", + "sequence": 588, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3800, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5398, + "packetsIn": 56, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072584773904, + "eventId": "612", + "lastEpochMicrosec": 1477072594773904, + "priority": "Normal", + "sequence": 612, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5264, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 35, + "bytesOut": 6018, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072594792760, + "eventId": "613", + "lastEpochMicrosec": 1477072604792760, + "priority": "Normal", + "sequence": 613, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4604, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5722, + "packetsIn": 59, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072775124558, + "eventId": "631", + "lastEpochMicrosec": 1477072785124558, + "priority": "Normal", + "sequence": 631, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4280, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5410, + "packetsIn": 64, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072975517941, + "eventId": "651", + "lastEpochMicrosec": 1477072985517941, + "priority": "Normal", + "sequence": 651, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4316, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 27, + "bytesOut": 5018, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073035627391, + "eventId": "657", + "lastEpochMicrosec": 1477073045627391, + "priority": "Normal", + "sequence": 657, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4915, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 4836, + "packetsIn": 74, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073276077930, + "eventId": "681", + "lastEpochMicrosec": 1477073286077930, + "priority": "Normal", + "sequence": 681, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4244, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4914, + "packetsIn": 64, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073396285928, + "eventId": "693", + "lastEpochMicrosec": 1477073406285928, + "priority": "Normal", + "sequence": 693, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4982, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6892, + "packetsIn": 75, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073406303927, + "eventId": "694", + "lastEpochMicrosec": 1477073416303927, + "priority": "Normal", + "sequence": 694, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5000, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5378, + "packetsIn": 68, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073496473912, + "eventId": "703", + "lastEpochMicrosec": 1477073506473912, + "priority": "Normal", + "sequence": 703, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4406, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7156, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073546558533, + "eventId": "708", + "lastEpochMicrosec": 1477073556558533, + "priority": "Normal", + "sequence": 708, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3608, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5230, + "packetsIn": 53, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073646749551, + "eventId": "718", + "lastEpochMicrosec": 1477073656749551, + "priority": "Normal", + "sequence": 718, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4352, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 4946, + "packetsIn": 57, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073676813943, + "eventId": "721", + "lastEpochMicrosec": 1477073686813943, + "priority": "Normal", + "sequence": 721, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4864, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 5148, + "packetsIn": 67, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070190253108, + "eventId": "373", + "lastEpochMicrosec": 1477070200253108, + "priority": "Normal", + "sequence": 373, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4328, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5286, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070280421939, + "eventId": "382", + "lastEpochMicrosec": 1477070290421939, + "priority": "Normal", + "sequence": 382, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6206, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 32, + "bytesOut": 5512, + "packetsIn": 96, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070330509980, + "eventId": "387", + "lastEpochMicrosec": 1477070340509980, + "priority": "Normal", + "sequence": 387, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3518, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 22, + "bytesOut": 4028, + "packetsIn": 53, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070420665950, + "eventId": "396", + "lastEpochMicrosec": 1477070430665950, + "priority": "Normal", + "sequence": 396, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4360, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4812, + "packetsIn": 59, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070430683794, + "eventId": "397", + "lastEpochMicrosec": 1477070440683794, + "priority": "Normal", + "sequence": 397, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5301, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 33, + "bytesOut": 5536, + "packetsIn": 76, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070560936376, + "eventId": "410", + "lastEpochMicrosec": 1477070570936376, + "priority": "Normal", + "sequence": 410, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6866, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7156, + "packetsIn": 106, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070570954302, + "eventId": "411", + "lastEpochMicrosec": 1477070580954302, + "priority": "Normal", + "sequence": 411, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6681, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 41, + "bytesOut": 6568, + "packetsIn": 96, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070741264005, + "eventId": "428", + "lastEpochMicrosec": 1477070751264005, + "priority": "Normal", + "sequence": 428, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 34880, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 217, + "bytesOut": 36350, + "packetsIn": 398, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070881514499, + "eventId": "442", + "lastEpochMicrosec": 1477070891514499, + "priority": "Normal", + "sequence": 442, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4762, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 4934, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070911574857, + "eventId": "445", + "lastEpochMicrosec": 1477070921574857, + "priority": "Normal", + "sequence": 445, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 7057, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 46, + "bytesOut": 7462, + "packetsIn": 105, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477070921593735, + "eventId": "446", + "lastEpochMicrosec": 1477070931593735, + "priority": "Normal", + "sequence": 446, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6740, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 41, + "bytesOut": 6775, + "packetsIn": 104, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071292270837, + "eventId": "483", + "lastEpochMicrosec": 1477071302270837, + "priority": "Normal", + "sequence": 483, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4934, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5325, + "packetsIn": 75, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071302289972, + "eventId": "484", + "lastEpochMicrosec": 1477071312289972, + "priority": "Normal", + "sequence": 484, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6216, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 39, + "bytesOut": 6786, + "packetsIn": 81, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071452551360, + "eventId": "499", + "lastEpochMicrosec": 1477071462551360, + "priority": "Normal", + "sequence": 499, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6218, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 44, + "bytesOut": 7316, + "packetsIn": 95, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071482617903, + "eventId": "502", + "lastEpochMicrosec": 1477071492617903, + "priority": "Normal", + "sequence": 502, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5634, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 37, + "bytesOut": 6446, + "packetsIn": 87, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071562771042, + "eventId": "510", + "lastEpochMicrosec": 1477071572771042, + "priority": "Normal", + "sequence": 510, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6354, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 47, + "bytesOut": 7514, + "packetsIn": 96, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071622883746, + "eventId": "516", + "lastEpochMicrosec": 1477071632883746, + "priority": "Normal", + "sequence": 516, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 20684, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 138, + "bytesOut": 23872, + "packetsIn": 242, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071753155902, + "eventId": "529", + "lastEpochMicrosec": 1477071763155902, + "priority": "Normal", + "sequence": 529, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4442, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 38, + "bytesOut": 6956, + "packetsIn": 66, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071853349474, + "eventId": "539", + "lastEpochMicrosec": 1477071863349474, + "priority": "Normal", + "sequence": 539, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 66655, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 401, + "bytesOut": 64534, + "packetsIn": 755, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477071943529023, + "eventId": "548", + "lastEpochMicrosec": 1477071953529023, + "priority": "Normal", + "sequence": 548, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 29098, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 186, + "bytesOut": 40028, + "packetsIn": 338, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072033705953, + "eventId": "557", + "lastEpochMicrosec": 1477072043705953, + "priority": "Normal", + "sequence": 557, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3560, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 4758, + "packetsIn": 52, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072083807753, + "eventId": "562", + "lastEpochMicrosec": 1477072093807753, + "priority": "Normal", + "sequence": 562, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5753, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5248, + "packetsIn": 82, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072123885526, + "eventId": "566", + "lastEpochMicrosec": 1477072133885526, + "priority": "Normal", + "sequence": 566, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4102, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5462, + "packetsIn": 54, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072173997938, + "eventId": "571", + "lastEpochMicrosec": 1477072183997938, + "priority": "Normal", + "sequence": 571, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 5054, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 39, + "bytesOut": 6906, + "packetsIn": 76, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072264158607, + "eventId": "580", + "lastEpochMicrosec": 1477072274158607, + "priority": "Normal", + "sequence": 580, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3884, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 23, + "bytesOut": 4058, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072324268097, + "eventId": "586", + "lastEpochMicrosec": 1477072334268097, + "priority": "Normal", + "sequence": 586, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3182, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 4808, + "packetsIn": 46, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072334288872, + "eventId": "587", + "lastEpochMicrosec": 1477072344288872, + "priority": "Normal", + "sequence": 587, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4034, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5316, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072394394368, + "eventId": "593", + "lastEpochMicrosec": 1477072404394368, + "priority": "Normal", + "sequence": 593, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3872, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 23, + "bytesOut": 4074, + "packetsIn": 58, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072434461951, + "eventId": "597", + "lastEpochMicrosec": 1477072444461951, + "priority": "Normal", + "sequence": 597, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4028, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 29, + "bytesOut": 5214, + "packetsIn": 60, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072504621951, + "eventId": "604", + "lastEpochMicrosec": 1477072514621951, + "priority": "Normal", + "sequence": 604, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4130, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 25, + "bytesOut": 4350, + "packetsIn": 62, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072524657943, + "eventId": "606", + "lastEpochMicrosec": 1477072534657943, + "priority": "Normal", + "sequence": 606, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6691, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 35, + "bytesOut": 5804, + "packetsIn": 98, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072664921950, + "eventId": "620", + "lastEpochMicrosec": 1477072674921950, + "priority": "Normal", + "sequence": 620, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4640, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5426, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072765105949, + "eventId": "630", + "lastEpochMicrosec": 1477072775105949, + "priority": "Normal", + "sequence": 630, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 38076, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 238, + "bytesOut": 52028, + "packetsIn": 425, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477072815193944, + "eventId": "635", + "lastEpochMicrosec": 1477072825193944, + "priority": "Normal", + "sequence": 635, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4806, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 39, + "bytesOut": 6986, + "packetsIn": 72, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073055662629, + "eventId": "659", + "lastEpochMicrosec": 1477073065662629, + "priority": "Normal", + "sequence": 659, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3470, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4240, + "packetsIn": 51, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073165876528, + "eventId": "670", + "lastEpochMicrosec": 1477073175876528, + "priority": "Normal", + "sequence": 670, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6615, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 30, + "bytesOut": 5086, + "packetsIn": 98, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073205948758, + "eventId": "674", + "lastEpochMicrosec": 1477073215948758, + "priority": "Normal", + "sequence": 674, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4682, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 5600, + "packetsIn": 71, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073215965142, + "eventId": "675", + "lastEpochMicrosec": 1477073225965142, + "priority": "Normal", + "sequence": 675, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4178, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 24, + "bytesOut": 4152, + "packetsIn": 55, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073256037943, + "eventId": "679", + "lastEpochMicrosec": 1477073266037943, + "priority": "Normal", + "sequence": 679, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4406, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 42, + "bytesOut": 7156, + "packetsIn": 65, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073306133613, + "eventId": "684", + "lastEpochMicrosec": 1477073316133613, + "priority": "Normal", + "sequence": 684, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 3974, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 4644, + "packetsIn": 51, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073316150514, + "eventId": "685", + "lastEpochMicrosec": 1477073326150514, + "priority": "Normal", + "sequence": 685, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 6375, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 28, + "bytesOut": 4538, + "packetsIn": 94, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073386268859, + "eventId": "692", + "lastEpochMicrosec": 1477073396268859, + "priority": "Normal", + "sequence": 692, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + }, + { + "event": { + "measurementsForVfScalingFields": { + "measurementInterval": 10, + "measurementsForVfScalingVersion": 1.1, + "vNicUsageArray": [ + { + "bytesIn": 4458, + "multicastPacketsIn": 0, + "multicastPacketsOut": 0, + "unicastPacketsIn": 0, + "broadcastPacketsOut": 0, + "packetsOut": 31, + "bytesOut": 5418, + "packetsIn": 66, + "broadcastPacketsIn": 0, + "vNicIdentifier": "eth0", + "unicastPacketsOut": 0 + } + ] + }, + "commonEventHeader": { + "reportingEntityName": "vpp-test", + "startEpochMicrosec": 1477073536542160, + "eventId": "707", + "lastEpochMicrosec": 1477073546542160, + "priority": "Normal", + "sequence": 707, + "sourceName": "Dummy VM name - No Metadata available", + "domain": "measurementsForVfScaling", + "functionalRole": "vFirewall", + "reportingEntityId": "No UUID available", + "version": 1.1, + "sourceId": "Dummy VM UUID - No Metadata available" + } + } + } +] diff --git a/dcae-analytics-tca/src/test/resources/data/json/policy/tca_policy.json b/dcae-analytics-tca/src/test/resources/data/json/policy/tca_policy.json new file mode 100644 index 0000000..1bf9e83 --- /dev/null +++ b/dcae-analytics-tca/src/test/resources/data/json/policy/tca_policy.json @@ -0,0 +1,53 @@ +{ + "domain": "measurementsForVfScaling", + "metricsPerFunctionalRole": [ + { + "functionalRole": "vFirewall", + "policyScope": "resource=vFirewall;type=configuration", + "policyName": "configuration.dcae.microservice.tca.xml", + "policyVersion": "v0.0.1", + "thresholds": [ + { + "closedLoopControlName": "CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8", + "version": "1.0.2", + "fieldPath": "$.event.measurementsForVfScalingFields.vNicUsageArray[*].bytesIn", + "thresholdValue": 4000, + "direction": "LESS_OR_EQUAL", + "severity": "MAJOR" + }, + { + "closedLoopControlName": "CL-FRWL-HIGH-TRAFFIC-SIG-EA36FE84-9342-5E13-A656-EC5F21309A09", + "version": "1.0.2", + "fieldPath": "$.event.measurementsForVfScalingFields.vNicUsageArray[*].bytesIn", + "thresholdValue": 20000, + "direction": "GREATER_OR_EQUAL", + "severity": "CRITICAL" + } + ] + }, + { + "functionalRole": "vLoadBalancer", + "policyScope": "resource=vLoadBalancer;type=configuration", + "policyName": "configuration.dcae.microservice.tca.xml", + "policyVersion": "v0.0.1", + "thresholds": [ + { + "closedLoopControlName": "CL-LBAL-LOW-TRAFFIC-SIG-FB480F95-A453-6F24-B767-FD703241AB1A", + "version": "1.0.2", + "fieldPath": "$.event.measurementsForVfScalingFields.vNicUsageArray[*].packetsIn", + "thresholdValue": 500, + "direction": "LESS_OR_EQUAL", + "severity": "MAJOR" + }, + { + "closedLoopControlName": "CL-LBAL-LOW-TRAFFIC-SIG-0C5920A6-B564-8035-C878-0E814352BC2B", + "version": "1.0.2", + "fieldPath": "$.event.measurementsForVfScalingFields.vNicUsageArray[*].packetsIn", + "thresholdValue": 5000, + "direction": "GREATER_OR_EQUAL", + "severity": "CRITICAL" + } + ] + } + ] +} diff --git a/dcae-analytics-tca/src/test/resources/data/properties/tca_controller_policy.properties b/dcae-analytics-tca/src/test/resources/data/properties/tca_controller_policy.properties new file mode 100644 index 0000000..e0e333b --- /dev/null +++ b/dcae-analytics-tca/src/test/resources/data/properties/tca_controller_policy.properties @@ -0,0 +1,59 @@ +# +# ============LICENSE_START========================================================= +# dcae-analytics +# ================================================================================ +# Copyright © 2017 AT&T Intellectual Property. All rights reserved. +# ================================================================================ +# Licensed 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. +# ============LICENSE_END========================================================= +# + +domain=measurementsForVfScaling + +configuration.metricsPerFunctionalRole.vFirewall.policy.functionalRole=vFirewall +configuration.metricsPerFunctionalRole.vFirewall.policyName=configuration.dcae.microservice.tca.xml +configuration.metricsPerFunctionalRole.vFirewall.policyVersion=v0.0.1 +configuration.metricsPerFunctionalRole.vFirewall.policyScope=resource=vFirewall;type=configuration + +configuration.metricsPerFunctionalRole.vFirewall.thresholds.0.policy.closedLoopControlName=CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8 +configuration.metricsPerFunctionalRole.vFirewall.thresholds.0.policy.fieldPath=$.event.measurementsForVfScalingFields.vNicUsageArray[*].bytesIn +configuration.metricsPerFunctionalRole.vFirewall.thresholds.0.policy.thresholdValue=4000 +configuration.metricsPerFunctionalRole.vFirewall.thresholds.0.policy.direction=LESS_OR_EQUAL +configuration.metricsPerFunctionalRole.vFirewall.thresholds.0.policy.severity=MAJOR +configuration.metricsPerFunctionalRole.vFirewall.thresholds.0.policy.version=1.0.2 + +configuration.metricsPerFunctionalRole.vFirewall.thresholds.1.policy.closedLoopControlName=L-FRWL-HIGH-TRAFFIC-SIG-EA36FE84-9342-5E13-A656-EC5F21309A09 +configuration.metricsPerFunctionalRole.vFirewall.thresholds.1.policy.fieldPath=$.event.measurementsForVfScalingFields.vNicUsageArray[*].bytesIn +configuration.metricsPerFunctionalRole.vFirewall.thresholds.1.policy.thresholdValue=20000 +configuration.metricsPerFunctionalRole.vFirewall.thresholds.1.policy.direction=GREATER_OR_EQUAL +configuration.metricsPerFunctionalRole.vFirewall.thresholds.1.policy.severity=CRITICAL +configuration.metricsPerFunctionalRole.vFirewall.thresholds.1.policy.version=1.0.2 + +configuration.metricsPerFunctionalRole.vLoadBalancer.policy.functionalRole=vLoadBalancer +configuration.metricsPerFunctionalRole.vLoadBalancer.policyName=configuration.dcae.microservice.tca.xml +configuration.metricsPerFunctionalRole.vLoadBalancer.policyVersion=v0.0.1 +configuration.metricsPerFunctionalRole.vLoadBalancer.policyScope=resource=vLoadBalancer;type=configuration + +configuration.metricsPerFunctionalRole.vLoadBalancer.thresholds.0.policy.closedLoopControlName=CL-LBAL-LOW-TRAFFIC-SIG-FB480F95-A453-6F24-B767-FD703241AB1A +configuration.metricsPerFunctionalRole.vLoadBalancer.thresholds.0.policy.fieldPath=$.event.measurementsForVfScalingFields.vNicUsageArray[*].packetsIn +configuration.metricsPerFunctionalRole.vLoadBalancer.thresholds.0.policy.thresholdValue=500 +configuration.metricsPerFunctionalRole.vLoadBalancer.thresholds.0.policy.direction=LESS_OR_EQUAL +configuration.metricsPerFunctionalRole.vLoadBalancer.thresholds.0.policy.severity=MAJOR +configuration.metricsPerFunctionalRole.vLoadBalancer.thresholds.0.policy.version=1.0.2 + +configuration.metricsPerFunctionalRole.vLoadBalancer.thresholds.1.policy.closedLoopControlName=CL-LBAL-LOW-TRAFFIC-SIG-0C5920A6-B564-8035-C878-0E814352BC2B +configuration.metricsPerFunctionalRole.vLoadBalancer.thresholds.1.policy.fieldPath=$.event.measurementsForVfScalingFields.vNicUsageArray[*].packetsIn +configuration.metricsPerFunctionalRole.vLoadBalancer.thresholds.1.policy.thresholdValue=5000 +configuration.metricsPerFunctionalRole.vLoadBalancer.thresholds.1.policy.direction=GREATER_OR_EQUAL +configuration.metricsPerFunctionalRole.vLoadBalancer.thresholds.1.policy.severity=CRITICAL +configuration.metricsPerFunctionalRole.vLoadBalancer.thresholds.1.policy.version=1.0.2 diff --git a/dcae-analytics-tca/src/test/resources/logback-test.xml b/dcae-analytics-tca/src/test/resources/logback-test.xml new file mode 100644 index 0000000..e1cb987 --- /dev/null +++ b/dcae-analytics-tca/src/test/resources/logback-test.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ ============LICENSE_START========================================================= + ~ dcae-analytics + ~ ================================================================================ + ~ Copyright © 2017 AT&T Intellectual Property. All rights reserved. + ~ ================================================================================ + ~ Licensed 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. + ~ ============LICENSE_END========================================================= + --> +<configuration debug="false"> + + <!-- + Disabling some chatty loggers. + --> + <logger name="org.apache.commons.beanutils" level="ERROR"/> + <logger name="org.apache.zookeeper.server" level="ERROR"/> + <logger name="org.apache.zookeeper" level="ERROR"/> + <logger name="com.ning" level="WARN"/> + <logger name="org.apache.spark" level="WARN"/> + <logger name="org.spark-project" level="WARN"/> + <logger name="org.apache.hadoop" level="WARN"/> + <logger name="org.apache.hive" level="WARN"/> + <logger name="org.quartz.core" level="WARN"/> + <logger name="org.eclipse.jetty" level="WARN"/> + <logger name="io.netty.util.internal" level="WARN"/> + + <logger name="org.apache.twill" level="WARN"/> + <logger name="co.cask.cdap" level="INFO"/> + <logger name="org.openecomp" level="DEBUG"/> + + <appender name="Console" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <pattern>%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n</pattern> + </encoder> + </appender> + + <root level="ERROR"> + <appender-ref ref="Console"/> + </root> + + +</configuration> + diff --git a/dcae-analytics-test/pom.xml b/dcae-analytics-test/pom.xml new file mode 100644 index 0000000..2654a1d --- /dev/null +++ b/dcae-analytics-test/pom.xml @@ -0,0 +1,115 @@ +<!-- + ~ ============LICENSE_START========================================================= + ~ dcae-analytics + ~ ================================================================================ + ~ Copyright © 2017 AT&T Intellectual Property. All rights reserved. + ~ ================================================================================ + ~ Licensed 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. + ~ ================================================================================ + ~ ECOMP and OpenECOMP are trademarks and service marks of AT&T Intellectual Property. + ~ ============LICENSE_END========================================================= + --> + +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.openecomp.dcae.analytics</groupId> + <artifactId>dcae-analytics</artifactId> + <version>1.0-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + + <artifactId>dcae-analytics-test</artifactId> + <packaging>jar</packaging> + + <!-- THIS MODULE CONTAINS COMMON TESTING CODE AND MUST NEVER BE DEPLOYED IN PRODUCTION ENVIRONMENT --> + <name>DCAE Analytics Test</name> + <description>Contains common testing code for all DCAE Analytics Modules</description> + + + <properties> + <main.basedir>${project.parent.basedir}</main.basedir> + </properties> + + <dependencies> + + <!-- CDAP --> + <dependency> + <groupId>co.cask.cdap</groupId> + <artifactId>cdap-api</artifactId> + </dependency> + + <!-- LOGGING --> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </dependency> + + <!-- UTILITIES --> + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + </dependency> + <dependency> + <groupId>com.google.code.findbugs</groupId> + <artifactId>jsr305</artifactId> + </dependency> + <dependency> + <groupId>com.google.code.gson</groupId> + <artifactId>gson</artifactId> + </dependency> + + <!-- TEST DEPENDENCIES --> + <dependency> + <groupId>co.cask.cdap</groupId> + <artifactId>cdap-unit-test</artifactId> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>com.jayway.jsonpath</groupId> + <artifactId>json-path</artifactId> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>com.jayway.jsonpath</groupId> + <artifactId>json-path-assert</artifactId> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.skyscreamer</groupId> + <artifactId>jsonassert</artifactId> + <scope>compile</scope> + </dependency> + + </dependencies> + +</project> diff --git a/dcae-analytics-test/src/main/java/org/openecomp/dcae/analytics/test/BaseDCAEAnalyticsCommonTest.java b/dcae-analytics-test/src/main/java/org/openecomp/dcae/analytics/test/BaseDCAEAnalyticsCommonTest.java new file mode 100644 index 0000000..c40bd94 --- /dev/null +++ b/dcae-analytics-test/src/main/java/org/openecomp/dcae/analytics/test/BaseDCAEAnalyticsCommonTest.java @@ -0,0 +1,216 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.test; + +import org.json.JSONException; +import org.junit.Assert; +import org.skyscreamer.jsonassert.JSONAssert; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.ObjectOutputStream; +import java.io.OutputStreamWriter; +import java.lang.reflect.Field; +import java.net.URL; +import java.nio.charset.Charset; +import java.nio.file.Paths; +import java.security.AccessController; +import java.security.PrivilegedAction; + +import static java.nio.file.Files.deleteIfExists; +import static java.nio.file.Files.exists; + +/** + * Base common test class for all DCAE Analytics Test e.g. unit tests, integration test, CDAP tests etc. + * <p> + * @author Rajiv Singla. Creation Date: 10/19/2016. + */ +abstract class BaseDCAEAnalyticsCommonTest { + + protected static final Logger LOG = LoggerFactory.getLogger(BaseDCAEAnalyticsCommonTest.class); + + /** + * Asserts if expected Json String and actual Json String contain the same properties ignoring + * property order. Simple String assertion might fail as property order during serialization and deserialization + * is generally non-deterministic. Also proper error message are generated more missing or unexpected + * properties + * + * @param expectedJsonString expected Json String + * @param actualJsonString actual Json String + * @throws JSONException Json Exception + */ + public static void assertJson(String expectedJsonString, String actualJsonString) throws JSONException { + JSONAssert.assertEquals(expectedJsonString, actualJsonString, true); + } + + /** + * Converts given file location to String + * + * @param fileLocation location of the file which needs to be converted to String + * @return Contents of file as string + * @throws IOException IOException + */ + public static String fromStream(String fileLocation) throws IOException { + final InputStream jsonFileInputStream = + BaseDCAEAnalyticsCommonTest.class.getClassLoader().getResourceAsStream(fileLocation); + Assert.assertNotNull("Json File Location must be valid", jsonFileInputStream); + try (BufferedReader reader = + new BufferedReader(new InputStreamReader(jsonFileInputStream, Charset.forName("UTF-8")))) { + final StringBuilder result = new StringBuilder(); + final String newLine = System.getProperty("line.separator"); + String line = reader.readLine(); + while (line != null) { + result.append(line); + result.append(newLine); + line = reader.readLine(); + } + jsonFileInputStream.close(); + return result.toString(); + } + } + + + /** + * Checks if object can be serialized properly + * + * @param object input object + * @param callingClass calling class + * @throws Exception Exception + */ + public static void testSerialization(Object object, Class<?> callingClass) throws Exception { + final URL location = callingClass.getProtectionDomain().getCodeSource().getLocation(); + final File serializedOutputFile = + new File(location.getPath() + String.format("serialization/%s.ser", object.getClass().getSimpleName())); + + // Maybe file already try deleting it first + final boolean deleteIfExists = deleteIfExists(Paths.get(serializedOutputFile.getPath())); + + if (deleteIfExists) { + LOG.warn("Previous serialization file was overwritten at location: {}", serializedOutputFile.getPath()); + } + + boolean mkdirs = true; + if (!exists(Paths.get(serializedOutputFile.getParentFile().getPath()))) { + mkdirs = serializedOutputFile.getParentFile().mkdirs(); + } + if (mkdirs) { + try (FileOutputStream fileOutputStream = new FileOutputStream(serializedOutputFile); + ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream)) { + objectOutputStream.writeObject(object); + LOG.debug("Successfully created serialization file at location: {}", serializedOutputFile.getPath()); + } + } else { + throw new Exception( + String.format("Failed to create location to store serialization file: %s", + serializedOutputFile)); + } + } + + /** + * Writes Text to Output file + * + * @param textFileLocation - location of text file e.g. textfiles/fileName.json + * @param content - file content + * @param callingClass - calling class + * @throws Exception - exception + */ + public static void writeToOutputTextFile(String textFileLocation, String content, Class<?> callingClass) throws + Exception { + final URL location = callingClass.getProtectionDomain().getCodeSource().getLocation(); + final File fileLocation = new File(location.getPath() + textFileLocation); + + // Maybe file already try deleting it first + final boolean deleteIfExists = deleteIfExists(Paths.get(fileLocation.getPath())); + + if (deleteIfExists) { + LOG.warn("Previous file will be overwritten at location: {}", fileLocation.getPath()); + } + + boolean mkdirs = true; + if (!exists(Paths.get(fileLocation.getParentFile().getPath()))) { + mkdirs = fileLocation.getParentFile().mkdirs(); + } + if (mkdirs) { + try (OutputStreamWriter outputStream = new OutputStreamWriter( + new FileOutputStream(fileLocation), Charset.forName("UTF-8"))) { + outputStream.write(content); + LOG.debug("Successfully created text file at location: {}", fileLocation.getPath()); + } + } else { + throw new Exception( + String.format("Failed to create location to store text file: %s", + fileLocation)); + } + + } + + + /** + * For testing purposes only we may sometime we may want to access private fields of underlying + * object to confirm the values are setup correctly. + * <p> + * This method uses java reflection to get the value to private object in the class + * + * @param object Actual object which has the private field you want to check + * @param fieldName Field name in the Actual Object you want to get the value of + * @param privateFieldClass Type of the private field + * @param <T> Class of Actual Object + * @param <U> Class of private field + * @return value of the private field + */ + public static <T, U> U getPrivateFiledValue(T object, String fieldName, Class<U> privateFieldClass) { + + final Class<?> objectClass = object.getClass(); + try { + final Field privateField = objectClass.getDeclaredField(fieldName); + try { + + // mark private field to be accessible for testing purposes + AccessController.doPrivileged(new PrivilegedAction() { + @Override + public Object run() { + privateField.setAccessible(true); + return null; + } + }); + + + return privateFieldClass.cast(privateField.get(object)); + + } catch (IllegalAccessException e) { + LOG.error("Unable to access field: {}", fieldName); + throw new RuntimeException(e); + } + } catch (NoSuchFieldException e) { + LOG.error("Unable to locate field name: {} in class: {}", fieldName, objectClass.getSimpleName()); + throw new RuntimeException(e); + } + + + } + +} diff --git a/dcae-analytics-test/src/main/java/org/openecomp/dcae/analytics/test/BaseDCAEAnalyticsIT.java b/dcae-analytics-test/src/main/java/org/openecomp/dcae/analytics/test/BaseDCAEAnalyticsIT.java new file mode 100644 index 0000000..789f7ec --- /dev/null +++ b/dcae-analytics-test/src/main/java/org/openecomp/dcae/analytics/test/BaseDCAEAnalyticsIT.java @@ -0,0 +1,29 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.test; + +/** + * Base class for all DCAE Analytics Integration Tests + * <p> + * @author Rajiv Singla. Creation Date: 10/6/2016. + */ +public abstract class BaseDCAEAnalyticsIT extends BaseDCAEAnalyticsCommonTest { +} diff --git a/dcae-analytics-test/src/main/java/org/openecomp/dcae/analytics/test/BaseDCAEAnalyticsUnitTest.java b/dcae-analytics-test/src/main/java/org/openecomp/dcae/analytics/test/BaseDCAEAnalyticsUnitTest.java new file mode 100644 index 0000000..7c5526f --- /dev/null +++ b/dcae-analytics-test/src/main/java/org/openecomp/dcae/analytics/test/BaseDCAEAnalyticsUnitTest.java @@ -0,0 +1,31 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.test; + +/** + * Base class for all DCAE Analytics Unit Tests + * <p> + * @author Rajiv Singla. Creation Date: 10/6/2016. + */ +public abstract class BaseDCAEAnalyticsUnitTest extends BaseDCAEAnalyticsCommonTest { + + +} diff --git a/dcae-analytics-test/src/main/java/org/openecomp/dcae/analytics/test/annotation/GuiceModules.java b/dcae-analytics-test/src/main/java/org/openecomp/dcae/analytics/test/annotation/GuiceModules.java new file mode 100644 index 0000000..3ee8163 --- /dev/null +++ b/dcae-analytics-test/src/main/java/org/openecomp/dcae/analytics/test/annotation/GuiceModules.java @@ -0,0 +1,45 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.test.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Annotation which can be used to provide test guice modules + * <p> + * @author Rajiv Singla. Creation Date: 10/20/2016. + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +public @interface GuiceModules { + + /** + * Test Modules + * + * @return module classes + */ + Class<?>[] value(); +} diff --git a/dcae-analytics-test/src/main/java/org/openecomp/dcae/analytics/test/runner/GuiceJUnitRunner.java b/dcae-analytics-test/src/main/java/org/openecomp/dcae/analytics/test/runner/GuiceJUnitRunner.java new file mode 100644 index 0000000..21a89a9 --- /dev/null +++ b/dcae-analytics-test/src/main/java/org/openecomp/dcae/analytics/test/runner/GuiceJUnitRunner.java @@ -0,0 +1,102 @@ +/* + * ============LICENSE_START========================================================= + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.dcae.analytics.test.runner; + +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.Module; +import org.junit.runners.BlockJUnit4ClassRunner; +import org.junit.runners.model.InitializationError; +import org.openecomp.dcae.analytics.test.annotation.GuiceModules; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; + +/** + * A custom Junit Runner which can be used to run Guice Test with custom Test Modules + * <p> + * @author Rajiv Singla. Creation Date: 10/20/2016. + */ +public class GuiceJUnitRunner extends BlockJUnit4ClassRunner { + + private static final Logger LOG = LoggerFactory.getLogger(GuiceJUnitRunner.class); + + private Injector injector; + + public GuiceJUnitRunner(Class<?> klass) throws InitializationError { + super(klass); + Class<?>[] classes = getModulesFor(klass); + injector = createInjectorFor(classes); + } + + + /** + * Returns a new fixture for running a test. Injects Guice members + */ + @Override + public Object createTest() throws Exception { + Object obj = super.createTest(); + injector.injectMembers(obj); + return obj; + } + + + /** + * Creates new Guice Injector and registers Guice test modules + * + * @param classes test module classes + * @return Guice injector with test modules + * @throws InitializationError + */ + private Injector createInjectorFor(Class<?>[] classes) throws InitializationError { + Module[] modules = new Module[classes.length]; + for (int i = 0; i < classes.length; i++) { + try { + modules[i] = (Module) (classes[i]).newInstance(); + } catch (InstantiationException e) { + throw new InitializationError(e); + } catch (IllegalAccessException e) { + throw new InitializationError(e); + } + } + LOG.debug("Creating Junit Test Runner with Guice Test Modules: {}", Arrays.toString(modules)); + return Guice.createInjector(modules); + } + + /** + * Extract user provide test modules from the {@link GuiceModules} annotation + * + * @param klass Target class which is running the test + * @return Guice modules contained passed in annotation of Guice Modules + * @throws InitializationError + */ + private Class<?>[] getModulesFor(Class<?> klass) throws InitializationError { + GuiceModules annotation = klass.getAnnotation(GuiceModules.class); + if (annotation == null) { + throw new InitializationError( + "Missing @GuiceModules annotation for unit test '" + klass.getName() + + "'"); + } + return annotation.value(); + } + +} diff --git a/dcae-analytics-test/src/main/resources/logback-test.xml b/dcae-analytics-test/src/main/resources/logback-test.xml new file mode 100644 index 0000000..e1cb987 --- /dev/null +++ b/dcae-analytics-test/src/main/resources/logback-test.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ ============LICENSE_START========================================================= + ~ dcae-analytics + ~ ================================================================================ + ~ Copyright © 2017 AT&T Intellectual Property. All rights reserved. + ~ ================================================================================ + ~ Licensed 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. + ~ ============LICENSE_END========================================================= + --> +<configuration debug="false"> + + <!-- + Disabling some chatty loggers. + --> + <logger name="org.apache.commons.beanutils" level="ERROR"/> + <logger name="org.apache.zookeeper.server" level="ERROR"/> + <logger name="org.apache.zookeeper" level="ERROR"/> + <logger name="com.ning" level="WARN"/> + <logger name="org.apache.spark" level="WARN"/> + <logger name="org.spark-project" level="WARN"/> + <logger name="org.apache.hadoop" level="WARN"/> + <logger name="org.apache.hive" level="WARN"/> + <logger name="org.quartz.core" level="WARN"/> + <logger name="org.eclipse.jetty" level="WARN"/> + <logger name="io.netty.util.internal" level="WARN"/> + + <logger name="org.apache.twill" level="WARN"/> + <logger name="co.cask.cdap" level="INFO"/> + <logger name="org.openecomp" level="DEBUG"/> + + <appender name="Console" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <pattern>%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n</pattern> + </encoder> + </appender> + + <root level="ERROR"> + <appender-ref ref="Console"/> + </root> + + +</configuration> + diff --git a/findbugs-exclude.xml b/findbugs-exclude.xml new file mode 100644 index 0000000..4033614 --- /dev/null +++ b/findbugs-exclude.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ ============LICENSE_START========================================================= + ~ dcae-analytics + ~ ================================================================================ + ~ Copyright © 2017 AT&T Intellectual Property. All rights reserved. + ~ ================================================================================ + ~ Licensed 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. + ~ ============LICENSE_END========================================================= + --> + +<FindBugsFilter> + <Match> + <!-- Ignore warnings for DACE Models project --> + <Class name="org.openecomp.dcae.analytics.model.domain.cef.MeasurementsForVfScaling"/> + </Match> + + <Match> + <!-- TCA Application has unconfirmed cast which is provided by CDAP --> + <Class name="org.openecomp.dcae.analytics.tca.TCAAnalyticsApplication"/> + <Bug pattern="BC_UNCONFIRMED_CAST_OF_RETURN_VALUE"/> + </Match> + +</FindBugsFilter> diff --git a/pmd-exclude.properties b/pmd-exclude.properties new file mode 100644 index 0000000..45b3c8a --- /dev/null +++ b/pmd-exclude.properties @@ -0,0 +1,22 @@ +# +# ============LICENSE_START========================================================= +# dcae-analytics +# ================================================================================ +# Copyright © 2017 AT&T Intellectual Property. All rights reserved. +# ================================================================================ +# Licensed 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. +# ============LICENSE_END========================================================= +# + +# List fully qualified names of classes that can be excluded for PMD (PROGRAMMING-MISTAKE-DETECTOR) + @@ -0,0 +1,1099 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ ============LICENSE_START========================================================= + ~ dcae-analytics + ~ ================================================================================ + ~ Copyright © 2017 AT&T Intellectual Property. All rights reserved. + ~ ================================================================================ + ~ Licensed 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. + ~ ================================================================================ + ~ ECOMP and OpenECOMP are trademarks and service marks of AT&T Intellectual Property. + ~ ============LICENSE_END========================================================= + --> + +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + + <groupId>org.openecomp.dcae.analytics</groupId> + <artifactId>dcae-analytics</artifactId> + <version>1.0-SNAPSHOT</version> + <packaging>pom</packaging> + + <name>DCAE Analytics Framework</name> + <description>Application Framework for DCAE Analytics</description> + + <pluginRepositories> + <pluginRepository> + <id>JCenter</id> + <name>JCenter Repository</name> + <url>http://jcenter.bintray.com</url> + </pluginRepository> + <pluginRepository> + <id>Restlet</id> + <name>Restlet Repository</name> + <url>http://maven.restlet.com</url> + </pluginRepository> + </pluginRepositories> + + + <distributionManagement> + <repository> + <id>osecomp-nexus-releases</id> + <name>OSECOMP Release Repository</name> + <url>https://ecomp-nexus:8443/repository/maven-releases</url> + </repository> + <snapshotRepository> + <id>osecomp-nexus-snapshots</id> + <name>OSECOMP Snapshot Repository</name> + <url>https://ecomp-nexus:8443/repository/maven-snapshots</url> + </snapshotRepository> + <site> + <id>dcae-javadoc</id> + <url>dav:https://ecomp-nexus:8443/repository/dcae-javadoc/${project.artifactId}/${project.version}</url> + </site> + </distributionManagement> + + + <properties> + + <!-- PROJECT SETTINGS--> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> + <main.basedir>${project.basedir}</main.basedir> + + <!--TEST SETTINGS --> + <surefire.redirectTestOutputToFile>true</surefire.redirectTestOutputToFile> + + <!-- PROJECT DEPENDENCIES --> + <cdap.version>3.5.1</cdap.version> + <cask.common.version>0.7.1</cask.common.version> + <hadoop.version>2.3.0</hadoop.version> + <netty.http.version>0.15.0</netty.http.version> + <gson.version>2.2.4</gson.version> + <guava.version>13.0.1</guava.version> + <guice.version>3.0</guice.version> + <slf4j.version>1.7.5</slf4j.version> + <logback.version>1.0.9</logback.version> + <findbugs.jsr305.version>2.0.1</findbugs.jsr305.version> + <findbugs.annotations.version>3.0.0</findbugs.annotations.version> + <lombok.version>1.16.10</lombok.version> + <jackson.json.version>2.6.2</jackson.json.version> + <json.path.version>2.2.0</json.path.version> + <quartz.version>2.2.0</quartz.version> + <httpclient.version>4.5.2</httpclient.version> + <commons.lang3.version>3.5</commons.lang3.version> + + + <!--TESTING DEPENDENCIES --> + <junit.version>4.12</junit.version> + <jayway.jsonpath.version>2.0.0</jayway.jsonpath.version> + <jsonassert.version>1.4.0</jsonassert.version> + <junit.version>4.12</junit.version> + <mockito.version>2.2.11</mockito.version> + + + <!-- PLUGINS VERSIONS --> + <compiler.plugin.version>3.3</compiler.plugin.version> + <surefire.plugin.version>2.19.1</surefire.plugin.version> + <failsafe.plugin.version>2.19.1</failsafe.plugin.version> + <bundle.plugin.version>2.3.7</bundle.plugin.version> + <eclipe.plugin.version>2.10</eclipe.plugin.version> + <findbugs.plugin.version>3.0.2</findbugs.plugin.version> + <cobertura.plugin.version>2.7</cobertura.plugin.version> + <pmd.plugin.version>3.5</pmd.plugin.version> + <surefire.report.plugin.version>2.19.1</surefire.report.plugin.version> + <checkstyle.plugin.version>2.16</checkstyle.plugin.version> + <javadoc.plugin.version>2.10.4</javadoc.plugin.version> + <source.plugin.version>2.4</source.plugin.version> + <jar.plugin.version>2.4</jar.plugin.version> + <deploy.plugin.version>2.8</deploy.plugin.version> + <jacoco.plugin.version>0.7.7.201606060606</jacoco.plugin.version> + <lombok.plugin.version>1.16.10.0</lombok.plugin.version> + <jgitflow.plugin.version>1.0-m5.1</jgitflow.plugin.version> + <maven.site.plugin>3.5.1</maven.site.plugin> + <jxr.plugin.version>2.5</jxr.plugin.version> + <project.info.reports.plugin.version>2.7</project.info.reports.plugin.version> + <blackduck.hub.version>1.4.0</blackduck.hub.version> + <sonar.plugin.version>3.2</sonar.plugin.version> + <license.plugin.version>1.12</license.plugin.version> + + <!--PLUGIN SETTINGS --> + <compiler.source.version>1.7</compiler.source.version> + <compiler.target.version>1.7</compiler.target.version> + <unit.test.pattern>**/*Test.java</unit.test.pattern> + <skip.unit.tests>false</skip.unit.tests> + <integration.test.pattern>**/*IT.java</integration.test.pattern> + <skip.integration.tests>true</skip.integration.tests> + <pmd.violation.buildfail>true</pmd.violation.buildfail> + <findbugs.failOnError>true</findbugs.failOnError> + <checkstyle.failOnViolation>true</checkstyle.failOnViolation> + <checkstyle.file.name>checkstyle.xml</checkstyle.file.name> + <checkstyle.suppression.file.name>suppressions.xml</checkstyle.suppression.file.name> + <jacoco.it.execution.data.file>${project.build.directory}/coverage-reports/jacoco-it.exec + </jacoco.it.execution.data.file> + <jacoco.ut.execution.data.file>${project.build.directory}/coverage-reports/jacoco-ut.exec + </jacoco.ut.execution.data.file> + <dependency.locations.enabled>false</dependency.locations.enabled> + + + </properties> + + <dependencyManagement> + + <dependencies> + + <!-- CDAP --> + <dependency> + <groupId>co.cask.cdap</groupId> + <artifactId>cdap-api</artifactId> + <version>${cdap.version}</version> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>co.cask.http</groupId> + <artifactId>netty-http</artifactId> + <version>${netty.http.version}</version> + </dependency> + + <dependency> + <groupId>co.cask.common</groupId> + <artifactId>common-http</artifactId> + <version>${cask.common.version}</version> + <!-- exclude this, otherwise an old version of asm will get pulled in --> + <exclusions> + <exclusion> + <groupId>org.ow2.asm</groupId> + <artifactId>asm-all</artifactId> + </exclusion> + </exclusions> + </dependency> + + <!-- HADOOP --> + <dependency> + <groupId>org.apache.hadoop</groupId> + <artifactId>hadoop-common</artifactId> + <version>${hadoop.version}</version> + <scope>provided</scope> + <exclusions> + <exclusion> + <groupId>commons-logging</groupId> + <artifactId>commons-logging</artifactId> + </exclusion> + <exclusion> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + </exclusion> + <exclusion> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.avro</groupId> + <artifactId>avro</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.zookeeper</groupId> + <artifactId>zookeeper</artifactId> + </exclusion> + <exclusion> + <artifactId>guava</artifactId> + <groupId>com.google.guava</groupId> + </exclusion> + <exclusion> + <artifactId>jersey-core</artifactId> + <groupId>com.sun.jersey</groupId> + </exclusion> + <exclusion> + <artifactId>jersey-json</artifactId> + <groupId>com.sun.jersey</groupId> + </exclusion> + <exclusion> + <artifactId>jersey-server</artifactId> + <groupId>com.sun.jersey</groupId> + </exclusion> + <exclusion> + <artifactId>servlet-api</artifactId> + <groupId>javax.servlet</groupId> + </exclusion> + <exclusion> + <groupId>org.mortbay.jetty</groupId> + <artifactId>jetty</artifactId> + </exclusion> + <exclusion> + <groupId>org.mortbay.jetty</groupId> + <artifactId>jetty-util</artifactId> + </exclusion> + <exclusion> + <artifactId>jasper-compiler</artifactId> + <groupId>tomcat</groupId> + </exclusion> + <exclusion> + <artifactId>jasper-runtime</artifactId> + <groupId>tomcat</groupId> + </exclusion> + <exclusion> + <artifactId>jsp-api</artifactId> + <groupId>javax.servlet.jsp</groupId> + </exclusion> + <exclusion> + <artifactId>slf4j-api</artifactId> + <groupId>org.slf4j</groupId> + </exclusion> + </exclusions> + </dependency> + + <dependency> + <groupId>org.apache.hadoop</groupId> + <artifactId>hadoop-mapreduce-client-core</artifactId> + <version>${hadoop.version}</version> + <scope>provided</scope> + <exclusions> + <exclusion> + <groupId>asm</groupId> + <artifactId>asm</artifactId> + </exclusion> + <exclusion> + <groupId>io.netty</groupId> + <artifactId>netty</artifactId> + </exclusion> + <exclusion> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> + </exclusion> + </exclusions> + </dependency> + + + + <!-- LOGGING --> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <version>${slf4j.version}</version> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-core</artifactId> + <version>${logback.version}</version> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-classic</artifactId> + <version>${logback.version}</version> + <scope>provided</scope> + </dependency> + + <!-- UTILITIES --> + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + <version>${guava.version}</version> + </dependency> + + <dependency> + <groupId>com.google.code.gson</groupId> + <artifactId>gson</artifactId> + <version>${gson.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + <version>${commons.lang3.version}</version> + </dependency> + + <!-- FIND BUGS --> + <dependency> + <groupId>com.google.code.findbugs</groupId> + <artifactId>jsr305</artifactId> + <version>${findbugs.jsr305.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.google.code.findbugs</groupId> + <artifactId>annotations</artifactId> + <version>${findbugs.annotations.version}</version> + <scope>provided</scope> + </dependency> + + <!-- JACKSON JSON --> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-core</artifactId> + <version>${jackson.json.version}</version> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-databind</artifactId> + <version>${jackson.json.version}</version> + </dependency> + + <!-- JSON PATH --> + <dependency> + <groupId>com.jayway.jsonpath</groupId> + <artifactId>json-path</artifactId> + <version>${json.path.version}</version> + </dependency> + + <!-- CODE GENERATION --> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>${lombok.version}</version> + <scope>provided</scope> + </dependency> + + + <!-- DEPENDENCY INJECTION --> + <dependency> + <groupId>com.google.inject</groupId> + <artifactId>guice</artifactId> + <version>${guice.version}</version> + </dependency> + <dependency> + <groupId>com.google.inject.extensions</groupId> + <artifactId>guice-assistedinject</artifactId> + <version>${guice.version}</version> + </dependency> + <dependency> + <groupId>com.google.inject.extensions</groupId> + <artifactId>guice-multibindings</artifactId> + <version>${guice.version}</version> + </dependency> + + <!-- SCHEDULER --> + <dependency> + <groupId>org.quartz-scheduler</groupId> + <artifactId>quartz</artifactId> + <version>${quartz.version}</version> + </dependency> + + <!-- HTTP CLIENT --> + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpclient</artifactId> + <version>${httpclient.version}</version> + </dependency> + + + <!-- TEST DEPENDENCIES --> + <dependency> + <groupId>co.cask.cdap</groupId> + <artifactId>cdap-unit-test</artifactId> + <version>${cdap.version}</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>${junit.version}</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <version>${mockito.version}</version> + </dependency> + + <dependency> + <groupId>com.jayway.jsonpath</groupId> + <artifactId>json-path-assert</artifactId> + <version>${jayway.jsonpath.version}</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.skyscreamer</groupId> + <artifactId>jsonassert</artifactId> + <version>${jsonassert.version}</version> + <scope>test</scope> + </dependency> + + </dependencies> + + </dependencyManagement> + + + <build> + + <extensions> + <extension> + <groupId>org.apache.maven.wagon</groupId> + <artifactId>wagon-webdav-jackrabbit</artifactId> + <version>1.0-beta-7</version> + </extension> + </extensions> + + <pluginManagement> + + <plugins> + + <!-- COMPILER PLUGIN --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>${compiler.plugin.version}</version> + <configuration> + <source>${compiler.target.version}</source> + <target>${compiler.source.version}</target> + </configuration> + </plugin> + + <!-- MAVEN SOURCE PLUGIN --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-source-plugin</artifactId> + <version>${source.plugin.version}</version> + <configuration> + <excludeResources>true</excludeResources> + </configuration> + <executions> + <execution> + <id>attach-sources</id> + <phase>verify</phase> + <goals> + <goal>jar-no-fork</goal> + </goals> + </execution> + </executions> + </plugin> + + + <!-- MAVEN JAVADOC PLUGIN --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-javadoc-plugin</artifactId> + <version>${javadoc.plugin.version}</version> + <configuration> + <!-- minimize console output messages --> + <quiet>true</quiet> + <verbose>false</verbose> + <useStandardDocletOptions>false</useStandardDocletOptions> + </configuration> + <executions> + <execution> + <id>aggregate</id> + <phase>site</phase> + <goals> + <goal>aggregate</goal> + </goals> + </execution> + <execution> + <id>attach-javadoc</id> + <goals> + <goal>jar</goal> + </goals> + </execution> + </executions> + </plugin> + + <!-- MAVEN BUNDLE PLUGIN --> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <version>${bundle.plugin.version}</version> + <extensions>true</extensions> + <configuration> + <instructions> + <Embed-Dependency>*;inline=false;scope=compile</Embed-Dependency> + <Embed-Transitive>true</Embed-Transitive> + <Embed-Directory>lib</Embed-Directory> + </instructions> + </configuration> + <executions> + <execution> + <id>Bundling CDAP Jar</id> + <phase>package</phase> + <goals> + <goal>bundle</goal> + </goals> + </execution> + </executions> + </plugin> + + + <!-- JACOCO CODE COVERAGE PLUGIN --> + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <version>${jacoco.plugin.version}</version> + <configuration> + <excludes> + <!-- Exclude all test classes for code coverage reports --> + <exclude>**/test/**</exclude> + <!-- Exclude all domain and classes as they should only contain domain objects, no logic --> + <exclude>**/domain/**</exclude> + <!-- Exclude mixin class for code coverage as they are just for json parsing hints --> + <exclude>**/mixin/**</exclude> + <!-- Exclude classes ending with "Constants" as they should only store static constants --> + <exclude>**/*Constants.*</exclude> + <!-- Exclude classes ending with "Module" as they are used for wiring beans by guice --> + <exclude>**/*Module.*</exclude> + </excludes> + </configuration> + <executions> + <!-- prepare jacoco agent before unit tests --> + <execution> + <id>pre-unit-test</id> + <goals> + <goal>prepare-agent</goal> + </goals> + <configuration> + <destFile>${jacoco.ut.execution.data.file}</destFile> + <propertyName>surefireArgLine</propertyName> + </configuration> + </execution> + <!-- generate unit test coverage report --> + <execution> + <id>post-unit-test</id> + <phase>test</phase> + <goals> + <goal>report</goal> + </goals> + <configuration> + <dataFile>${jacoco.ut.execution.data.file}</dataFile> + <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory> + </configuration> + </execution> + <!-- prepare jacoco agent before integration tests --> + <execution> + <id>pre-integration-test</id> + <phase>pre-integration-test</phase> + <goals> + <goal>prepare-agent</goal> + </goals> + <configuration> + <destFile>${jacoco.it.execution.data.file}</destFile> + <propertyName>failsafeArgLine</propertyName> + </configuration> + </execution> + <!-- generate integration test coverage report --> + <execution> + <id>post-integration-test</id> + <phase>post-integration-test</phase> + <goals> + <goal>report</goal> + </goals> + <configuration> + <dataFile>${jacoco.it.execution.data.file}</dataFile> + <outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory> + </configuration> + </execution> + </executions> + </plugin> + + + <!-- SUREFIRE TEST PLUGIN --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <version>${surefire.plugin.version}</version> + <configuration> + <skipTests>${skip.unit.tests}</skipTests> + <argLine>-Xmx2048m -Djava.awt.headless=true -XX:+UseConcMarkSweepGC + -XX:OnOutOfMemoryError="kill -9 %p" -XX:+HeapDumpOnOutOfMemoryError + </argLine> + <redirectTestOutputToFile>${surefire.redirectTestOutputToFile}</redirectTestOutputToFile> + <parallel>methods</parallel> + <threadCount>8</threadCount> + <forkCount>8</forkCount> + <reuseForks>true</reuseForks> + <reportFormat>xml</reportFormat> + <trimStackTrace>false</trimStackTrace> + <systemPropertyVariables> + <java.io.tmpdir>${project.build.directory}</java.io.tmpdir> + <logback.configurationFile> + ${basedir}/src/test/resources/logback-test.xml + </logback.configurationFile> + </systemPropertyVariables> + <includes> + <include>${unit.test.pattern}</include> + </includes> + <excludes> + <exclude>${integration.test.pattern}</exclude> + </excludes> + <!-- Sets the VM argument line used when unit tests are run. --> + <argLine>${surefireArgLine}</argLine> + </configuration> + <dependencies> + <dependency> + <groupId>org.apache.maven.surefire</groupId> + <artifactId>surefire-junit47</artifactId> + <version>${surefire.plugin.version}</version> + </dependency> + </dependencies> + </plugin> + + <!-- FAIL SAFE PLUGIN FOR INTEGRATION TEST --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-failsafe-plugin</artifactId> + <version>${failsafe.plugin.version}</version> + <executions> + <execution> + <id>integration-tests</id> + <goals> + <goal>integration-test</goal> + <goal>verify</goal> + </goals> + <configuration> + <skipTests>${skip.integration.tests}</skipTests> + <!-- Sets the VM argument line used when integration tests are run. --> + <!--suppress MavenModelInspection --> + <argLine>${failsafeArgLine}</argLine> + </configuration> + </execution> + </executions> + </plugin> + + + <!-- FIND BUGS (STATIC CODE ANALYSIS) PLUGIN --> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>findbugs-maven-plugin</artifactId> + <version>${findbugs.plugin.version}</version> + <configuration> + <effort>Max</effort> + <threshold>Low</threshold> + <xmlOutput>true</xmlOutput> + <!-- BUILD FAIL ON FINDBUGS ERRORS --> + <failOnError>${findbugs.failOnError}</failOnError> + <excludeFilterFile>${main.basedir}/findbugs-exclude.xml</excludeFilterFile> + <outputDirectory>${project.reporting.outputDirectory}/findbugs</outputDirectory> + <findbugsXmlOutputDirectory>${project.reporting.outputDirectory}/findbugs + </findbugsXmlOutputDirectory> + </configuration> + <executions> + <execution> + <id>analyze-compile</id> + <phase>compile</phase> + <goals> + <goal>check</goal> + </goals> + </execution> + </executions> + </plugin> + + <!-- PMD PLUGIN SETUP --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-pmd-plugin</artifactId> + <version>${pmd.plugin.version}</version> + <configuration> + <sourceEncoding>${project.build.sourceEncoding}</sourceEncoding> + <targetJdk>${compiler.target.version}</targetJdk> + <linkXRef>false</linkXRef> + <excludes> + <!-- IGNORE PMD & CPD ANALYTICS MODEL FACADE OBJECTS --> + <exclude>**/model/facade/**/*.java</exclude> + </excludes> + <!-- BUILD FAIL ON PMD VIOLATION --> + <failOnViolation>${pmd.violation.buildfail}</failOnViolation> + <targetDirectory>${project.reporting.outputDirectory}/pmd</targetDirectory> + </configuration> + <executions> + <execution> + <id>pmd-check</id> + <goals> + <goal>check</goal> + </goals> + <configuration> + <printFailingErrors>true</printFailingErrors> + <excludeFromFailureFile>${main.basedir}/pmd-exclude.properties</excludeFromFailureFile> + </configuration> + </execution> + <execution> + <id>cpd-check</id> + <goals> + <goal>cpd-check</goal> + </goals> + <configuration> + <printFailingErrors>true</printFailingErrors> + <excludeFromFailureFile>${main.basedir}/cpd-exclude.properties</excludeFromFailureFile> + </configuration> + </execution> + </executions> + </plugin> + + + <!-- CHECKSTYLE PLUGIN --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-checkstyle-plugin</artifactId> + <version>${checkstyle.plugin.version}</version> + <executions> + <execution> + <id>validate</id> + <phase>validate</phase> + <configuration> + <configLocation>${checkstyle.file.name}</configLocation> + <suppressionsLocation>${checkstyle.suppression.file.name}</suppressionsLocation> + <encoding>UTF-8</encoding> + <consoleOutput>true</consoleOutput> + <!-- BUILD FAIL ON CHECKSTYLE VIOLATION --> + <failOnViolation>${checkstyle.failOnViolation}</failOnViolation> + <includeTestSourceDirectory>true</includeTestSourceDirectory> + <outputFile>${project.reporting.outputDirectory}/checkstyle</outputFile> + </configuration> + <goals> + <goal>check</goal> + </goals> + </execution> + </executions> + <dependencies> + <dependency> + <groupId>com.puppycrawl.tools</groupId> + <artifactId>checkstyle</artifactId> + <version>6.19</version> + </dependency> + </dependencies> + </plugin> + + <!-- ECLIPSE PLUGIN --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-eclipse-plugin</artifactId> + <version>${eclipe.plugin.version}</version> + </plugin> + + + <!-- LOMBOK PLUGIN --> + <plugin> + <groupId>org.projectlombok</groupId> + <artifactId>lombok-maven-plugin</artifactId> + <version>${lombok.plugin.version}</version> + <executions> + <execution> + <id>delombok</id> + <phase>generate-sources</phase> + <goals> + <goal>delombok</goal> + </goals> + <configuration> + <addOutputDirectory>false</addOutputDirectory> + <sourceDirectory>src/main/java</sourceDirectory> + </configuration> + </execution> + </executions> + </plugin> + + + <!-- JGIT FLOW PLUGIN --> + + <plugin> + <groupId>external.atlassian.jgitflow</groupId> + <artifactId>jgitflow-maven-plugin</artifactId> + <version>${jgitflow.plugin.version}</version> + <configuration> + <!-- Enable this to push to origin using SSH keys --> + <enableSshAgent>true</enableSshAgent> + <!-- Keep your maven sub modules at the same version as the parent POM --> + <autoVersionSubmodules>true</autoVersionSubmodules> + <!-- + Pushing in-development features to origin allows all devs to see what each other + are working on + --> + <pushFeatures>true</pushFeatures> + <!-- + This allows the CI server (e.g. Jenkins) to automatically push new releases to + origin; you can then either manually deploy them or, if you are doing Continuous + Deployments, auto-deploy them to prod + --> + <pushReleases>true</pushReleases> + <!-- + Hot Fixes should be pushed to origin as well so that any dev can pick them up + --> + <pushHotfixes>true</pushHotfixes> + <!-- + Prevents deployments from dev workstations so that they can be done by a CI + server + --> + <flowInitContext> + <masterBranchName>master</masterBranchName> + <developBranchName>develop</developBranchName> + <featureBranchPrefix>feature</featureBranchPrefix> + <releaseBranchPrefix>release</releaseBranchPrefix> + <hotfixBranchPrefix>hotfix</hotfixBranchPrefix> + <!-- Tags must be prefixed with 'v' --> + <versionTagPrefix>v</versionTagPrefix> + </flowInitContext> + <noDeploy>true</noDeploy> + </configuration> + </plugin> + + <!-- JAR PLUGIN --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <version>${jar.plugin.version}</version> + <configuration> + <archive> + <manifest> + <addDefaultImplementationEntries>true</addDefaultImplementationEntries> + </manifest> + <manifestEntries> + <Implementation-Build-Version>${project.version}</Implementation-Build-Version> + </manifestEntries> + </archive> + </configuration> + </plugin> + + + <!-- BLACK DUCK LICENSE SCANNER --> + <plugin> + <groupId>com.blackducksoftware.integration</groupId> + <artifactId>hub-maven-plugin</artifactId> + <version>${blackduck.hub.version}</version> + <inherited>false</inherited> + <configuration> + <hubProjectName>${project.name}</hubProjectName> + <outputDirectory>${project.basedir}</outputDirectory> + </configuration> + <executions> + <execution> + <id>create-bdio-file</id> + <phase>package</phase> + <goals> + <goal>createHubOutput</goal> + </goals> + </execution> + </executions> + </plugin> + + <!-- LICENSE PLUGIN --> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>license-maven-plugin</artifactId> + <version>${license.plugin.version}</version> + <configuration> + <addJavaLicenseAfterPackage>false</addJavaLicenseAfterPackage> + <processStartTag>============LICENSE_START=======================================================</processStartTag> + <processEndTag>============LICENSE_END=========================================================</processEndTag> + <sectionDelimiter>================================================================================</sectionDelimiter> + <licenseName>apache_v2</licenseName> + <inceptionYear>2017</inceptionYear> + <organizationName>AT&T Intellectual Property. All rights reserved.</organizationName> + <projectName>dcae-analytics</projectName> + <canUpdateCopyright>true</canUpdateCopyright> + <canUpdateDescription>true</canUpdateDescription> + <canUpdateLicense>true</canUpdateLicense> + <emptyLineAfterHeader>true</emptyLineAfterHeader> + </configuration> + <executions> + <execution> + <id>first</id> + <goals> + <goal>update-file-header</goal> + </goals> + <phase>process-sources</phase> + </execution> + </executions> + </plugin> + + <!-- SONAR PLUGIN --> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>sonar-maven-plugin</artifactId> + <version>${sonar.plugin.version}</version> + </plugin> + + <!-- DEPLOY PLUGIN --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-deploy-plugin</artifactId> + <version>${deploy.plugin.version}</version> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-site-plugin</artifactId> + <version>${maven.site.plugin}</version> + </plugin> + + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jxr-plugin</artifactId> + <version>${jxr.plugin.version}</version> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-project-info-reports-plugin</artifactId> + <version>${project.info.reports.plugin.version}</version> + <configuration> + <dependencyDetailsEnabled>false</dependencyDetailsEnabled> + <dependencyLocationsEnabled>false</dependencyLocationsEnabled> + </configuration> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-report-plugin</artifactId> + <version>${surefire.report.plugin.version}</version> + </plugin> + + </plugins> + + </pluginManagement> + + <plugins> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-failsafe-plugin</artifactId> + </plugin> + + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-deploy-plugin</artifactId> + </plugin> + + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-source-plugin</artifactId> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-javadoc-plugin</artifactId> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-pmd-plugin</artifactId> + </plugin> + + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>findbugs-maven-plugin</artifactId> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-checkstyle-plugin</artifactId> + </plugin> + + <plugin> + <groupId>external.atlassian.jgitflow</groupId> + <artifactId>jgitflow-maven-plugin</artifactId> + </plugin> + + <plugin> + <groupId>com.blackducksoftware.integration</groupId> + <artifactId>hub-maven-plugin</artifactId> + </plugin> + + </plugins> + </build> + + + <reporting> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-site-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-checkstyle-plugin</artifactId> + <configuration> + <configLocation>${checkstyle.file.name}</configLocation> + <suppressionsLocation>${checkstyle.suppression.file.name}</suppressionsLocation> + </configuration> + </plugin> + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <version>${jacoco.plugin.version}</version> + <configuration> + <dataFile>${jacoco.ut.execution.data.file}</dataFile> + <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jxr-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-pmd-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-project-info-reports-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-report-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-javadoc-plugin</artifactId> + <version>${javadoc.plugin.version}</version> + <configuration> + <failOnError>false</failOnError> + <doclet>org.umlgraph.doclet.UmlGraphDoc</doclet> + <docletArtifact> + <groupId>org.umlgraph</groupId> + <artifactId>umlgraph</artifactId> + <version>5.6</version> + </docletArtifact> + <additionalparam>-views</additionalparam> + <useStandardDocletOptions>true</useStandardDocletOptions> + </configuration> + </plugin> + </plugins> + </reporting> + + + <modules> + <module>dcae-analytics-test</module> + <module>dcae-analytics-model</module> + <module>dcae-analytics-common</module> + <module>dcae-analytics-dmaap</module> + <module>dcae-analytics-tca</module> + </modules> + +</project> diff --git a/suppressions.xml b/suppressions.xml new file mode 100644 index 0000000..5e397bd --- /dev/null +++ b/suppressions.xml @@ -0,0 +1,44 @@ +<?xml version="1.0"?> + +<!-- + ~ ============LICENSE_START========================================================= + ~ dcae-analytics + ~ ================================================================================ + ~ Copyright © 2017 AT&T Intellectual Property. All rights reserved. + ~ ================================================================================ + ~ Licensed 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. + ~ ============LICENSE_END========================================================= + --> + +<!DOCTYPE suppressions PUBLIC + "-//Puppy Crawl//DTD Suppressions 1.1//EN" + "http://www.puppycrawl.com/dtds/suppressions_1_1.dtd"> + +<suppressions> + + <suppress checks="Javadoc.*" files=".*[/\\]src[/\\]test[/\\]java[/\\].*" /> + <suppress checks="Header" files=".*[/\\]src[/\\]test[/\\]java[/\\].*"/> + + <suppress checks="JavadocPackage" files=".*[/\\]src[/\\](main|integration)[/\\]java[/\\].*" /> + <suppress checks="JavadocPackage" files=".*[/\\]src[/\\].*[/\\]internal[/\\].*" /> + + <suppress checks="JavadocStyle" files=".*[/\\]src[/\\](main|integration)[/\\]java[/\\].*" /> + <suppress checks="JavadocStyle" files=".*[/\\]src[/\\].*[/\\]internal[/\\].*" /> + + <suppress checks="RedundantModifier" files=".*[/\\]src[/\\]test[/\\]java[/\\].*" /> + + + <suppress checks=".*" files=".*[/\\]target[/\\]generated-sources[/\\]delombok[/\\].*"/> + + +</suppressions> |