package net.floodlightcontroller.perfmon;

import org.restlet.data.Status;
import org.restlet.resource.Get;
import org.restlet.resource.ServerResource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * Return the performance monitoring data for the get rest api call
 * @author subrata
 */
public class PerfMonDataResource extends ServerResource {
    protected final static Logger logger = LoggerFactory.getLogger(PerfMonDataResource.class);  
    
    @Get("json")
    public CumulativeTimeBucket handleApiQuery() {        
        IPktInProcessingTimeService pktinProcTime = 
            (IPktInProcessingTimeService)getContext().getAttributes().
                get(IPktInProcessingTimeService.class.getCanonicalName());
        
        setStatus(Status.SUCCESS_OK, "OK");
        // Allocate output object
        if (pktinProcTime.isEnabled()) {
            CumulativeTimeBucket ctb = pktinProcTime.getCtb();
            ctb.computeAverages();
            return ctb;
        }
        
        return null;
    }
}