All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nstream.adapter.http.HttpPublishingAgent Maven / Gradle / Ivy

The newest version!
// Copyright 2015-2024 Nstream, inc.
//
// Licensed under the Redis Source Available License 2.0 (RSALv2) Agreement;
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://redis.com/legal/rsalv2-agreement/
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package nstream.adapter.http;

import java.io.IOException;
import java.io.InputStream;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import nstream.adapter.common.AdapterSettings;
import nstream.adapter.common.egress.PublisherAgent;
import nstream.adapter.common.schedule.DeferrableException;

public abstract class HttpPublishingAgent
    extends PublisherAgent {

  public HttpPublishingAgent() {
  }

  protected abstract HttpClient httpClient();

  protected boolean responseIsHealthy(HttpResponse response) {
    return response.statusCode() / 100 == 2;
  }

  // FIXME: this one is the only PublisherAgent#publish that is blocking, we
  //   should rethink for consistency
  @Override
  protected void publish(HttpRequest publishable) throws DeferrableException {
    final HttpResponse result;
    try {
      result = httpClient().send(publishable, HttpResponse.BodyHandlers.ofInputStream());
      if (responseIsHealthy(result)) {
        info(nodeUri() + ": successfully published");
      } else {
        throw new DeferrableException(nodeUri() + ": unhealthy response. Headers: " + result.headers());
      }
    } catch (IOException | InterruptedException | RuntimeException e) {
      throw new DeferrableException(nodeUri() + ": publish error", e);
    }
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy