package com.baidubce.services.tsdb;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import com.baidubce.BceClientConfiguration;
import com.baidubce.BceClientException;
import com.baidubce.auth.BceCredentials;
import com.baidubce.auth.BceV1Signer;
import com.baidubce.auth.SignOptions;
import com.baidubce.auth.Signer;
import com.baidubce.http.HttpMethodName;
import com.baidubce.internal.InternalRequest;
import com.baidubce.services.tsdb.model.Datapoint;
import com.baidubce.services.tsdb.model.GetMetricsRequest;
import com.baidubce.services.tsdb.model.GetMetricsResponse;
import com.baidubce.services.tsdb.model.GetTagsRequest;
import com.baidubce.services.tsdb.model.GetTagsResponse;
import com.baidubce.services.tsdb.model.Query;
import com.baidubce.services.tsdb.model.QueryDatapointsRequest;
import com.baidubce.services.tsdb.model.QueryDatapointsResponse;
import com.baidubce.services.tsdb.model.WriteDatapointsRequest;
import com.baidubce.services.tsdb.model.WriteDatapointsResponse;
import com.baidubce.util.JsonUtils;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* Provides the client for accessing the Tsdb(Time series database).
*/
public class TsdbClient extends AbstractTsdbBceClient {
private static final String DATAPOINT = "datapoint";
private static final String METRIC = "metric";
private static final String TAG = "tag";
private static final String QUERY = "query";
public TsdbClient(BceClientConfiguration config) {
super(config, TSDB_HANDLERS);
}
public WriteDatapointsResponse writeDatapoints(List<Datapoint> datapoints) {
return writeDatapoints(new WriteDatapointsRequest().withDatapoints(datapoints));
}
public WriteDatapointsResponse writeDatapoints(WriteDatapointsRequest writeDatapointsRequest) {
checkNotNull(writeDatapointsRequest, "request should not be null.");
return writeDatapoints(writeDatapointsRequest, true);
}
public WriteDatapointsResponse writeDatapoints(WriteDatapointsRequest writeDatapointsRequest, boolean isGzip) {
checkNotNull(writeDatapointsRequest, "request should not be null.");
InternalRequest internalRequest = createRequest(writeDatapointsRequest, HttpMethodName.POST, DATAPOINT);
if (isGzip) {
byte[] bytes = toGzipBytes(writeDatapointsRequest);
fillInHeadAndBodyForGzip(internalRequest, bytes);
WriteDatapointsResponse response = null;
try {
response = this.invokeHttpClient(internalRequest, WriteDatapointsResponse.class);
} finally {
try {
internalRequest.getContent().close();
} catch (IOException e) {
throw new BceClientException("Close content stream failed.", e);
}
}
return response;
} else {
fillInHeadAndBody(writeDatapointsRequest, internalRequest);
return this.invokeHttpClient(internalRequest, WriteDatapointsResponse.class);
}
}
public GetMetricsResponse getMetrics() {
return getMetrics(new GetMetricsRequest());
}
public GetMetricsResponse getMetrics(GetMetricsRequest getMetricsRequest) {
checkNotNull(getMetricsRequest, "request should not be null.");
InternalRequest internalRequest = createRequest(getMetricsRequest, HttpMethodName.GET, METRIC);
return this.invokeHttpClient(internalRequest, GetMetricsResponse.class);
}
public GetTagsResponse getTags(String metric) {
return getTags(new GetTagsRequest().withMetric(metric));
}
public GetTagsResponse getTags(GetTagsRequest getTagsRequest) {
checkNotNull(getTagsRequest, "request should not be null.");
InternalRequest internalRequest =
createRequest(getTagsRequest, HttpMethodName.GET, METRIC, getTagsRequest.getMetric(), TAG);
return this.invokeHttpClient(internalRequest, GetTagsResponse.class);
}
public QueryDatapointsResponse queryDatapoints(List<Query> queries) {
return queryDatapoints(new QueryDatapointsRequest().withQueries(queries));
}
public QueryDatapointsResponse queryDatapoints(QueryDatapointsRequest queryDatapointsRequest) {
checkNotNull(queryDatapointsRequest, "request should not be null.");
InternalRequest internalRequest =
createRequest(queryDatapointsRequest, HttpMethodName.PUT, DATAPOINT);
internalRequest.addParameter(QUERY, null);
fillInHeadAndBody(queryDatapointsRequest, internalRequest);
return this.invokeHttpClient(internalRequest, QueryDatapointsResponse.class);
}
public URL generatePresignedUrlForQueryDatapoints(QueryDatapointsRequest queryDatapointsRequest) {
return generatePresignedUrlForQueryDatapoints(queryDatapointsRequest,
SignOptions.DEFAULT_EXPIRATION_IN_SECONDS);
}
public URL generatePresignedUrlForQueryDatapoints(List<Query> queries) {
return generatePresignedUrlForQueryDatapoints(queries, SignOptions.DEFAULT_EXPIRATION_IN_SECONDS);
}
public URL generatePresignedUrlForQueryDatapoints(List<Query> queries, int expirationInSeconds) {
return generatePresignedUrlForQueryDatapoints(new QueryDatapointsRequest().withQueries(queries),
expirationInSeconds);
}
public URL generatePresignedUrlForQueryDatapoints(QueryDatapointsRequest queryDatapointsRequest,
int expirationInSeconds) {
InternalRequest internalRequest = createRequest(queryDatapointsRequest, HttpMethodName.GET, DATAPOINT);
internalRequest.addParameter(QUERY, JsonUtils.toJsonString(queryDatapointsRequest));
BceCredentials credentials = queryDatapointsRequest.getRequestCredentials();
if (credentials == null) {
credentials = this.config.getCredentials();
}
SignOptions signOptions = new SignOptions();
signOptions.setExpirationInSeconds(expirationInSeconds);
Signer signer = new BceV1Signer();
signer.sign(internalRequest, credentials, signOptions);
return convertRequestToUrl(internalRequest);
}
}