blob: ccdc6b8951c449513c980c925cfbe6ae3dcdb571 [file] [log] [blame]
/*
* 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();
/**
* Returns the resource name of this database.
*
* @return resource name
*/
String resourceName();
/**
* 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);
/**
* Returns the latest metric update time.
*
* @param metricType metric type
* @return timestamp
*/
long lastUpdate(String metricType);
/**
* A builder of MetricsDatabase.
*/
interface Builder {
/**
* Sets the metric name.
*
* @param metricName metric name
* @return builder object
*/
Builder withMetricName(String metricName);
/**
* Sets the resource name.
*
* @param resourceName resource name
* @return builder object
*/
Builder withResourceName(String resourceName);
/**
* Add a new metric to be monitored.
*
* @param metricType control metric type
* @return builder object
*/
Builder addMetricType(String metricType);
/**
* Builds a metric database instance.
*
* @return metric database instance
*/
MetricsDatabase build();
}
}