package com.mozilla.grouperfish.batch.handlers; import static com.mozilla.grouperfish.batch.scheduling.Helpers.resultsFilename; import java.io.Reader; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.mozilla.grouperfish.base.StreamTool; import com.mozilla.grouperfish.model.Fail; import com.mozilla.grouperfish.model.Task; import com.mozilla.grouperfish.naming.Scope; import com.mozilla.grouperfish.rest.jaxrs.ResultsResource; import com.mozilla.grouperfish.services.api.FileSystem; import com.mozilla.grouperfish.services.api.Grid; /** * Put run results into results storage. */ public class PutHandler implements TaskHandler { private static final Logger log = LoggerFactory.getLogger(PutHandler.class); private final FileSystem fs; private final Grid grid; public PutHandler(final Grid grid, final FileSystem fs) { this.grid = grid; this.fs = fs; } @Override public Task handle(final Task task) throws Fail { if (!task.isOk()) { log.debug("Not putting result for failed task %s", task); } final String key = ResultsResource.key(task.transform().name(), task.query().name()); final Map<String, String> results = new Scope(task.namespace(), grid).results(); try { final Reader reader = fs.reader(resultsFilename(task)); results.put(key, StreamTool.consume(reader)); } catch (final Exception e) { throw Fail.hard(task, "Could not read results from filesystem.", e); } return task; } }