use of com.fasterxml.jackson.core.JsonGenerator in project opentsdb by OpenTSDB.
the class UIDMeta method getStorageJSON.
/**
* Formats the JSON output for writing to storage. It drops objects we don't
* need or want to store (such as the UIDMeta objects or the total dps) to
* save space. It also serializes in order so that we can make a proper CAS
* call. Otherwise the POJO serializer may place the fields in any order
* and CAS calls would fail all the time.
* @return A byte array to write to storage
*/
private byte[] getStorageJSON() {
// 256 bytes is a good starting value, assumes default info
final ByteArrayOutputStream output = new ByteArrayOutputStream(256);
try {
final JsonGenerator json = JSON.getFactory().createGenerator(output);
json.writeStartObject();
json.writeStringField("type", type.toString());
json.writeStringField("displayName", display_name);
json.writeStringField("description", description);
json.writeStringField("notes", notes);
json.writeNumberField("created", created);
if (custom == null) {
json.writeNullField("custom");
} else {
json.writeObjectFieldStart("custom");
for (Map.Entry<String, String> entry : custom.entrySet()) {
json.writeStringField(entry.getKey(), entry.getValue());
}
json.writeEndObject();
}
json.writeEndObject();
json.close();
return output.toByteArray();
} catch (IOException e) {
throw new RuntimeException("Unable to serialize UIDMeta", e);
}
}
use of com.fasterxml.jackson.core.JsonGenerator in project opentsdb by OpenTSDB.
the class QueryExecutor method serialize.
/**
* Writes the results to a ChannelBuffer to return to the caller. This will
* iterate over all of the outputs and drop in meta data where appropriate.
* @throws Exception if something went pear shaped
*/
private Deferred<ChannelBuffer> serialize() throws Exception {
final long start = System.currentTimeMillis();
// buffers and an array list to stored the deferreds
final ChannelBuffer response = ChannelBuffers.dynamicBuffer();
final OutputStream output_stream = new ChannelBufferOutputStream(response);
final JsonGenerator json = JSON.getFactory().createGenerator(output_stream);
json.writeStartObject();
json.writeFieldName("outputs");
json.writeStartArray();
// We want the serializer to execute serially so we need to create a callback
// chain so that when one DPsResolver is finished, it triggers the next to
// start serializing.
final Deferred<Object> cb_chain = new Deferred<Object>();
// default to the expressions if there, or fall back to the metrics
final List<Output> outputs;
if (query.getOutputs() == null || query.getOutputs().isEmpty()) {
if (query.getExpressions() != null && !query.getExpressions().isEmpty()) {
outputs = new ArrayList<Output>(query.getExpressions().size());
for (final Expression exp : query.getExpressions()) {
outputs.add(Output.Builder().setId(exp.getId()).build());
}
} else if (query.getMetrics() != null && !query.getMetrics().isEmpty()) {
outputs = new ArrayList<Output>(query.getMetrics().size());
for (final Metric metric : query.getMetrics()) {
outputs.add(Output.Builder().setId(metric.getId()).build());
}
} else {
throw new IllegalArgumentException("How did we get here?? No metrics or expressions??");
}
} else {
outputs = query.getOutputs();
}
for (final Output output : outputs) {
if (expressions != null) {
final ExpressionIterator it = expressions.get(output.getId());
if (it != null) {
cb_chain.addCallback(new SerializeExpressionIterator(tsdb, json, output, it, ts_query));
continue;
}
}
if (query.getMetrics() != null && !query.getMetrics().isEmpty()) {
final TSSubQuery sub = sub_queries.get(output.getId());
if (sub != null) {
final TimeSyncedIterator it = new TimeSyncedIterator(output.getId(), sub.getFilterTagKs(), sub_query_results.get(output.getId()));
cb_chain.addCallback(new SerializeSubIterator(tsdb, json, output, it));
continue;
}
} else {
LOG.warn("Couldn't find a variable matching: " + output.getId() + " in query " + query);
}
}
/** Final callback to close out the JSON array and return our results */
class FinalCB implements Callback<ChannelBuffer, Object> {
public ChannelBuffer call(final Object obj) throws Exception {
json.writeEndArray();
// ts_query.getQueryStats().setTimeSerialization(
// DateTime.currentTimeMillis() - start);
ts_query.getQueryStats().markSerializationSuccessful();
// dump the original query
if (true) {
json.writeFieldName("query");
json.writeObject(QueryExecutor.this.query);
}
// IMPORTANT Make sure the close the JSON array and the generator
json.writeEndObject();
json.close();
return response;
}
}
// trigger the callback chain here
cb_chain.callback(null);
return cb_chain.addCallback(new FinalCB());
}
use of com.fasterxml.jackson.core.JsonGenerator in project maven-plugins by apache.
the class RestJiraDownloader method doSessionAuth.
private void doSessionAuth(WebClient client) throws IOException, MojoExecutionException, NoRest {
/* if JiraUser is specified instead of WebUser, we need to make a session. */
if (jiraUser != null) {
client.replacePath("/rest/auth/1/session");
client.type(MediaType.APPLICATION_JSON_TYPE);
StringWriter jsWriter = new StringWriter();
JsonGenerator gen = jsonFactory.createGenerator(jsWriter);
gen.writeStartObject();
gen.writeStringField("username", jiraUser);
gen.writeStringField("password", jiraPassword);
gen.writeEndObject();
gen.close();
Response authRes = client.post(jsWriter.toString());
if (authRes.getStatus() != Response.Status.OK.getStatusCode()) {
if (authRes.getStatus() != Response.Status.UNAUTHORIZED.getStatusCode() && authRes.getStatus() != Response.Status.FORBIDDEN.getStatusCode()) {
// if not one of the documented failures, assume that there's no rest in there in the first place.
throw new NoRest();
}
throw new MojoExecutionException(String.format("Authentication failure status %d.", authRes.getStatus()));
}
}
}
use of com.fasterxml.jackson.core.JsonGenerator in project geode by apache.
the class JSONUtils method formulateJsonForListQueriesCall.
public static String formulateJsonForListQueriesCall(Region<String, String> queryRegion) {
HeapDataOutputStream outputStream = new HeapDataOutputStream(org.apache.geode.internal.Version.CURRENT);
try {
JsonGenerator generator = enableDisableJSONGeneratorFeature(getObjectMapper().getFactory().createGenerator((OutputStream) outputStream, JsonEncoding.UTF8));
JsonWriter.writeQueryListAsJson(generator, "queries", queryRegion);
generator.close();
return new String(outputStream.toByteArray());
} catch (IOException e) {
throw new RuntimeException(e.getMessage());
} finally {
outputStream.close();
}
}
use of com.fasterxml.jackson.core.JsonGenerator in project geode by apache.
the class JSONUtils method formulateJsonForListKeys.
public static String formulateJsonForListKeys(Object[] keys, String fieldName) {
HeapDataOutputStream outputStream = new HeapDataOutputStream(org.apache.geode.internal.Version.CURRENT);
try {
JsonGenerator generator = enableDisableJSONGeneratorFeature(getObjectMapper().getFactory().createGenerator((OutputStream) outputStream, JsonEncoding.UTF8));
generator.writeStartObject();
generator.writeFieldName(fieldName);
JsonWriter.writeObjectArrayAsJson(generator, keys, null);
generator.writeEndObject();
generator.close();
return new String(outputStream.toByteArray());
} catch (IOException e) {
throw new RuntimeException(e.getMessage());
} finally {
outputStream.close();
}
}
Aggregations