mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-22 21:01:00 +02:00
api and manager for statistic service
Change-Id: If00b8b43a2bd780ae3c05321697896290fb0f415
This commit is contained in:
parent
574afdab6a
commit
a43aa25218
@ -0,0 +1,20 @@
|
|||||||
|
package org.onlab.onos.net.statistic;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple data repository for link load information.
|
||||||
|
*/
|
||||||
|
public interface Load {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain the current observed rate on a link.
|
||||||
|
* @return long value
|
||||||
|
*/
|
||||||
|
long rate();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain the latest counter viewed on that link.
|
||||||
|
* @return long value
|
||||||
|
*/
|
||||||
|
long latest();
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
package org.onlab.onos.net.statistic;
|
||||||
|
|
||||||
|
import org.onlab.onos.net.ConnectPoint;
|
||||||
|
import org.onlab.onos.net.Link;
|
||||||
|
import org.onlab.onos.net.Path;
|
||||||
|
import org.onlab.onos.net.flow.FlowRule;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Service for obtaining statistic information about link in the system.
|
||||||
|
* Statistics are obtained from the FlowRuleService in order to minimize the
|
||||||
|
* amount of hammering occuring at the dataplane.
|
||||||
|
*/
|
||||||
|
public interface StatisticService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain the load for a the ingress to the given link.
|
||||||
|
* @param link the link to query.
|
||||||
|
* @return a {@link org.onlab.onos.net.statistic.Load Load}
|
||||||
|
*/
|
||||||
|
Load load(Link link);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain the load for the given port.
|
||||||
|
* @param connectPoint the port to query
|
||||||
|
* @return a {@link org.onlab.onos.net.statistic.Load}
|
||||||
|
*/
|
||||||
|
Load load(ConnectPoint connectPoint);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the most loaded link along a path.
|
||||||
|
* @param path the path to search in
|
||||||
|
* @return the most loaded {@link org.onlab.onos.net.Link}.
|
||||||
|
*/
|
||||||
|
Link max(Path path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the least loaded link along a path.
|
||||||
|
* @param path the path to search in
|
||||||
|
* @return the least loaded {@link org.onlab.onos.net.Link}.
|
||||||
|
*/
|
||||||
|
Link min(Path path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the highest hitter (a flow rule) of for a given port, ie. the
|
||||||
|
* flow rule which is generating the most load.
|
||||||
|
* @param connectPoint the port
|
||||||
|
* @return the flow rule
|
||||||
|
*/
|
||||||
|
FlowRule highestHitter(ConnectPoint connectPoint);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
package org.onlab.onos.net.statistic;
|
||||||
|
|
||||||
|
import org.onlab.onos.net.ConnectPoint;
|
||||||
|
import org.onlab.onos.net.flow.FlowEntry;
|
||||||
|
import org.onlab.onos.net.flow.FlowRule;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store to house the computed statistics.
|
||||||
|
*/
|
||||||
|
public interface StatisticStore {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lay the foundation for receiving flow stats for this rule.
|
||||||
|
* @param rule a {@link org.onlab.onos.net.flow.FlowRule}
|
||||||
|
*/
|
||||||
|
void prepareForStatistics(FlowRule rule);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove entries associated with this rule.
|
||||||
|
a @param rule {@link org.onlab.onos.net.flow.FlowRule}
|
||||||
|
*/
|
||||||
|
void removeFromStatistics(FlowRule rule);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a stats observation for a flow rule.
|
||||||
|
* @param rule a {@link org.onlab.onos.net.flow.FlowEntry}
|
||||||
|
*/
|
||||||
|
void addOrUpdateStatistic(FlowEntry rule);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetches the current observed stats values.
|
||||||
|
* @param connectPoint the port to fetch information for
|
||||||
|
* @return set of current flow rules
|
||||||
|
*/
|
||||||
|
Set<FlowEntry> getCurrentStatistic(ConnectPoint connectPoint);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetches the current observed stats values.
|
||||||
|
* @param connectPoint the port to fetch information for
|
||||||
|
* @return set of current values
|
||||||
|
*/
|
||||||
|
Set<FlowEntry> getPreviousStatistic(ConnectPoint connectPoint);
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
/**
|
||||||
|
* Service for looking up statistics on links.
|
||||||
|
*/
|
||||||
|
package org.onlab.onos.net.statistic;
|
@ -0,0 +1,89 @@
|
|||||||
|
package org.onlab.onos.net.statistic.impl;
|
||||||
|
|
||||||
|
import org.apache.felix.scr.annotations.Activate;
|
||||||
|
import org.apache.felix.scr.annotations.Component;
|
||||||
|
import org.apache.felix.scr.annotations.Deactivate;
|
||||||
|
import org.apache.felix.scr.annotations.Reference;
|
||||||
|
import org.apache.felix.scr.annotations.ReferenceCardinality;
|
||||||
|
import org.apache.felix.scr.annotations.Service;
|
||||||
|
import org.onlab.onos.net.ConnectPoint;
|
||||||
|
import org.onlab.onos.net.Link;
|
||||||
|
import org.onlab.onos.net.Path;
|
||||||
|
import org.onlab.onos.net.flow.FlowRule;
|
||||||
|
import org.onlab.onos.net.flow.FlowRuleEvent;
|
||||||
|
import org.onlab.onos.net.flow.FlowRuleListener;
|
||||||
|
import org.onlab.onos.net.flow.FlowRuleService;
|
||||||
|
import org.onlab.onos.net.statistic.Load;
|
||||||
|
import org.onlab.onos.net.statistic.StatisticService;
|
||||||
|
import org.onlab.onos.net.statistic.StatisticStore;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
|
import static org.slf4j.LoggerFactory.getLogger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides an implementation of the Statistic Service.
|
||||||
|
*/
|
||||||
|
@Component(immediate = true)
|
||||||
|
@Service
|
||||||
|
public class StatisticManager implements StatisticService {
|
||||||
|
|
||||||
|
private final Logger log = getLogger(getClass());
|
||||||
|
|
||||||
|
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
|
||||||
|
protected FlowRuleService flowRuleService;
|
||||||
|
|
||||||
|
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
|
||||||
|
protected StatisticStore statisticStore;
|
||||||
|
|
||||||
|
private final InternalFlowRuleListener listener = new InternalFlowRuleListener();
|
||||||
|
|
||||||
|
@Activate
|
||||||
|
public void activate() {
|
||||||
|
flowRuleService.addListener(listener);
|
||||||
|
log.info("Started");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deactivate
|
||||||
|
public void deactivate() {
|
||||||
|
flowRuleService.removeListener(listener);
|
||||||
|
log.info("Stopped");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Load load(Link link) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Load load(ConnectPoint connectPoint) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Link max(Path path) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Link min(Path path) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FlowRule highestHitter(ConnectPoint connectPoint) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal flow rule event listener.
|
||||||
|
*/
|
||||||
|
private class InternalFlowRuleListener implements FlowRuleListener {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void event(FlowRuleEvent event) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
/**
|
||||||
|
* Core subsystem for responding to statistical inquiries.
|
||||||
|
*/
|
||||||
|
package org.onlab.onos.net.statistic.impl;
|
Loading…
x
Reference in New Issue
Block a user