mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-22 12:51:09 +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