com.purbon.kafka.topology.backend.GCPBackend Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of julie-ops Show documentation
Show all versions of julie-ops Show documentation
A helper project for Kafka Platform teams to build an automated Topic, Configuration, Schemas, and more,
Management solution.
The newest version!
package com.purbon.kafka.topology.backend;
import static com.purbon.kafka.topology.BackendController.STATE_FILE_NAME;
import com.google.cloud.storage.*;
import com.purbon.kafka.topology.Configuration;
import com.purbon.kafka.topology.utils.JSON;
import java.io.IOException;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class GCPBackend implements Backend {
private static final Logger LOGGER = LogManager.getLogger(GCPBackend.class);
private Storage storage;
private Configuration config;
@Override
public void configure(Configuration config) {
configure(config, null);
}
public void configure(Configuration config, URI endpoint) {
this.config = config;
this.storage =
StorageOptions.newBuilder().setProjectId(config.getGCPProjectId()).build().getService();
}
@Override
public void save(BackendState state) throws IOException {
BlobId blobId = BlobId.of(config.getGCPBucket(), STATE_FILE_NAME);
BlobInfo blobInfo = BlobInfo.newBuilder(blobId).build();
try {
storage.create(
blobInfo,
state.asJson().getBytes(StandardCharsets.UTF_8),
Storage.BlobTargetOption.detectContentType());
} catch (Exception ex) {
LOGGER.error(ex);
throw new IOException(ex);
}
}
@Override
public BackendState load() throws IOException {
try {
Blob blob = storage.get(BlobId.of(config.getGCPBucket(), STATE_FILE_NAME));
String contentJson = new String(blob.getContent(), StandardCharsets.UTF_8);
return (BackendState) JSON.toObject(contentJson, BackendState.class);
} catch (Exception ex) {
LOGGER.error(ex);
throw new IOException(ex);
}
}
@Override
public void close() {
// empty
}
}