Package io.fathom.cloud.storage.api.os.resources

Source Code of io.fathom.cloud.storage.api.os.resources.WatchResource

package io.fathom.cloud.storage.api.os.resources;

import io.fathom.cloud.CloudException;
import io.fathom.cloud.server.model.Project;
import io.fathom.cloud.server.model.User;
import io.fathom.cloud.storage.FileServiceInternal;
import io.fathom.cloud.storage.FsBucket;
import io.fathom.cloud.tasks.TaskScheduler;

import java.util.concurrent.TimeUnit;

import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.container.AsyncResponse;
import javax.ws.rs.container.Suspended;
import javax.ws.rs.container.TimeoutHandler;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.util.concurrent.ListenableFuture;

@Path("/openstack/storage/watch/{project}")
public class WatchResource extends ObjectstoreResourceBase {
    private static final Logger log = LoggerFactory.getLogger(WatchResource.class);

    @Inject
    FileServiceInternal fs;

    @PathParam("project")
    String projectName;

    @PathParam("bucket")
    String bucketName;

    @Inject
    TaskScheduler schedulerService;

    @GET
    @Path("{bucket}")
    public void watchBucket(@Suspended final AsyncResponse response, @QueryParam("since") String since)
            throws CloudException {
        User user = getAuth().getUser();

        Project project = findProject(projectName);
        if (project == null) {
            throw new WebApplicationException(Status.NOT_FOUND);
        }

        FsBucket bucket = fs.findBucket(user, project, bucketName);
        if (bucket == null) {
            throw new WebApplicationException(Status.NOT_FOUND);
        }

        ListenableFuture<?> future = fs.watchBucket(bucket, since);
        future.addListener(new Runnable() {
            @Override
            public void run() {
                response.resume(Response.ok().build());
            }
        }, schedulerService.getExecutor());

        response.setTimeoutHandler(new TimeoutHandler() {
            @Override
            public void handleTimeout(AsyncResponse ar) {
                response.resume(Response.status(Status.SERVICE_UNAVAILABLE)
                        .entity("Operation timed out -- please try again").build());
                response.resume(new WebApplicationException(503));
            }
        });
        response.setTimeout(5, TimeUnit.SECONDS);
    }

    // @GET
    // @Path("hello")
    // public void test(@Suspended final AsyncResponse response) throws
    // CloudException {
    // schedulerService.schedule(new Runnable() {
    //
    // @Override
    // public void run() {
    // response.resume(Response.ok().entity("Hello world @" +
    // System.currentTimeMillis()).build());
    // }
    //
    // }, TimeSpan.TEN_SECONDS);
    //
    // log.info("Suspending");
    // }
}
TOP

Related Classes of io.fathom.cloud.storage.api.os.resources.WatchResource

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.