aboutsummaryrefslogtreecommitdiffstats
path: root/vespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandlerBase.java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
commit72231250ed81e10d66bfe70701e64fa5fe50f712 (patch)
tree2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /vespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandlerBase.java
Publish
Diffstat (limited to 'vespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandlerBase.java')
-rwxr-xr-xvespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandlerBase.java93
1 files changed, 93 insertions, 0 deletions
diff --git a/vespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandlerBase.java b/vespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandlerBase.java
new file mode 100755
index 00000000000..fa1e6854593
--- /dev/null
+++ b/vespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandlerBase.java
@@ -0,0 +1,93 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.feedhandler;
+
+import com.google.inject.Inject;
+import com.yahoo.clientmetrics.ClientMetrics;
+import com.yahoo.component.provider.ComponentRegistry;
+import com.yahoo.container.jdisc.HttpRequest;
+import com.yahoo.container.jdisc.ThreadedHttpRequestHandler;
+import com.yahoo.docproc.DocprocService;
+import com.yahoo.document.DocumentTypeManager;
+import com.yahoo.feedapi.FeedContext;
+import com.yahoo.feedapi.MessagePropertyProcessor;
+import com.yahoo.feedapi.SharedSender;
+import com.yahoo.jdisc.Metric;
+import com.yahoo.search.query.ParameterParser;
+import com.yahoo.vespa.config.content.LoadTypeConfig;
+import com.yahoo.vespaclient.config.FeederConfig;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.concurrent.Executor;
+import java.util.zip.GZIPInputStream;
+
+public abstract class VespaFeedHandlerBase extends ThreadedHttpRequestHandler {
+
+ protected FeedContext context;
+ private final long defaultTimeoutMillis;
+
+ @Inject
+ public VespaFeedHandlerBase(FeederConfig feederConfig,
+ LoadTypeConfig loadTypeConfig,
+ Executor executor,
+ Metric metric) throws Exception {
+ this(FeedContext.getInstance(feederConfig, loadTypeConfig, metric), executor, (long)feederConfig.timeout() * 1000);
+ }
+
+ public VespaFeedHandlerBase(FeedContext context, Executor executor) throws Exception {
+ this(context, executor, context.getPropertyProcessor().getDefaultTimeoutMillis());
+ }
+
+ public VespaFeedHandlerBase(FeedContext context, Executor executor, long defaultTimeoutMillis) throws Exception {
+ super(executor);
+ this.context = context;
+ this.defaultTimeoutMillis = defaultTimeoutMillis;
+ }
+
+ public SharedSender getSharedSender(String route) {
+ return context.getSharedSender(route);
+ }
+
+ public DocprocService getDocprocChain(HttpRequest request) {
+ return context.getPropertyProcessor().getDocprocChain(request);
+ }
+
+ public ComponentRegistry<DocprocService> getDocprocServiceRegistry(HttpRequest request) {
+ return context.getPropertyProcessor().getDocprocServiceRegistry(request);
+ }
+
+ public MessagePropertyProcessor getPropertyProcessor() {
+ return context.getPropertyProcessor();
+ }
+
+ /**
+ * @param request Request object to get the POST data stream from
+ * @return An InputStream that either is a GZIP wrapper or simply the
+ * original data stream.
+ * @throws IllegalArgumentException if GZIP stream creation failed
+ */
+ public InputStream getRequestInputStream(HttpRequest request) {
+ if ("gzip".equals(request.getHeader("Content-Encoding"))) {
+ try {
+ return new GZIPInputStream(request.getData());
+ } catch (IOException e) {
+ throw new IllegalArgumentException("Failed to create GZIP input stream from content", e);
+ }
+ } else {
+ return request.getData();
+ }
+ }
+
+ protected DocumentTypeManager getDocumentTypeManager() {
+ return context.getDocumentTypeManager();
+ }
+
+ public ClientMetrics getMetrics() {
+ return context.getMetrics();
+ }
+
+ protected long getTimeoutMillis(HttpRequest request) {
+ return ParameterParser.asMilliSeconds(request.getProperty("timeout"), defaultTimeoutMillis);
+ }
+
+}