summaryrefslogtreecommitdiffstats
path: root/appc-metric
diff options
context:
space:
mode:
Diffstat (limited to 'appc-metric')
-rw-r--r--appc-metric/.gitignore1
-rw-r--r--appc-metric/.settings/org.eclipse.wst.common.project.facet.core.xml4
-rw-r--r--appc-metric/appc-metric-bundle/.gitignore1
-rw-r--r--appc-metric/appc-metric-bundle/.settings/org.eclipse.wst.common.project.facet.core.xml4
-rw-r--r--appc-metric/appc-metric-bundle/pom.xml111
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/MetricActivator.java53
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/MetricRegistry.java46
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/MetricService.java29
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/Publisher.java34
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/impl/MetricRegistryImpl.java98
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/impl/MetricServiceImpl.java49
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/Counter.java27
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/DispatchingFunctionCounterBuilder.java31
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/DispatchingFuntionMetric.java29
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/DmaapRequestCounterBuilder.java31
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/DmaapRequestCounterMetric.java29
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/Metric.java37
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/MetricBuilderFactory.java30
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/MetricType.java32
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/PrimitiveCounter.java33
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/PrimitiveCounterBuilder.java33
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DefaultPrimitiveCounter.java93
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DispatchingFunctionCounterBuilderImpl.java61
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DispatchingFuntionMetricImpl.java97
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DmaapRequestCounterBuilderImpl.java64
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DmaapRequestCounterMetricImpl.java96
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/MetricBuilderFactoryImpl.java45
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/PrimitiveCounterBuilderImpl.java56
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/PolicyBuilderFactory.java27
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/PublishingPolicy.java40
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/ScheduledPolicyBuilder.java38
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/ScheduledPublishingPolicy.java33
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/impl/PolicyBuilderFactoryImpl.java33
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/impl/ScheduledPolicyBuilderImpl.java65
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/impl/ScheduledPublishingPolicyImpl.java221
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/publisher/LogPublisher.java49
-rw-r--r--appc-metric/appc-metric-bundle/src/main/resources/org/openecomp/appc/default.properties28
-rw-r--r--appc-metric/appc-metric-bundle/src/test/java/org/openecomp/appc/metricservice/TestMetricServiceImpl.java40
-rw-r--r--appc-metric/appc-metric-bundle/src/test/resources/org/openecomp/appc/default.properties26
-rw-r--r--appc-metric/appc-metric-features/.gitignore1
-rw-r--r--appc-metric/appc-metric-features/pom.xml125
-rw-r--r--appc-metric/appc-metric-features/src/main/resources/features.xml38
-rw-r--r--appc-metric/appc-metric-installer/.gitignore1
-rw-r--r--appc-metric/appc-metric-installer/pom.xml133
-rw-r--r--appc-metric/appc-metric-installer/src/assembly/assemble_installer_zip.xml59
-rw-r--r--appc-metric/appc-metric-installer/src/assembly/assemble_mvnrepo_zip.xml47
-rw-r--r--appc-metric/appc-metric-installer/src/main/resources/scripts/install-feature.sh40
-rw-r--r--appc-metric/pom.xml23
48 files changed, 2321 insertions, 0 deletions
diff --git a/appc-metric/.gitignore b/appc-metric/.gitignore
new file mode 100644
index 000000000..b83d22266
--- /dev/null
+++ b/appc-metric/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/appc-metric/.settings/org.eclipse.wst.common.project.facet.core.xml b/appc-metric/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 000000000..f4ef8aa0a
--- /dev/null
+++ b/appc-metric/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+ <installed facet="java" version="1.8"/>
+</faceted-project>
diff --git a/appc-metric/appc-metric-bundle/.gitignore b/appc-metric/appc-metric-bundle/.gitignore
new file mode 100644
index 000000000..b83d22266
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/appc-metric/appc-metric-bundle/.settings/org.eclipse.wst.common.project.facet.core.xml b/appc-metric/appc-metric-bundle/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 000000000..f4ef8aa0a
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+ <installed facet="java" version="1.8"/>
+</faceted-project>
diff --git a/appc-metric/appc-metric-bundle/pom.xml b/appc-metric/appc-metric-bundle/pom.xml
new file mode 100644
index 000000000..79ec32e3a
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/pom.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+
+ <!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.openecomp.appc</groupId>
+ <artifactId>appc-metric</artifactId>
+ <version>1.0.0</version>
+ </parent>
+ <groupId>org.openecomp.appc</groupId>
+ <artifactId>appc-metric-bundle</artifactId>
+ <packaging>bundle</packaging>
+
+ <name>appc-metric-bundle Bundle</name>
+ <description>appc-metric-bundle OSGi bundle project.</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <version>4.2.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.openecomp.appc</groupId>
+ <artifactId>appc-common</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.11</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <version>1.10.19</version>
+ </dependency>
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-api-mockito</artifactId>
+ <version>1.6.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest-core</artifactId>
+ <version>1.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.objenesis</groupId>
+ <artifactId>objenesis</artifactId>
+ <version>2.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <version>1.8.4</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-module-junit4</artifactId>
+ <version>1.6.2</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>2.3.7</version>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+ <Bundle-Version>${project.version}</Bundle-Version>
+ <Bundle-Activator>org.openecomp.appc.MetricActivator</Bundle-Activator>
+ <Embed-Dependency>appc-common,eelf-core,logback-core,logback-classic,appc-data-lib;scope=compile|runtime;inline=false</Embed-Dependency>
+ <Embed-Transitive>true</Embed-Transitive>
+ <Export-Service>org.openecomp.appc.metricservice.impl.MetricServiceImpl,org.openecomp.appc.metricservice.MetricService,org.openecomp.appc.metricservice.policy.*,org.openecomp.appc.metricservice.metric.*</Export-Service>
+ <Export-Package>org.openecomp.appc.metricservice,org.openecomp.appc.metricservice.impl,org.openecomp.appc.metricservice.policy,org.openecomp.appc.metricservice.publisher,org.openecomp.appc.metricservice.metric</Export-Package>
+ <Import-Package>!groovy.lang,!javax.*,!org.apache.log,!org.apache.log4j.*,!org.codehaus.jackson.*,!org.codehaus.jackson.map.*,!org.codehaus.commons.compiler,!org.codehaus.groovy.*,!org.apache.commons.lang3,!org.codehaus.janino,!org.jasypt.*,!com.ibm.icu.*,!com.sun.faces.*,*</Import-Package>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/MetricActivator.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/MetricActivator.java
new file mode 100644
index 000000000..8da102670
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/MetricActivator.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc;
+
+import org.openecomp.appc.metricservice.MetricService;
+import org.openecomp.appc.metricservice.impl.MetricServiceImpl;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+
+
+public class MetricActivator implements BundleActivator {
+
+ private ServiceRegistration registration = null;
+
+ private static final EELFLogger logger = EELFManager.getInstance().getLogger(MetricActivator.class);
+
+ @Override
+ public void start(BundleContext bundleContext) throws Exception {
+ logger.debug("Starting Metric service " );
+ MetricService impl = new MetricServiceImpl();
+ String regName = MetricService.class.getName();
+ logger.debug("Registering Metric service " + regName);
+ registration = bundleContext.registerService(regName, impl, null);
+ logger.debug("Registered Metric service " + regName);
+ }
+
+ @Override
+ public void stop(BundleContext bundleContext) throws Exception {
+
+ }
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/MetricRegistry.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/MetricRegistry.java
new file mode 100644
index 000000000..f2f6e1bb2
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/MetricRegistry.java
@@ -0,0 +1,46 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice;
+
+import org.openecomp.appc.metricservice.metric.Counter;
+import org.openecomp.appc.metricservice.metric.Metric;
+import org.openecomp.appc.metricservice.metric.MetricBuilderFactory;
+import org.openecomp.appc.metricservice.policy.PolicyBuilderFactory;
+import org.openecomp.appc.metricservice.policy.PublishingPolicy;
+
+/**
+ *
+ * A named group of metrics which might be related to a specific domain. The service doesn't limit number of metric registries per instance.
+ * It's up to application to decide on domain scope. The registry instances are independent.
+ *
+ */
+public interface MetricRegistry {
+ boolean register(Metric metric);
+ void attach (PublishingPolicy publishPolicy);
+ MetricBuilderFactory metricBuilderFactory();
+ PolicyBuilderFactory policyBuilderFactory();
+ Counter counter(String value);
+ Counter[] counters();
+ Metric[] metrics();
+ Metric metric(String metricName);
+ void dispose();
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/MetricService.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/MetricService.java
new file mode 100644
index 000000000..b75ca2a30
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/MetricService.java
@@ -0,0 +1,29 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice;
+
+
+public interface MetricService {
+ MetricRegistry registry(String name);
+ MetricRegistry createRegistry(String name);
+ void dispose();
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/Publisher.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/Publisher.java
new file mode 100644
index 000000000..09815d07d
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/Publisher.java
@@ -0,0 +1,34 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice;
+
+import org.openecomp.appc.metricservice.metric.Metric;
+
+/**
+ * Low-level logic of exposing metric values in certain way. There might be plenty of options such as logging, JMX, etc.
+ * API to be supported by any logic that is going to be plugged into metric service.
+ * The publisher is considered as low-level technical unit which, potentially, can be reused to expose metrics from different registries
+ *
+ */
+public interface Publisher {
+ void publish(MetricRegistry metricRegistry,Metric[] metrics);
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/impl/MetricRegistryImpl.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/impl/MetricRegistryImpl.java
new file mode 100644
index 000000000..a36ccb37b
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/impl/MetricRegistryImpl.java
@@ -0,0 +1,98 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.impl;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.openecomp.appc.metricservice.MetricRegistry;
+import org.openecomp.appc.metricservice.metric.Counter;
+import org.openecomp.appc.metricservice.metric.Metric;
+import org.openecomp.appc.metricservice.metric.MetricBuilderFactory;
+import org.openecomp.appc.metricservice.metric.impl.MetricBuilderFactoryImpl;
+import org.openecomp.appc.metricservice.policy.PolicyBuilderFactory;
+import org.openecomp.appc.metricservice.policy.PublishingPolicy;
+import org.openecomp.appc.metricservice.policy.impl.PolicyBuilderFactoryImpl;
+
+
+public class MetricRegistryImpl implements MetricRegistry {
+ private String name;
+ private Map<String,Metric> concurrentMetricMap=new ConcurrentHashMap<String,Metric>();
+
+ public MetricRegistryImpl(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public boolean register(Metric metric) {
+ if(concurrentMetricMap.get(metric.name())==null){
+ concurrentMetricMap.put(metric.name(),metric);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void attach(PublishingPolicy publishPolicy) {
+//TODO
+ }
+
+ @Override
+ public MetricBuilderFactory metricBuilderFactory() {
+ return new MetricBuilderFactoryImpl();
+ }
+
+ @Override
+ public PolicyBuilderFactory policyBuilderFactory() {
+ return new PolicyBuilderFactoryImpl() ;
+ }
+
+ @Override
+ public Counter counter(String value) {
+ if(concurrentMetricMap.get(value)!=null )
+ return (Counter)concurrentMetricMap.get(value) ;
+ else
+ return null;
+
+ }
+
+ @Override
+ public Counter[] counters() {
+ return (Counter[])concurrentMetricMap.values().toArray();
+ }
+
+ @Override
+ public Metric[] metrics() {
+ java.util.Collection<Metric> var = concurrentMetricMap.values();
+ return var.toArray(new Metric[var.size()]);
+ }
+
+ @Override
+ public Metric metric(String metricName) {
+ return concurrentMetricMap.get(metricName);
+ }
+
+ @Override
+ public void dispose() {
+ concurrentMetricMap.clear();
+ }
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/impl/MetricServiceImpl.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/impl/MetricServiceImpl.java
new file mode 100644
index 000000000..6e5ca9d10
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/impl/MetricServiceImpl.java
@@ -0,0 +1,49 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.impl;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.openecomp.appc.metricservice.MetricRegistry;
+import org.openecomp.appc.metricservice.MetricService;
+
+
+public class MetricServiceImpl implements MetricService {
+ private Map<String,MetricRegistry> concurrentRegistryMap=new ConcurrentHashMap<>();
+ @Override
+ public MetricRegistry registry(String name) {
+ return concurrentRegistryMap.get(name);
+ }
+
+ @Override
+ public MetricRegistry createRegistry(String name) {
+ if(concurrentRegistryMap.get(name)==null)
+ concurrentRegistryMap.put(name,new MetricRegistryImpl(name));
+ return concurrentRegistryMap.get(name);
+ }
+
+ @Override
+ public void dispose() {
+//TODO
+ }
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/Counter.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/Counter.java
new file mode 100644
index 000000000..e02b5b8d9
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/Counter.java
@@ -0,0 +1,27 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.metric;
+
+
+public interface Counter extends Metric {
+ long value();
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/DispatchingFunctionCounterBuilder.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/DispatchingFunctionCounterBuilder.java
new file mode 100644
index 000000000..bb6090c63
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/DispatchingFunctionCounterBuilder.java
@@ -0,0 +1,31 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.metric;
+
+
+public interface DispatchingFunctionCounterBuilder {
+ DispatchingFunctionCounterBuilder withName(String name);
+ DispatchingFunctionCounterBuilder withAcceptRequestValue(long value);
+ DispatchingFunctionCounterBuilder withRejectRequestValue(long value);
+ DispatchingFunctionCounterBuilder withType(MetricType type);
+ DispatchingFuntionMetric build();
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/DispatchingFuntionMetric.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/DispatchingFuntionMetric.java
new file mode 100644
index 000000000..c4666c8ba
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/DispatchingFuntionMetric.java
@@ -0,0 +1,29 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.metric;
+
+
+public interface DispatchingFuntionMetric extends Metric {
+ void incrementAcceptedRequest();
+ void incrementRejectedRequest();
+ String value();
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/DmaapRequestCounterBuilder.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/DmaapRequestCounterBuilder.java
new file mode 100644
index 000000000..553b54db0
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/DmaapRequestCounterBuilder.java
@@ -0,0 +1,31 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.metric;
+
+
+public interface DmaapRequestCounterBuilder {
+ DmaapRequestCounterBuilder withName(String name);
+ DmaapRequestCounterBuilder withRecievedMessage(long value);
+ DmaapRequestCounterBuilder withPublishedMessage(long value);
+ DmaapRequestCounterBuilder withType(MetricType type);
+ DmaapRequestCounterMetric build();
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/DmaapRequestCounterMetric.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/DmaapRequestCounterMetric.java
new file mode 100644
index 000000000..02fc40520
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/DmaapRequestCounterMetric.java
@@ -0,0 +1,29 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.metric;
+
+
+public interface DmaapRequestCounterMetric extends Metric {
+ void incrementRecievedMessage();
+ void incrementPublishedMessage();
+ String value();
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/Metric.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/Metric.java
new file mode 100644
index 000000000..10b8daacf
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/Metric.java
@@ -0,0 +1,37 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.metric;
+
+/**
+ *
+ * a measure of system parameter at the current moment. Each metric is identified by name.
+ * In general case, a metric just reflects its (almost) real-time value and is not responsible for maintaining its historical data.
+ * One that needs to build series of a metric values for statistical/analytic purposes should query the value and store it for further processing.
+ * Metrics can be of different types - counters, timers etc.
+ * The initial service implementation supports simple (flat) counters only.
+ *
+ */
+public interface Metric {
+ String name();
+ void reset();
+ MetricType type();
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/MetricBuilderFactory.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/MetricBuilderFactory.java
new file mode 100644
index 000000000..d4a05c300
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/MetricBuilderFactory.java
@@ -0,0 +1,30 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.metric;
+
+
+public interface MetricBuilderFactory {
+
+ PrimitiveCounterBuilder primitiveCounterBuilder();
+ DispatchingFunctionCounterBuilder dispatchingFunctionCounterBuilder();
+ DmaapRequestCounterBuilder dmaapRequestCounterBuilder();
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/MetricType.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/MetricType.java
new file mode 100644
index 000000000..7ee731a1a
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/MetricType.java
@@ -0,0 +1,32 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.metric;
+
+/**
+ *
+ * Auxiliary enumeration that lists all the supported metric types.
+ * Can be used for generic processing of metrics rather than using Java reflection mechanisms to determine metric kind.
+ *
+ */
+public enum MetricType {
+COUNTER
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/PrimitiveCounter.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/PrimitiveCounter.java
new file mode 100644
index 000000000..1e0d90ef7
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/PrimitiveCounter.java
@@ -0,0 +1,33 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.metric;
+
+/**
+ *
+ * The simplest metric of type counter which mutable value.
+ */
+public interface PrimitiveCounter extends Counter{
+ void increment();
+ void increment(long value);
+ void decrement();
+ void decrement(long value);
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/PrimitiveCounterBuilder.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/PrimitiveCounterBuilder.java
new file mode 100644
index 000000000..42b024803
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/PrimitiveCounterBuilder.java
@@ -0,0 +1,33 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.metric;
+
+/**
+ *
+ * Builder interface which can be used to instantiate and initialize a new primitive counter instance.
+ */
+public interface PrimitiveCounterBuilder {
+ PrimitiveCounterBuilder withName(String name);
+ PrimitiveCounterBuilder withValue(long value);
+ PrimitiveCounterBuilder withType(MetricType type);
+ PrimitiveCounter build();
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DefaultPrimitiveCounter.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DefaultPrimitiveCounter.java
new file mode 100644
index 000000000..c41def981
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DefaultPrimitiveCounter.java
@@ -0,0 +1,93 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.metric.impl;
+
+import org.openecomp.appc.metricservice.metric.MetricType;
+import org.openecomp.appc.metricservice.metric.PrimitiveCounter;
+
+
+public class DefaultPrimitiveCounter implements PrimitiveCounter{
+ private String name;
+ private MetricType metricType;
+ private long counter;
+
+ public DefaultPrimitiveCounter(String name, MetricType metricType, long counter) {
+ this.name = name;
+ this.metricType = metricType;
+ this.counter = counter;
+ }
+
+ public DefaultPrimitiveCounter(String name, MetricType metricType) {
+ this.counter=0;
+ this.name = name;
+ this.metricType = metricType;
+ }
+
+ @Override
+ public void increment() {
+ increment(1);
+ }
+
+ @Override
+ public void increment(long value) {
+ this.counter+=value;
+ }
+
+ @Override
+ public void decrement() {
+ decrement(1);
+ }
+
+ @Override
+ public void decrement(long value) {
+ this.counter-=value;
+ }
+
+ @Override
+ public long value() {
+ return this.counter;
+ }
+
+ @Override
+ public String name() {
+ return this.name;
+ }
+
+ @Override
+ public void reset() {
+ this.counter=0 ;
+ }
+
+ @Override
+ public String toString() {
+ return "DefaultPrimitiveCounter{" +
+ "name='" + name + '\'' +
+ ", metricType=" + metricType +
+ ", counter=" + counter +
+ '}';
+ }
+
+ @Override
+ public MetricType type() {
+ return this.metricType;
+ }
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DispatchingFunctionCounterBuilderImpl.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DispatchingFunctionCounterBuilderImpl.java
new file mode 100644
index 000000000..57a4234c4
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DispatchingFunctionCounterBuilderImpl.java
@@ -0,0 +1,61 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.metric.impl;
+
+import org.openecomp.appc.metricservice.metric.DispatchingFunctionCounterBuilder;
+import org.openecomp.appc.metricservice.metric.DispatchingFuntionMetric;
+import org.openecomp.appc.metricservice.metric.MetricType;
+
+
+public class DispatchingFunctionCounterBuilderImpl implements DispatchingFunctionCounterBuilder {
+ private String name;
+ private MetricType metricType;
+ private long acceptedRequested;
+ private long rejectedRequest;
+
+ @Override
+ public DispatchingFunctionCounterBuilder withName(String name) {
+ this.name=name;
+ return this;
+ }
+
+ @Override
+ public DispatchingFunctionCounterBuilder withAcceptRequestValue(long value) {
+ this.acceptedRequested=value;
+ return this;
+ }
+ @Override
+ public DispatchingFunctionCounterBuilder withRejectRequestValue(long value) {
+ this.rejectedRequest=value;
+ return this;
+ }
+ @Override
+ public DispatchingFunctionCounterBuilder withType(MetricType type) {
+ this.metricType=type;
+ return this;
+ }
+
+ @Override
+ public DispatchingFuntionMetric build() {
+ return new DispatchingFuntionMetricImpl(this.name,this.metricType,this.acceptedRequested,this.rejectedRequest);
+ }
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DispatchingFuntionMetricImpl.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DispatchingFuntionMetricImpl.java
new file mode 100644
index 000000000..0dd3b97bf
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DispatchingFuntionMetricImpl.java
@@ -0,0 +1,97 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.metric.impl;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.TimeZone;
+
+import org.openecomp.appc.metricservice.metric.DispatchingFuntionMetric;
+import org.openecomp.appc.metricservice.metric.MetricType;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+
+public class DispatchingFuntionMetricImpl implements DispatchingFuntionMetric {
+ private String name;
+ private MetricType metricType;
+ private long acceptedRequested;
+ private long rejectedRequest;
+ private static final SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd");
+ private static final EELFLogger logger = EELFManager.getInstance().getLogger(DmaapRequestCounterMetricImpl.class);
+
+ public DispatchingFuntionMetricImpl(String name, MetricType metricType, long acceptedRequested, long rejectedRequest) {
+ this.name = name;
+ this.metricType = metricType;
+ this.acceptedRequested = acceptedRequested;
+ this.rejectedRequest = rejectedRequest;
+ }
+
+ @Override
+ public void incrementAcceptedRequest() {
+ this.acceptedRequested+=1;
+ }
+
+ @Override
+ public void incrementRejectedRequest() {
+ this.rejectedRequest+=1;
+ }
+
+ @Override
+ public String value() {
+ logger.debug("Value is getting calculated for metric :" + this.name);
+ try{
+ Calendar cal = Calendar.getInstance();
+ cal.setTimeZone(TimeZone.getTimeZone("UTC"));
+ String date=dateFormat.format(cal.getTime());
+ String value=date+"["+acceptedRequested+","+rejectedRequest+"]"+"@"+(acceptedRequested+rejectedRequest);
+ logger.debug("Current value of the metric "+this.name+" :"+value);
+ return value ;
+
+ }catch (Exception e){
+ logger.debug("Cant format the date.");
+ }
+ return null;
+
+ }
+
+ @Override
+ public String name() {
+ return this.name;
+ }
+
+ @Override
+ public void reset() {
+ this.acceptedRequested=0;
+ this.rejectedRequest=0;
+ }
+
+ @Override
+ public MetricType type() {
+ return this.metricType;
+ }
+ @Override
+ public String toString() {
+ return this.value();
+ }
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DmaapRequestCounterBuilderImpl.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DmaapRequestCounterBuilderImpl.java
new file mode 100644
index 000000000..65aefed3e
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DmaapRequestCounterBuilderImpl.java
@@ -0,0 +1,64 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.metric.impl;
+
+import org.openecomp.appc.metricservice.metric.MetricType;
+import org.openecomp.appc.metricservice.metric.DmaapRequestCounterBuilder;
+import org.openecomp.appc.metricservice.metric.DmaapRequestCounterMetric;
+
+
+public class DmaapRequestCounterBuilderImpl implements DmaapRequestCounterBuilder {
+ private String name;
+ private MetricType metricType;
+ private long recievedMessage;
+ private long publishedMessage;
+
+ @Override
+ public DmaapRequestCounterBuilder withName(String name) {
+ this.name=name;
+ return this;
+ }
+
+ @Override
+ public DmaapRequestCounterBuilder withRecievedMessage(long value) {
+
+ this.recievedMessage=value;
+ return this;
+ }
+
+ @Override
+ public DmaapRequestCounterBuilder withPublishedMessage(long value) {
+ this.publishedMessage=value;
+ return this;
+ }
+
+ @Override
+ public DmaapRequestCounterBuilder withType(MetricType type) {
+ this.metricType=type;
+ return this;
+ }
+
+ @Override
+ public DmaapRequestCounterMetric build() {
+ return new DmaapRequestCounterMetricImpl(this.name,this.metricType,this.recievedMessage,this.publishedMessage);
+ }
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DmaapRequestCounterMetricImpl.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DmaapRequestCounterMetricImpl.java
new file mode 100644
index 000000000..877fa6e31
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/DmaapRequestCounterMetricImpl.java
@@ -0,0 +1,96 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.metric.impl;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.TimeZone;
+
+import org.openecomp.appc.metricservice.metric.MetricType;
+import org.openecomp.appc.metricservice.metric.DmaapRequestCounterMetric;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+
+public class DmaapRequestCounterMetricImpl implements DmaapRequestCounterMetric {
+
+ private String name;
+ private MetricType metricType;
+ private long recievedMessage;
+ private long publishedMessage;
+ private static final SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd");
+ private static final EELFLogger logger = EELFManager.getInstance().getLogger(DmaapRequestCounterMetricImpl.class);
+ public DmaapRequestCounterMetricImpl(String name, MetricType metricType, long recievedMessage, long publishedMessage) {
+ this.name = name;
+ this.metricType = metricType;
+ this.recievedMessage = recievedMessage;
+ this.publishedMessage=publishedMessage;
+ }
+
+ @Override
+ public void incrementRecievedMessage() {
+ this.recievedMessage+=1;
+ }
+
+ @Override
+ public void incrementPublishedMessage() {
+ this.publishedMessage+=1;
+ }
+
+ @Override
+ public String value() {
+ logger.debug("Value is getting calculated for metric :" + this.name);
+ try{
+ Calendar cal = Calendar.getInstance();
+ cal.setTimeZone(TimeZone.getTimeZone("UTC"));
+ String date=dateFormat.format(cal.getTime());
+ String value=date+"["+recievedMessage+"],["+publishedMessage+"]";
+ logger.debug("Current value of the metric "+this.name+" :"+value);
+ return value;
+ }catch (Exception e){
+ logger.debug("Cant format the date.");
+ }
+ return null;
+ }
+
+ @Override
+ public String name() {
+ return this.name;
+ }
+
+ @Override
+ public void reset() {
+ this.recievedMessage=0;
+ this.publishedMessage=0;
+ }
+
+ @Override
+ public MetricType type() {
+ return this.metricType;
+ }
+
+ @Override
+ public String toString() {
+ return this.value();
+ }
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/MetricBuilderFactoryImpl.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/MetricBuilderFactoryImpl.java
new file mode 100644
index 000000000..f08ffa84d
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/MetricBuilderFactoryImpl.java
@@ -0,0 +1,45 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.metric.impl;
+
+import org.openecomp.appc.metricservice.metric.DispatchingFunctionCounterBuilder;
+import org.openecomp.appc.metricservice.metric.MetricBuilderFactory;
+import org.openecomp.appc.metricservice.metric.PrimitiveCounterBuilder;
+import org.openecomp.appc.metricservice.metric.DmaapRequestCounterBuilder;
+
+
+public class MetricBuilderFactoryImpl implements MetricBuilderFactory {
+ @Override
+ public PrimitiveCounterBuilder primitiveCounterBuilder() {
+ return new PrimitiveCounterBuilderImpl();
+ }
+
+ @Override
+ public DispatchingFunctionCounterBuilder dispatchingFunctionCounterBuilder() {
+ return new DispatchingFunctionCounterBuilderImpl() ;
+ }
+
+ @Override
+ public DmaapRequestCounterBuilder dmaapRequestCounterBuilder() {
+ return new DmaapRequestCounterBuilderImpl();
+ }
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/PrimitiveCounterBuilderImpl.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/PrimitiveCounterBuilderImpl.java
new file mode 100644
index 000000000..ec6a1843b
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/metric/impl/PrimitiveCounterBuilderImpl.java
@@ -0,0 +1,56 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.metric.impl;
+
+import org.openecomp.appc.metricservice.metric.MetricType;
+import org.openecomp.appc.metricservice.metric.PrimitiveCounter;
+import org.openecomp.appc.metricservice.metric.PrimitiveCounterBuilder;
+
+
+public class PrimitiveCounterBuilderImpl implements PrimitiveCounterBuilder {
+ private String name;
+ private MetricType metricType;
+ private long counter;
+
+ @Override
+ public PrimitiveCounterBuilder withName(String name) {
+ this.name=name;
+ return this;
+ }
+
+ @Override
+ public PrimitiveCounterBuilder withValue(long value) {
+ this.counter=value;
+ return this;
+ }
+
+ @Override
+ public PrimitiveCounterBuilder withType(MetricType type) {
+ this.metricType=type;
+ return this;
+ }
+
+ @Override
+ public PrimitiveCounter build() {
+ return new DefaultPrimitiveCounter(this.name,this.metricType,this.counter);
+ }
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/PolicyBuilderFactory.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/PolicyBuilderFactory.java
new file mode 100644
index 000000000..e38282506
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/PolicyBuilderFactory.java
@@ -0,0 +1,27 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.policy;
+
+
+public interface PolicyBuilderFactory {
+ ScheduledPolicyBuilder scheduledPolicyBuilder();
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/PublishingPolicy.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/PublishingPolicy.java
new file mode 100644
index 000000000..34eaa52a5
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/PublishingPolicy.java
@@ -0,0 +1,40 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.policy;
+
+import org.openecomp.appc.exceptions.APPCException;
+import org.openecomp.appc.metricservice.metric.Metric;
+
+/**
+ *
+ * A custom logic that determines strategy of exposing metric values.
+ * Policy is associated with a specific registry and its implementation can very from the simplest options, such as 'real-time' behavior (upon each value change) to more sophisticated approaches such as thresholds or recurrent scheduling rules.
+ * The policy can also decide whether or not to publish the entire metric registry or just a subset of the it (e.g. changed ones).
+ * Policy supports execution of one or more Publishers.
+ *
+ */
+public interface PublishingPolicy {
+ void onMetricChange(Metric meric) throws APPCException;
+ Metric[] metrics();
+
+ void init();
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/ScheduledPolicyBuilder.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/ScheduledPolicyBuilder.java
new file mode 100644
index 000000000..0eff940fb
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/ScheduledPolicyBuilder.java
@@ -0,0 +1,38 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.policy;
+
+import org.openecomp.appc.metricservice.Publisher;
+import org.openecomp.appc.metricservice.metric.Metric;
+
+/**
+ *
+ * An auxiliary class to instantiate scheduler-based policy delivered along with the initial release of the service.
+ *
+ */
+public interface ScheduledPolicyBuilder {
+ ScheduledPolicyBuilder withStartTime(long time);
+ ScheduledPolicyBuilder withPeriod(long period);
+ ScheduledPolicyBuilder withPublishers(Publisher[] publishers);
+ ScheduledPolicyBuilder withMetrics(Metric[] metrics);
+ PublishingPolicy build();
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/ScheduledPublishingPolicy.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/ScheduledPublishingPolicy.java
new file mode 100644
index 000000000..5f264a661
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/ScheduledPublishingPolicy.java
@@ -0,0 +1,33 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.policy;
+
+import org.openecomp.appc.metricservice.Publisher;
+
+
+public interface ScheduledPublishingPolicy extends PublishingPolicy{
+
+ long getStartTime();
+ long getPeriod();
+ Publisher[] getPublishers();
+ void reset();
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/impl/PolicyBuilderFactoryImpl.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/impl/PolicyBuilderFactoryImpl.java
new file mode 100644
index 000000000..01296e10a
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/impl/PolicyBuilderFactoryImpl.java
@@ -0,0 +1,33 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.policy.impl;
+
+import org.openecomp.appc.metricservice.policy.PolicyBuilderFactory;
+import org.openecomp.appc.metricservice.policy.ScheduledPolicyBuilder;
+
+
+public class PolicyBuilderFactoryImpl implements PolicyBuilderFactory {
+ @Override
+ public ScheduledPolicyBuilder scheduledPolicyBuilder() {
+ return new ScheduledPolicyBuilderImpl();
+ }
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/impl/ScheduledPolicyBuilderImpl.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/impl/ScheduledPolicyBuilderImpl.java
new file mode 100644
index 000000000..aa84e311a
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/impl/ScheduledPolicyBuilderImpl.java
@@ -0,0 +1,65 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.policy.impl;
+
+import org.openecomp.appc.metricservice.Publisher;
+import org.openecomp.appc.metricservice.metric.Metric;
+import org.openecomp.appc.metricservice.policy.PublishingPolicy;
+import org.openecomp.appc.metricservice.policy.ScheduledPolicyBuilder;
+
+
+public class ScheduledPolicyBuilderImpl implements ScheduledPolicyBuilder {
+
+ private long startTime;
+ private long period;
+ private Publisher[] publishers;
+ private Metric[] metrics;
+
+ @Override
+ public ScheduledPolicyBuilder withStartTime(long time) {
+ this.startTime=time;
+ return this;
+ }
+
+ @Override
+ public ScheduledPolicyBuilder withPeriod(long period) {
+ this.period=period;
+ return this;
+ }
+
+ @Override
+ public ScheduledPolicyBuilder withPublishers(Publisher[] publishers) {
+ this.publishers=publishers;
+ return this;
+ }
+
+ @Override
+ public ScheduledPolicyBuilder withMetrics(Metric[] metrics) {
+ this.metrics=metrics;
+ return this;
+ }
+
+ @Override
+ public PublishingPolicy build() {
+ return new ScheduledPublishingPolicyImpl(this.publishers,this.metrics);
+ }
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/impl/ScheduledPublishingPolicyImpl.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/impl/ScheduledPublishingPolicyImpl.java
new file mode 100644
index 000000000..8c3dd49c3
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/policy/impl/ScheduledPublishingPolicyImpl.java
@@ -0,0 +1,221 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.policy.impl;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Properties;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.TimeUnit;
+
+import org.openecomp.appc.configuration.Configuration;
+import org.openecomp.appc.configuration.ConfigurationFactory;
+import org.openecomp.appc.exceptions.APPCException;
+import org.openecomp.appc.metricservice.MetricRegistry;
+import org.openecomp.appc.metricservice.MetricService;
+import org.openecomp.appc.metricservice.Publisher;
+import org.openecomp.appc.metricservice.metric.Metric;
+import org.openecomp.appc.metricservice.policy.ScheduledPublishingPolicy;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+
+public class ScheduledPublishingPolicyImpl implements ScheduledPublishingPolicy {
+ private long startTime;
+ private long period;
+ private Publisher[] publishers;
+ private Metric[] metrics;
+ private MetricRegistry metricRegistry;
+ private static final EELFLogger logger = EELFManager.getInstance().getLogger(ScheduledPublishingPolicyImpl.class);
+ private ScheduledExecutorService scheduleExecutor;
+ private Configuration configuration;
+
+ public ScheduledPublishingPolicyImpl(long startTime, long period, Publisher[] publishers, Metric[] metrics) {
+ this.startTime = startTime;
+ this.period = period;
+ this.publishers = publishers;
+ this.metrics = metrics;
+ this.scheduleExecutor= Executors.newSingleThreadScheduledExecutor(getThreadFactory(true));
+ }
+
+ public ScheduledPublishingPolicyImpl( Publisher[] publishers, Metric[] metrics) {
+ configuration = ConfigurationFactory.getConfiguration();
+ Properties properties=configuration.getProperties();
+ if(properties!=null){
+ if(properties.getProperty("schedule.policy.metric.period")!=null && properties.getProperty("schedule.policy.metric.start.time")!=null){
+ this.startTime = getConfigStartTime(properties);
+ this.period = getConfigPeriod(properties);
+ logger.info("Metric Properties read from configuration Start Time :"+this.startTime+", Period :"+this.period);
+ }else if(properties.getProperty("schedule.policy.metric.period")!=null){
+ this.startTime=1;
+ this.period=getConfigPeriod(properties);
+ logger.info("Metric Properties read from configuration Start Time :"+this.startTime+", Period :"+this.period);
+
+ }else if(properties.getProperty("schedule.policy.metric.period")==null && properties.getProperty("schedule.policy.metric.start.time")!=null){
+ this.startTime=getConfigStartTime("00:00:00",properties);
+ this.period=(24*60*60*1000)-1;
+ logger.info("Metric Properties read from configuration Start Time :"+this.startTime+", Period :"+this.period);
+
+ }else{
+ logger.info("Metric Properties coming as null,setting to default Start Time :1 ms,Period : 100000 ms");
+ this.startTime = 1;
+ this.period = 100000;
+ logger.info("Metric Properties read from configuration Start Time :"+this.startTime+", Period :"+this.period);
+
+ }
+ } else {
+ logger.info("Metric Properties coming as null,setting to default Start Time :1 ms,Period : 100000 ms");
+ this.startTime = 1;
+ this.period = 100000;
+ logger.info("Metric Properties read from configuration Start Time :"+this.startTime+", Period :"+this.period);
+ }
+ this.publishers = publishers;
+ this.metrics = metrics;
+ this.scheduleExecutor= Executors.newSingleThreadScheduledExecutor(getThreadFactory(true));
+ }
+
+ private long getConfigPeriod(Properties properties) {
+ String period=properties.getProperty("schedule.policy.metric.period");
+ logger.info("Metric period : " +period);
+ long periodInMs=Integer.parseInt(period)*1000;
+ logger.info("Metric period in long : " +periodInMs);
+ return periodInMs;
+ }
+
+ private long getTimeInMs(String time) {
+ String[] strings=time.split(":");
+ if(strings.length==3) {
+ long hour = Integer.parseInt(strings[0]) * 60 * 60 * 1000;
+ long min = Integer.parseInt(strings[1]) * 60 * 1000;
+ long sec = Integer.parseInt(strings[2]) * 1000;
+ return hour+min+sec;
+ }else{
+ return 0;
+ }
+
+ }
+
+
+
+ private long getConfigStartTime(Properties properties) {
+ String startTime=properties.getProperty("schedule.policy.metric.start.time");
+ if(startTime!=null){
+ long timeDiff=(getTimeInMs(startTime))-(getTimeInMs((new SimpleDateFormat("HH:mm:ss")).format(new Date())));
+ long period=getConfigPeriod(properties);
+ if(timeDiff>=0){
+ return timeDiff;
+ }else{
+ return period-((timeDiff*-1)%period);
+ }
+ }
+ return 0;
+ }
+
+ private long getConfigStartTime(String startTime,Properties properties) {
+ if(startTime!=null){
+ long timeDiff=(getTimeInMs(startTime))-(getTimeInMs((new SimpleDateFormat("HH:mm:ss")).format(new Date())));
+ long period=getConfigPeriod(properties);
+ if(timeDiff>=0){
+ return timeDiff%period;
+ }else{
+ return period-((timeDiff*-1)%period);
+ }
+ }
+ return 0;
+ }
+ @Override
+ public void onMetricChange(Metric metric) throws APPCException {
+ //TODO
+ }
+
+ @Override
+ public Metric[] metrics() {
+ return metrics;
+ }
+
+ @Override
+ public void init() {
+ Properties properties=configuration.getProperties();
+ boolean isMetricEnabled=false;
+ if(properties!=null){
+ String metricProperty=properties.getProperty("metric.enabled");
+ if(metricProperty!=null){
+ isMetricEnabled=Boolean.valueOf(metricProperty);
+ }
+ }
+ if(isMetricEnabled){
+ logger.info("Metric Service is enabled, hence policies getting scheduled");
+ for(final Publisher publisher:this.getPublishers()){
+ scheduleExecutor.scheduleWithFixedDelay(new Runnable()
+ {
+ public void run() {
+ try {
+ publisher.publish(metricRegistry, metrics);
+ reset();
+ } catch (RuntimeException ex) {
+ logger.error("RuntimeException thrown from {}#report. Exception was suppressed.", publisher.getClass().getSimpleName(), ex);
+ }
+ }
+ }
+ , startTime, period, TimeUnit.MILLISECONDS);
+ }
+ }else{
+ logger.info("Metric Service is not enabled, hence policies not getting scheduled");
+
+ }
+ }
+
+ @Override
+ public long getStartTime() {
+ return this.startTime;
+ }
+
+ @Override
+ public long getPeriod() {
+ return this.period;
+ }
+
+ @Override
+ public Publisher[] getPublishers() {
+ return this.publishers;
+ }
+
+ @Override
+ public void reset() {
+ for(Metric metric:this.metrics){
+ metric.reset();}
+ }
+
+
+ private ThreadFactory getThreadFactory(final boolean isDaemon){
+ return new ThreadFactory() {
+ public Thread newThread(Runnable r) {
+ Thread t = Executors.defaultThreadFactory().newThread(r);
+ t.setDaemon(isDaemon);
+ return t;
+ }
+ };
+ }
+
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/publisher/LogPublisher.java b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/publisher/LogPublisher.java
new file mode 100644
index 000000000..24241abf1
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/openecomp/appc/metricservice/publisher/LogPublisher.java
@@ -0,0 +1,49 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice.publisher;
+
+import org.openecomp.appc.metricservice.MetricRegistry;
+import org.openecomp.appc.metricservice.Publisher;
+import org.openecomp.appc.metricservice.metric.Metric;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+
+public class LogPublisher implements Publisher {
+ private static final EELFLogger logger = EELFManager.getInstance().getLogger(LogPublisher.class);
+ private MetricRegistry metricRegistry;
+ private Metric[] metrics;
+
+ public LogPublisher(MetricRegistry metricRegistry, Metric[] metrics) {
+ this.metricRegistry = metricRegistry;
+ this.metrics = metrics;
+ }
+
+ @Override
+ public void publish(MetricRegistry metricRegistry, Metric[] metrics) {
+ for(Metric metric:metrics){
+ logger.debug("LOG PUBLISHER:"+metric.name()+":"+metric.toString());
+ }
+ }
+
+
+}
diff --git a/appc-metric/appc-metric-bundle/src/main/resources/org/openecomp/appc/default.properties b/appc-metric/appc-metric-bundle/src/main/resources/org/openecomp/appc/default.properties
new file mode 100644
index 000000000..944d19010
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/main/resources/org/openecomp/appc/default.properties
@@ -0,0 +1,28 @@
+###
+# ============LICENSE_START=======================================================
+# openECOMP : APP-C
+# ================================================================================
+# Copyright (C) 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=========================================================
+###
+
+# Define the name and path of any user-provided configuration (bootstrap) file that can be loaded
+# to supply configuration options
+org.openecomp.appc.bootstrap.file=appc.properties
+org.openecomp.appc.bootstrap.path=/opt/openecomp/appc/data/properties,${user.home},.
+
+
+
diff --git a/appc-metric/appc-metric-bundle/src/test/java/org/openecomp/appc/metricservice/TestMetricServiceImpl.java b/appc-metric/appc-metric-bundle/src/test/java/org/openecomp/appc/metricservice/TestMetricServiceImpl.java
new file mode 100644
index 000000000..76c871703
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/test/java/org/openecomp/appc/metricservice/TestMetricServiceImpl.java
@@ -0,0 +1,40 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 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.appc.metricservice;
+import org.junit.Assert;
+import org.junit.Test;
+import org.openecomp.appc.metricservice.MetricRegistry;
+import org.openecomp.appc.metricservice.impl.MetricServiceImpl;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+
+public class TestMetricServiceImpl {
+ @Test
+ public void createRegistryTest() {
+ MetricServiceImpl metricServiceImpl = new MetricServiceImpl();
+ metricServiceImpl.createRegistry("anyName");
+ MetricRegistry metricRegistry = metricServiceImpl.registry("anyName");
+ Assert.assertNotNull(metricRegistry);
+ }
+}
diff --git a/appc-metric/appc-metric-bundle/src/test/resources/org/openecomp/appc/default.properties b/appc-metric/appc-metric-bundle/src/test/resources/org/openecomp/appc/default.properties
new file mode 100644
index 000000000..017291e51
--- /dev/null
+++ b/appc-metric/appc-metric-bundle/src/test/resources/org/openecomp/appc/default.properties
@@ -0,0 +1,26 @@
+###
+# ============LICENSE_START=======================================================
+# openECOMP : APP-C
+# ================================================================================
+# Copyright (C) 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=========================================================
+###
+
+# Define the name and path of any user-provided configuration (bootstrap) file that can be loaded to supply configuration options
+#org.openecomp.appc.bootstrap.file=executor-test.properties
+org.openecomp.appc.bootstrap.file=appc.properties
+org.openecomp.appc.bootstrap.path=/opt/openecomp/appc/data/properties,${user.home},.
+
diff --git a/appc-metric/appc-metric-features/.gitignore b/appc-metric/appc-metric-features/.gitignore
new file mode 100644
index 000000000..b83d22266
--- /dev/null
+++ b/appc-metric/appc-metric-features/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/appc-metric/appc-metric-features/pom.xml b/appc-metric/appc-metric-features/pom.xml
new file mode 100644
index 000000000..31c58e1c4
--- /dev/null
+++ b/appc-metric/appc-metric-features/pom.xml
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>
+ <artifactId>appc-metric</artifactId>
+ <groupId>org.openecomp.appc</groupId>
+ <version>1.0.0</version>
+ </parent>
+ <name>appc-metric-features</name>
+ <artifactId>appc-metric-features</artifactId>
+
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.openecomp.appc</groupId>
+ <artifactId>appc-metric-bundle</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <!-- <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>features-mdsal</artifactId>
+ <classifier>features</classifier>
+ <type>xml</type>
+
+ <scope>runtime</scope>
+ </dependency>-->
+
+
+
+ <!-- dependency for opendaylight-karaf-empty for use by testing -->
+<!-- <dependency> -->
+<!-- <groupId>org.opendaylight.controller</groupId> -->
+<!-- <artifactId>opendaylight-karaf-empty</artifactId> -->
+<!-- <type>zip</type> -->
+<!-- </dependency> -->
+
+
+
+
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>features-yangtools</artifactId>
+ <classifier>features</classifier>
+ <type>xml</type>
+ <scope>runtime</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <resources>
+ <resource>
+ <filtering>true</filtering>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>filter</id>
+ <goals>
+ <goal>resources</goal>
+ </goals>
+ <phase>generate-resources</phase>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <!-- launches the feature test, which validates that your karaf feature
+ can be installed inside of a karaf container. It doesn't validate that your
+ functionality works correctly, just that you have all of the dependent bundles
+ defined correctly. -->
+ <!-- Skipping ODL feature test -->
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.16</version>
+ <configuration>
+ <systemPropertyVariables>
+ <karaf.distro.groupId>org.opendaylight.controller</karaf.distro.groupId>
+ <karaf.distro.artifactId>opendaylight-karaf-empty</karaf.distro.artifactId>
+ <karaf.distro.version>${odl.karaf.empty.distro.version}</karaf.distro.version>
+ </systemPropertyVariables>
+ <dependenciesToScan>
+ <dependency>org.opendaylight.yangtools:features-test</dependency>
+ </dependenciesToScan>
+ <classpathDependencyExcludes>
+ <!-- The dependencies which bring in AbstractDataBrokerTest class
+ brings in a second PaxExam container which results in the feature tests failing
+ with a message similar to: "ERROR o.ops4j.pax.exam.spi.PaxExamRuntime - Ambiguous
+ TestContainer ..." This excludes the container we don't want to use. -->
+ <classpathDependencyExcludes>org.ops4j.pax.exam:pax-exam-container-native</classpathDependencyExcludes>
+ </classpathDependencyExcludes>
+ <skipTests>true</skipTests>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>attach-artifacts</id>
+ <goals>
+ <goal>attach-artifact</goal>
+ </goals>
+ <phase>package</phase>
+ <configuration>
+ <artifacts>
+ <artifact>
+ <file>${project.build.directory}/classes/${features.file}</file>
+ <type>xml</type>
+ <classifier>features</classifier>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+
+ </plugins>
+ </build>
+</project>
diff --git a/appc-metric/appc-metric-features/src/main/resources/features.xml b/appc-metric/appc-metric-features/src/main/resources/features.xml
new file mode 100644
index 000000000..c7747dea0
--- /dev/null
+++ b/appc-metric/appc-metric-features/src/main/resources/features.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ============LICENSE_START=======================================================
+ openECOMP : APP-C
+ ================================================================================
+ Copyright (C) 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=========================================================
+ -->
+
+
+<features name="appc-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
+
+<!--
+ <repository>mvn:org.opendaylight.mdsal/features-mdsal/${features-mdsal.version}/xml/features</repository>
+-->
+
+ <feature name='appc-metric' description="application executor" version='${project.version}'>
+ <!--<feature version="${project.version}">appc-aai-adapter</feature>-->
+ <!-- Most applications will have a dependency on the ODL MD-SAL Broker -->
+ <bundle>mvn:org.openecomp.appc/appc-metric-bundle/${project.version}</bundle>
+ </feature>
+
+</features>
diff --git a/appc-metric/appc-metric-installer/.gitignore b/appc-metric/appc-metric-installer/.gitignore
new file mode 100644
index 000000000..b83d22266
--- /dev/null
+++ b/appc-metric/appc-metric-installer/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/appc-metric/appc-metric-installer/pom.xml b/appc-metric/appc-metric-installer/pom.xml
new file mode 100644
index 000000000..c9ae60664
--- /dev/null
+++ b/appc-metric/appc-metric-installer/pom.xml
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>
+ <artifactId>appc-metric</artifactId>
+ <groupId>org.openecomp.appc</groupId>
+ <version>1.0.0</version>
+ </parent>
+ <artifactId>appc-metric-installer</artifactId>
+ <name>APPC Metric - Karaf Installer</name>
+ <packaging>pom</packaging>
+
+ <properties>
+ <application.name>appc-metric</application.name>
+ <features.boot>appc-metric</features.boot>
+ <features.repositories>mvn:org.openecomp.appc/appc-metric-features/${project.version}/xml/features</features.repositories>
+ <include.transitive.dependencies>false</include.transitive.dependencies>
+ </properties>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.openecomp.appc</groupId>
+ <artifactId>appc-metric-features</artifactId>
+ <version>${project.version}</version>
+ <classifier>features</classifier>
+ <type>xml</type>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.openecomp.appc</groupId>
+ <artifactId>appc-metric-bundle</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>maven-repo-zip</id>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <phase>package</phase>
+ <configuration>
+ <appendAssemblyId>false</appendAssemblyId>
+ <attach>false</attach>
+ <finalName>stage/${application.name}-${project.version}</finalName>
+ <descriptors>
+ <descriptor>src/assembly/assemble_mvnrepo_zip.xml</descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ <execution>
+ <id>installer-zip</id>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <phase>package</phase>
+ <configuration>
+ <appendAssemblyId>false</appendAssemblyId>
+ <attach>true</attach>
+ <finalName>${application.name}-${project.version}</finalName>
+ <descriptors>
+ <descriptor>src/assembly/assemble_installer_zip.xml</descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>copy-dependencies</id>
+ <goals>
+ <goal>copy-dependencies</goal>
+ </goals>
+ <phase>prepare-package</phase>
+ <configuration>
+ <transitive>false</transitive>
+ <outputDirectory>${project.build.directory}/assembly/system</outputDirectory>
+ <overWriteReleases>false</overWriteReleases>
+ <overWriteSnapshots>true</overWriteSnapshots>
+ <overWriteIfNewer>true</overWriteIfNewer>
+ <useRepositoryLayout>true</useRepositoryLayout>
+ <addParentPoms>false</addParentPoms>
+ <copyPom>false</copyPom>
+ <excludeGroupIds>org.opendaylight</excludeGroupIds>
+ <scope>provided</scope>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>copy-version</id>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <!-- here the phase you need -->
+ <phase>validate</phase>
+ <configuration>
+ <outputDirectory>${basedir}/target/stage</outputDirectory>
+ <resources>
+ <resource>
+ <directory>src/main/resources/scripts</directory>
+ <includes>
+ <include>install-feature.sh</include>
+ </includes>
+ <filtering>true</filtering>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/appc-metric/appc-metric-installer/src/assembly/assemble_installer_zip.xml b/appc-metric/appc-metric-installer/src/assembly/assemble_installer_zip.xml
new file mode 100644
index 000000000..8948a3302
--- /dev/null
+++ b/appc-metric/appc-metric-installer/src/assembly/assemble_installer_zip.xml
@@ -0,0 +1,59 @@
+<!--
+ ============LICENSE_START=======================================================
+ openECOMP : APP-C
+ ================================================================================
+ Copyright (C) 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=========================================================
+ -->
+
+<!-- Defines how we build the .zip file which is our distribution. -->
+
+<assembly
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+ <id>controller</id>
+ <formats>
+ <format>zip</format>
+ </formats>
+
+ <!-- we want "system" and related files right at the root level
+ as this file is suppose to be unzip on top of a karaf
+ distro. -->
+ <includeBaseDirectory>false</includeBaseDirectory>
+
+ <fileSets>
+ <fileSet>
+ <directory>target/stage/</directory>
+ <outputDirectory>${application.name}</outputDirectory>
+ <fileMode>755</fileMode>
+ <includes>
+ <include>*.sh</include>
+ </includes>
+ </fileSet>
+ <fileSet>
+ <directory>target/stage/</directory>
+ <outputDirectory>${application.name}</outputDirectory>
+ <fileMode>644</fileMode>
+ <excludes>
+ <exclude>*.sh</exclude>
+ </excludes>
+ </fileSet>
+ </fileSets>
+
+
+
+</assembly>
diff --git a/appc-metric/appc-metric-installer/src/assembly/assemble_mvnrepo_zip.xml b/appc-metric/appc-metric-installer/src/assembly/assemble_mvnrepo_zip.xml
new file mode 100644
index 000000000..a18efd00b
--- /dev/null
+++ b/appc-metric/appc-metric-installer/src/assembly/assemble_mvnrepo_zip.xml
@@ -0,0 +1,47 @@
+<!--
+ ============LICENSE_START=======================================================
+ openECOMP : APP-C
+ ================================================================================
+ Copyright (C) 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=========================================================
+ -->
+
+<!-- Defines how we build the .zip file which is our distribution. -->
+
+<assembly
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+ <id>controller</id>
+ <formats>
+ <format>zip</format>
+ </formats>
+
+ <!-- we want "system" and related files right at the root level
+ as this file is suppose to be unzip on top of a karaf
+ distro. -->
+ <includeBaseDirectory>false</includeBaseDirectory>
+
+ <fileSets>
+ <fileSet>
+ <directory>target/assembly/</directory>
+ <outputDirectory>.</outputDirectory>
+ <excludes>
+ </excludes>
+ </fileSet>
+ </fileSets>
+
+</assembly>
diff --git a/appc-metric/appc-metric-installer/src/main/resources/scripts/install-feature.sh b/appc-metric/appc-metric-installer/src/main/resources/scripts/install-feature.sh
new file mode 100644
index 000000000..1d769fada
--- /dev/null
+++ b/appc-metric/appc-metric-installer/src/main/resources/scripts/install-feature.sh
@@ -0,0 +1,40 @@
+###
+# ============LICENSE_START=======================================================
+# openECOMP : APP-C
+# ================================================================================
+# Copyright (C) 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=========================================================
+###
+
+#!/bin/bash
+
+ODL_HOME=${ODL_HOME:-/opt/opendaylight/current}
+ODL_KARAF_CLIENT=${ODL_KARAF_CLIENT:-${ODL_HOME}/bin/client}
+ODL_KARAF_CLIENT_OPTS=${ODL_KARAF_CLIENT_OPTS:-"-u karaf"}
+INSTALLERDIR=$(dirname $0)
+
+REPOZIP=${INSTALLERDIR}/${features.boot}-${project.version}.zip
+
+if [ -f ${REPOZIP} ]
+then
+ unzip -n -d ${ODL_HOME} ${REPOZIP}
+else
+ echo "ERROR : repo zip ($REPOZIP) not found"
+ exit 1
+fi
+
+${ODL_KARAF_CLIENT} ${ODL_KARAF_CLIENT_OPTS} feature:repo-add ${features.repositories}
+${ODL_KARAF_CLIENT} ${ODL_KARAF_CLIENT_OPTS} feature:install ${features.boot}
diff --git a/appc-metric/pom.xml b/appc-metric/pom.xml
new file mode 100644
index 000000000..22bf92a46
--- /dev/null
+++ b/appc-metric/pom.xml
@@ -0,0 +1,23 @@
+<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.appc</groupId>
+ <artifactId>appc</artifactId>
+ <version>1.0.0</version>
+ </parent>
+ <artifactId>appc-metric</artifactId>
+ <packaging>pom</packaging>
+ <name>APPC Metric</name>
+ <!--<version>1.1.16-SNAPSHOT</version>-->
+ <description>APPC Metric</description>
+
+ <!-- ================================================================================== -->
+ <!-- The modules we build -->
+ <!-- ================================================================================== -->
+ <modules>
+ <module>appc-metric-bundle</module>
+ <module>appc-metric-features</module>
+ <module>appc-metric-installer</module>
+ </modules>
+
+</project> \ No newline at end of file