package net.floodlightcontroller.core.web;

import net.floodlightcontroller.core.IFloodlightProviderService;

import org.restlet.resource.Get;
import org.restlet.resource.ServerResource;


public class SystemUptimeResource extends ServerResource {

    public class UptimeRest {
        long systemUptimeMsec;

        public long getSystemUptimeMsec() {
            return systemUptimeMsec;
        }
    }

    @Get("json")
    public UptimeRest retrieve() {
        IFloodlightProviderService floodlightProvider =
                (IFloodlightProviderService) getContext().getAttributes().
                        get(IFloodlightProviderService.class.getCanonicalName());

        UptimeRest uptime = new UptimeRest();
        uptime.systemUptimeMsec =
                System.currentTimeMillis() - floodlightProvider.getSystemStartTime();

        return (uptime);
    }
}
