diff --git a/apps/cpman/api/src/main/java/org/onosproject/cpman/MetricsDatabase.java b/apps/cpman/api/src/main/java/org/onosproject/cpman/MetricsDatabase.java
new file mode 100644
index 0000000..a0e3679
--- /dev/null
+++ b/apps/cpman/api/src/main/java/org/onosproject/cpman/MetricsDatabase.java
@@ -0,0 +1,146 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.cpman;
+
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Database for storing a metric.
+ */
+public interface MetricsDatabase {
+    /**
+     * Returns the metric name of this database.
+     *
+     * @return metric name
+     */
+    String metricName();
+
+    /**
+     * Update metric value by specifying metric type.
+     *
+     * @param metricType metric type (e.g., load, usage, etc.)
+     * @param value metric value
+     */
+    void updateMetric(String metricType, double value);
+
+    /**
+     * Update metric value by specifying metric type in a certain time.
+     *
+     * @param metricType metric type (e.g., load, usage, etc.)
+     * @param value metric value
+     * @param time update time in seconds
+     */
+    void updateMetric(String metricType, double value, long time);
+
+    /**
+     * Update metric values of a collection of metric types.
+     *
+     * @param metrics a collection of metrics which consists of a pair of
+     *                metric type and metric value
+     * @param time    update time in seconds
+     */
+    void updateMetrics(Map<String, Double> metrics, long time);
+
+    /**
+     * Update metric values of a collection of metric types.
+     *
+     * @param metrics a collection of metrics which consists of a pair of
+     *                metric type and metric value
+     */
+    void updateMetrics(Map<String, Double> metrics);
+
+    /**
+     * Returns most recent metric value of a given metric type.
+     *
+     * @param metricType metric type
+     * @return metric value
+     */
+    double recentMetric(String metricType);
+
+    /**
+     * Return most recent metric values of a given metric type for a given period.
+     *
+     * @param metricType metric type
+     * @param duration duration
+     * @param unit time unit
+     * @return a collection of metric value
+     */
+    double[] recentMetrics(String metricType, int duration, TimeUnit unit);
+
+    /**
+     * Returns minimum metric value of a given metric type.
+     *
+     * @param metricType metric type
+     * @return metric value
+     */
+    double minMetric(String metricType);
+
+    /**
+     * Returns maximum metric value of a given metric type.
+     *
+     * @param metricType metric type
+     * @return metric value
+     */
+    double maxMetric(String metricType);
+
+    /**
+     * Returns a collection of metric values of a given metric type for a day.
+     *
+     * @param metricType metric type
+     * @return a collection of metric value
+     */
+    double[] metrics(String metricType);
+
+    /**
+     * Returns a collection of metric values of a given metric type for
+     * a given period.
+     *
+     * @param metricType metric type
+     * @param startTime start time
+     * @param endTime end time
+     * @return a collection of metric value
+     */
+    double[] metrics(String metricType, long startTime, long endTime);
+
+    /**
+     * A builder of MetricsDatabase.
+     */
+    interface Builder {
+
+        /**
+         * Sets the metric name.
+         *
+         * @param metricName metric name
+         * @return builder object
+         */
+        Builder withMetricName(String metricName);
+
+        /**
+         * Add a new metric to be monitored.
+         *
+         * @param metricType control metric type
+         */
+        Builder addMetricType(String metricType);
+
+        /**
+         * Builds a MetricDatabase instance.
+         *
+         * @return MetricDatabase instance
+         */
+        MetricsDatabase build();
+    }
+}
