alshabib

api and manager for statistic service

Change-Id: If00b8b43a2bd780ae3c05321697896290fb0f415
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();
}
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);
}
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);
}
/**
* Service for looking up statistics on links.
*/
package org.onlab.onos.net.statistic;
\ No newline at end of file
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) {
}
}
}
/**
* Core subsystem for responding to statistical inquiries.
*/
package org.onlab.onos.net.statistic.impl;
\ No newline at end of file