コード例 #1
0
 private static FullHttpResponse newHttpResponseWithStackTrace(
     Exception e, HttpResponseStatus status, @Nullable String simplifiedMessage) {
   StringWriter sw = new StringWriter();
   e.printStackTrace(new PrintWriter(sw));
   StringBuilder sb = new StringBuilder();
   try {
     JsonGenerator jg = jsonFactory.createGenerator(CharStreams.asWriter(sb));
     jg.writeStartObject();
     String message;
     if (simplifiedMessage == null) {
       Throwable cause = e;
       Throwable childCause = cause.getCause();
       while (childCause != null) {
         cause = childCause;
         childCause = cause.getCause();
       }
       message = cause.getMessage();
     } else {
       message = simplifiedMessage;
     }
     jg.writeStringField("message", message);
     jg.writeStringField("stackTrace", sw.toString());
     jg.writeEndObject();
     jg.close();
     return HttpServices.createJsonResponse(sb.toString(), status);
   } catch (IOException f) {
     logger.error(f.getMessage(), f);
     return new DefaultFullHttpResponse(HTTP_1_1, INTERNAL_SERVER_ERROR);
   }
 }
コード例 #2
0
ファイル: TestBase.java プロジェクト: valery1707/jackson-jr
 protected String writeTree(TreeCodec treeCodec, TreeNode treeNode) throws IOException {
   StringWriter writer = new StringWriter();
   JsonGenerator g = _factory.createGenerator(writer);
   treeCodec.writeTree(g, treeNode);
   g.close();
   return writer.toString();
 }
コード例 #3
0
  @Test
  public void test1() throws IOException {

    MapData ld0 = new MapData();
    ld0.put("Copyright", "\u00A9 2014, David R. Smith. All Rights Reserved");
    ld0.put("License", "http://www.apache.org/licenses/LICENSE-2.0.txt");

    MapData ld1 = new MapData();
    ld1.put("some key", "some data");
    ld1.put("another key", "more data");
    MapDataFormatter format = new MapDataFormatter();
    format.add(ld0);
    format.add(ld1);

    StringWriter writer = new StringWriter();
    JsonFactory f = new JsonFactory();
    JsonGenerator g = null;
    try {
      g = f.createGenerator(writer);
      g.useDefaultPrettyPrinter();
      g.writeStartObject();
      format.format(g, writer);
      g.writeEndObject();
    } finally {
      g.close();
    }

    System.err.println(writer.toString());

    MapIterator iter3 = new MapDataContentsIterator(ld0);
    while (iter3.hasNext()) {
      String label = iter3.next();
      Assert.assertNotNull(iter3.get(label));
    }
  }
コード例 #4
0
  @Override
  public void run() {
    Request request = null;
    try {
      request = transport.prepare();
      jsonOut = jsonFactory.createGenerator(request.getBodyWriter());
      jsonOut.writeStartObject();
      jsonOut.writeFieldName("series");
      jsonOut.writeStartArray();
    } catch (IOException ioe) {
      LOG.error("Could not prepare request", ioe);
      return;
    }

    final long epoch = clock.time() / 1000;
    if (this.printVmMetrics) {
      pushVmMetrics(epoch);
    }
    pushRegularMetrics(epoch);

    try {
      jsonOut.writeEndArray();
      jsonOut.writeEndObject();
      jsonOut.flush();
      request.send();
    } catch (Exception e) {
      LOG.error("Error sending metrics", e);
    }
  }
コード例 #5
0
ファイル: PojoMapper.java プロジェクト: emroz/SampleAPI
 public static void toJson(Object pojo, FileWriter fw, boolean prettyPrint)
     throws JsonMappingException, JsonGenerationException, IOException {
   JsonGenerator jg = jf.createGenerator(fw);
   if (prettyPrint) {
     jg.useDefaultPrettyPrinter();
   }
   m.writeValue(jg, pojo);
 }
コード例 #6
0
 private static String getModuleDescriptions(JavaScriptModulesConfig jsModulesConfig)
     throws IOException {
   JsonFactory jsonFactory = new JsonFactory();
   StringWriter writer = new StringWriter();
   JsonGenerator jg = jsonFactory.createGenerator(writer);
   jsModulesConfig.writeModuleDescriptions(jg);
   jg.close();
   return writer.getBuffer().toString();
 }
コード例 #7
0
ファイル: PojoMapper.java プロジェクト: emroz/SampleAPI
 public static String toJson(Object pojo, boolean prettyPrint)
     throws JsonMappingException, JsonGenerationException, IOException {
   StringWriter sw = new StringWriter();
   JsonGenerator jg = jf.createGenerator(sw);
   if (prettyPrint) {
     jg.useDefaultPrettyPrinter();
   }
   m.writeValue(jg, pojo);
   return sw.toString();
 }
コード例 #8
0
  public InputStream verifyDatatype2(Profile p, Profile baseP, String id, String type) {
    String result = "";
    // Datatype dt = p.getDatatypeLibrary().findOne(id);

    try {
      // Create temporary file
      File tmpJsonFile = File.createTempFile("resultTmp", ".json");

      // Generate json file
      JsonFactory factory = new JsonFactory();
      JsonGenerator generator = factory.createGenerator(new FileWriter(tmpJsonFile));
      generator.setPrettyPrinter(new DefaultPrettyPrinter());

      generator.writeStartObject();
      generator.writeStringField("id", id);
      generator.writeStringField("type", type);

      generator.writeArrayFieldStart("eltVerification");

      // for (Component c : dt.getComponents()){
      // generator.writeStartObject();
      // generator.writeStringField("eltName", "usage");
      // generator.writeStringField("eltAtt", c.getUsage().value());
      // result = this.validateChangeUsage(p.getMetaData().getHl7Version(),
      // baseP.getDatatypeLibrary().findOneComponent(c.getId()).getUsage(),
      // p.getDatatypeLibrary().findOneComponent(c.getId()).getUsage());
      // generator.writeStringField("result", result);
      // generator.writeEndObject();
      //
      // generator.writeStartObject();
      // generator.writeStringField("eltName", "minLength");
      // generator.writeStringField("eltAtt", String.valueOf(c.getMinLength()));
      // result = this.validateChangeLength(String.valueOf(c.getMinLength()), c.getMaxLength());
      // generator.writeStringField("result", result);
      // generator.writeEndObject();
      //
      // generator.writeStartObject();
      // generator.writeStringField("eltName", "maxLength");
      // generator.writeStringField("eltAtt", String.valueOf(c.getMaxLength()));
      // result = this.validateChangeLength(String.valueOf(c.getMinLength()), c.getMaxLength());
      // generator.writeStringField("result", result);
      // generator.writeEndObject();
      //
      // }

      generator.writeEndArray();
      generator.writeEndObject();

      generator.close();

      return FileUtils.openInputStream(tmpJsonFile);
    } catch (IOException e) {
      return new NullInputStream(1L);
    }
  }
コード例 #9
0
  public void writeToWriter(Writer writer, Object input) {
    final ObjectMapper objectMapper = dataFormat.getObjectMapper();
    final JsonFactory factory = objectMapper.getFactory();

    try {
      JsonGenerator generator = factory.createGenerator(writer);
      objectMapper.writeTree(generator, (JsonNode) input);
    } catch (IOException e) {
      throw LOG.unableToWriteJsonNode(e);
    }
  }
コード例 #10
0
 @Override
 public String toJson(JsonFactory jsonFactory) throws IOException {
   try (StringWriter sw = new StringWriter();
       JsonGenerator jg = jsonFactory.createGenerator(sw)) {
     jg.writeStartArray();
     jg.writeNumber(getTypeId());
     jg.writeString(getTopicURI());
     jg.writeEndArray();
     jg.close();
     return sw.toString();
   }
 }
コード例 #11
0
ファイル: QueueMessage.java プロジェクト: shshen/netty-queue
 public void setSource(TreeNode tree) throws IOException {
   JsonFactory jsonFactory = new JsonFactory();
   if (buffer == null) {
     buffer = Unpooled.buffer();
   } else {
     buffer.clear();
   }
   type = QueueMessageType.JSON;
   try (ByteBufOutputStream outputStream = new ByteBufOutputStream(buffer)) {
     JsonGenerator generator = jsonFactory.createGenerator(outputStream);
     generator.setCodec(new ObjectMapper());
     generator.writeTree(tree);
     generator.close();
   }
 }
コード例 #12
0
 private static FullHttpResponse newHttpResponseWithMessage(
     HttpResponseStatus status, @Nullable String message) {
   // this is an "expected" exception, no need to send back stack trace
   StringBuilder sb = new StringBuilder();
   try {
     JsonGenerator jg = jsonFactory.createGenerator(CharStreams.asWriter(sb));
     jg.writeStartObject();
     jg.writeStringField("message", message);
     jg.writeEndObject();
     jg.close();
     return HttpServices.createJsonResponse(sb.toString(), status);
   } catch (IOException f) {
     logger.error(f.getMessage(), f);
     return new DefaultFullHttpResponse(HTTP_1_1, INTERNAL_SERVER_ERROR);
   }
 }
コード例 #13
0
ファイル: JsonUtil.java プロジェクト: zrbsprite/Stem
 public static String Object2Json(Object o) {
   try {
     ObjectMapper mapper = new ObjectMapper();
     StringWriter writer = new StringWriter();
     JsonFactory factory = mapper.getFactory();
     JsonGenerator gen = factory.createGenerator(writer);
     mapper.writeValue(gen, o);
     gen.close();
     String json = writer.toString();
     writer.close();
     return json;
   } catch (Exception e) {
     e.printStackTrace();
     return null;
   }
 }
コード例 #14
0
 private String buildModulesConfigJSONProperty(
     NativeModuleRegistry nativeModuleRegistry, JavaScriptModulesConfig jsModulesConfig) {
   JsonFactory jsonFactory = new JsonFactory();
   StringWriter writer = new StringWriter();
   try {
     JsonGenerator jg = jsonFactory.createGenerator(writer);
     jg.writeStartObject();
     jg.writeFieldName("remoteModuleConfig");
     nativeModuleRegistry.writeModuleDescriptions(jg);
     jg.writeFieldName("localModulesConfig");
     jsModulesConfig.writeModuleDescriptions(jg);
     jg.writeEndObject();
     jg.close();
   } catch (IOException ioe) {
     throw new RuntimeException("Unable to serialize JavaScript module declaration", ioe);
   }
   return writer.getBuffer().toString();
 }
コード例 #15
0
  public InputStream verifyValueSet2(Profile p, Profile baseP, String id, String type) {
    // Type is ValueSet (or Table)
    String result = "";
    // Table t = p.getTableLibrary().findOneTableById(id);

    try {
      // Create temporary file
      File tmpJsonFile = File.createTempFile("resultTmp", ".json");

      // Generate json file
      JsonFactory factory = new JsonFactory();
      JsonGenerator generator = factory.createGenerator(new FileWriter(tmpJsonFile));
      generator.setPrettyPrinter(new DefaultPrettyPrinter());

      generator.writeStartObject();
      generator.writeStringField("id", id);
      generator.writeStringField("type", type);

      generator.writeArrayFieldStart("eltVerification");

      // for (Code c : t.getCodes()){
      //
      // generator.writeStartObject();
      // generator.writeStringField("eltName", "usage");
      // generator.writeStringField("eltAtt", c.getCodeUsage());
      // result = this.validateChangeUsage(p.getMetaData().getHl7Version(),
      // Usage.fromValue(baseP.getTableLibrary().findOneCodeById(id).getCodeUsage()),
      // Usage.fromValue(p.getTableLibrary().findOneCodeById(id).getCodeUsage()));
      // generator.writeStringField("result", result);
      // generator.writeEndObject();
      //
      // }

      generator.writeEndArray();
      generator.writeEndObject();

      generator.close();

      return FileUtils.openInputStream(tmpJsonFile);
    } catch (IOException e) {
      return new NullInputStream(1L);
    }
  }
コード例 #16
0
ファイル: AbstractResource.java プロジェクト: keiono/cy-rest
  protected final String getNames(final Collection<String> names) throws IOException {
    final JsonFactory factory = new JsonFactory();

    String result = null;
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    JsonGenerator generator = null;
    generator = factory.createGenerator(stream);
    generator.writeStartArray();

    for (final String name : names) {
      generator.writeString(name);
    }

    generator.writeEndArray();
    generator.close();
    result = stream.toString("UTF-8");
    stream.close();
    return result;
  }
コード例 #17
0
ファイル: AbstractResource.java プロジェクト: keiono/cy-rest
  protected final String getNumberObjectString(final String fieldName, final Number value) {
    final JsonFactory factory = new JsonFactory();

    String result = null;
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    JsonGenerator generator = null;
    try {
      generator = factory.createGenerator(stream);
      generator.writeStartObject();
      generator.writeFieldName(fieldName);
      generator.writeNumber(value.longValue());
      generator.writeEndObject();
      generator.close();
      result = stream.toString("UTF-8");
      stream.close();
    } catch (IOException e) {
      throw getError(
          "Could not serialize number: " + value, e, Response.Status.INTERNAL_SERVER_ERROR);
    }

    return result;
  }
コード例 #18
0
  private InputStream generateOneJsonResult(
      String id, String type, String eltName, String eltValue, String result) {

    try {
      // Create temporary file
      // File tmpJsonFile = File.createTempFile("resultTmp", ".json"); FIXME
      File tmpJsonFile =
          new File(
              "/Users/marieros/git/igamt_github4/igamt-lite-service/src/test/java/gov/nist/healthcare/tools/hl7/v2/igamt/lite/service/test/resultTmp.json");

      // Generate json file
      JsonFactory factory = new JsonFactory();
      JsonGenerator generator = factory.createGenerator(new FileWriter(tmpJsonFile));
      generator.setPrettyPrinter(new DefaultPrettyPrinter());
      this.writeOneJsonResult(generator, id, type, eltName, eltValue, result);
      generator.close();

      return FileUtils.openInputStream(tmpJsonFile);
    } catch (IOException e) {
      return new NullInputStream(1L);
    }
  }
コード例 #19
0
ファイル: ContactAgent.java プロジェクト: almende/cape
  public String getGroups(@Name("filter") String filter) {
    StringWriter resultWriter = new StringWriter();
    JsonFactory f = new JsonFactory();
    f.setCodec(om);
    JsonGenerator g;
    try {
      g = f.createGenerator(resultWriter);

      final Node target = DB.getIndex().get("id", "agents").getSingle();
      TraversalDescription td =
          Traversal.description()
              .relationships(RelTypes.SUBGROUP, Direction.OUTGOING)
              .uniqueness(Uniqueness.NODE_PATH);

      Traverser results = td.traverse(target);
      g.writeStartArray();
      Iterator<Path> paths = results.iterator();
      while (paths.hasNext()) {
        Path path = paths.next();
        if (!path.endNode().hasProperty("name")) continue;
        g.writeStartObject();
        g.writeStringField("name", (String) path.endNode().getProperty("name"));
        g.writeArrayFieldStart("path");
        for (Node pathStep : path.nodes()) {
          if (pathStep.hasProperty("name")) g.writeString((String) pathStep.getProperty("name"));
        }
        g.writeEndArray();
        g.writeEndObject();
      }
      g.writeEndArray();
      g.flush();
    } catch (IOException e) {
      e.printStackTrace();
    }
    resultWriter.flush();
    return resultWriter.toString();
  }
コード例 #20
0
  /**
   * Saves the configuration in a file so it can be loaded if the user wants to use the
   * configuration again.
   */
  public void saveConfig() {
    final JsonFactory jsonFactory = new JsonFactory();
    try {
      LOG.info("Saving configuration in " + this.outDirName);

      final DateFormat dateFmt = new SimpleDateFormat("yyyyMMdd-HHmmss");
      final Date date = new Date();
      final String d = dateFmt.format(date);

      final File file = new File(this.outDirName + "/config" + d + ".json");
      final JsonGenerator jg = jsonFactory.createGenerator(file, JsonEncoding.UTF8);
      jg.writeStartObject();
      if (this.inputFileName != null) {
        jg.writeStringField(IN_FILE_KEY, this.inputFileName);
        jg.writeStringField(SPLIT_PATTERN_KEY, this.splitPattern);
      } else {
        jg.writeStringField(IN_FILE_DIR_KEY, this.inputFileDirName);
      }

      jg.writeStringField(OUT_FILE_KEY, this.outDirName);
      jg.writeStringField(EXEC_LOC_KEY, this.execPath);
      jg.writeNumberField(NUM_PROCESSES_KEY, this.numberOfThreads);
      jg.writeBooleanField(STATS_KEY, this.makeStats);
      jg.writeStringField(ARGUMENT_KEY, this.argument);
      jg.writeNumberField(NUM_HEADER_KEY, this.numberOfHeaderLines);
      jg.writeBooleanField(EXTERNAL_MERGE_KEY, this.mergeMethod == 2);
      jg.writeBooleanField(CUSTOM_MERGE_KEY, this.mergeMethod == 1);
      jg.writeBooleanField(DEFAULT_MERGE_KEY, this.mergeMethod == 0);
      jg.writeBooleanField(OUTPUT_FMT_KEY, this.outputFmt);
      jg.writeEndObject();
      jg.close();
      LOG.info("Configuration saved");
    } catch (IOException e) {
      LOG.error("saveConfig: " + e.getMessage());
    }
  }
コード例 #21
0
ファイル: JsonXContent.java プロジェクト: pombredanne/xbib
 public XContentGenerator createGenerator(Writer writer) throws IOException {
   return new JsonXContentGenerator(jsonFactory.createGenerator(writer));
 }
コード例 #22
0
ファイル: JsonXContent.java プロジェクト: pombredanne/xbib
 public XContentGenerator createGenerator(OutputStream os) throws IOException {
   return new JsonXContentGenerator(jsonFactory.createGenerator(os, JsonEncoding.UTF8));
 }
コード例 #23
0
 protected JsonGenerator constructGenerator(OutputStream baos) throws IOException {
   return _factory.createGenerator(baos, JsonEncoding.UTF8);
 }
 @Before
 public void setUp() throws Exception {
   jsonFactory = JacksonSupport.getJsonFactory();
   out = new ByteArrayOutputStream();
   generator = jsonFactory.createGenerator(out, JsonEncoding.UTF8);
 }
コード例 #25
0
ファイル: ContactAgent.java プロジェクト: almende/cape
  public String getContacts(@Name("filter") String filter) {
    StringWriter resultWriter = new StringWriter();
    JsonFactory f = new JsonFactory();
    f.setCodec(om);
    JsonGenerator g;
    try {
      g = f.createGenerator(resultWriter);

      final Node target = DB.getIndex().get("id", "agents").getSingle();
      TraversalDescription td =
          Traversal.description()
              .relationships(RelTypes.GROUPMEMBER, Direction.OUTGOING)
              .relationships(RelTypes.SUBGROUP, Direction.OUTGOING)
              .uniqueness(Uniqueness.NODE_PATH)
              .evaluator(
                  new Evaluator() {
                    @Override
                    public Evaluation evaluate(Path path) {
                      if (path.endNode().hasProperty("name")
                          && path.lastRelationship().isType(RelTypes.GROUPMEMBER)) {
                        return Evaluation.INCLUDE_AND_PRUNE;
                      }
                      return Evaluation.EXCLUDE_AND_CONTINUE;
                    }
                  });

      Traverser results = td.traverse(target);

      Multimap<Long, Path> groupByNode = ArrayListMultimap.create();

      Iterator<Path> paths = results.iterator();
      while (paths.hasNext()) {
        Path path = paths.next();
        groupByNode.put(path.endNode().getId(), path);
      }
      g.writeStartArray();
      for (Long nodeId : groupByNode.keySet()) {
        List<Path> pathList = (List<Path>) groupByNode.get(nodeId);
        g.writeStartObject();
        Node node = pathList.get(0).endNode();
        g.writeStringField("name", (String) node.getProperty("name"));
        g.writeArrayFieldStart("groups");
        for (Path path : pathList) {
          g.writeStartObject();
          g.writeStringField(
              "name", (String) path.lastRelationship().getStartNode().getProperty("name"));
          g.writeArrayFieldStart("path");
          for (Node pathStep : path.nodes()) {
            if (!pathStep.equals(node) && pathStep.hasProperty("name"))
              g.writeString((String) pathStep.getProperty("name"));
          }
          g.writeEndArray();
          g.writeEndObject();
        }
        g.writeEndArray();
        g.writeEndObject();
      }
      g.writeEndArray();
      g.flush();
    } catch (IOException e) {
      e.printStackTrace();
    }
    resultWriter.flush();
    return resultWriter.toString();
  }
コード例 #26
0
    private String getCommandJson(final HystrixCommandMetrics commandMetrics) throws IOException {
      HystrixCommandKey key = commandMetrics.getCommandKey();
      HystrixCircuitBreaker circuitBreaker = HystrixCircuitBreaker.Factory.getInstance(key);

      StringWriter jsonString = new StringWriter();
      JsonGenerator json = jsonFactory.createGenerator(jsonString);

      json.writeStartObject();
      json.writeStringField("type", "HystrixCommand");
      json.writeStringField("name", key.name());
      json.writeStringField("group", commandMetrics.getCommandGroup().name());
      json.writeNumberField("currentTime", System.currentTimeMillis());

      // circuit breaker
      if (circuitBreaker == null) {
        // circuit breaker is disabled and thus never open
        json.writeBooleanField("isCircuitBreakerOpen", false);
      } else {
        json.writeBooleanField("isCircuitBreakerOpen", circuitBreaker.isOpen());
      }
      HealthCounts healthCounts = commandMetrics.getHealthCounts();
      json.writeNumberField("errorPercentage", healthCounts.getErrorPercentage());
      json.writeNumberField("errorCount", healthCounts.getErrorCount());
      json.writeNumberField("requestCount", healthCounts.getTotalRequests());

      // rolling counters
      safelyWriteNumberField(
          json,
          "rollingCountBadRequests",
          new Func0<Long>() {
            @Override
            public Long call() {
              return commandMetrics.getRollingCount(HystrixEventType.BAD_REQUEST);
            }
          });
      safelyWriteNumberField(
          json,
          "rollingCountCollapsedRequests",
          new Func0<Long>() {
            @Override
            public Long call() {
              return commandMetrics.getRollingCount(HystrixEventType.COLLAPSED);
            }
          });
      safelyWriteNumberField(
          json,
          "rollingCountEmit",
          new Func0<Long>() {
            @Override
            public Long call() {
              return commandMetrics.getRollingCount(HystrixEventType.EMIT);
            }
          });
      safelyWriteNumberField(
          json,
          "rollingCountExceptionsThrown",
          new Func0<Long>() {
            @Override
            public Long call() {
              return commandMetrics.getRollingCount(HystrixEventType.EXCEPTION_THROWN);
            }
          });
      safelyWriteNumberField(
          json,
          "rollingCountFailure",
          new Func0<Long>() {
            @Override
            public Long call() {
              return commandMetrics.getRollingCount(HystrixEventType.FAILURE);
            }
          });
      safelyWriteNumberField(
          json,
          "rollingCountFallbackEmit",
          new Func0<Long>() {
            @Override
            public Long call() {
              return commandMetrics.getRollingCount(HystrixEventType.FALLBACK_EMIT);
            }
          });
      safelyWriteNumberField(
          json,
          "rollingCountFallbackFailure",
          new Func0<Long>() {
            @Override
            public Long call() {
              return commandMetrics.getRollingCount(HystrixEventType.FALLBACK_FAILURE);
            }
          });
      safelyWriteNumberField(
          json,
          "rollingCountFallbackMissing",
          new Func0<Long>() {
            @Override
            public Long call() {
              return commandMetrics.getRollingCount(HystrixEventType.FALLBACK_MISSING);
            }
          });
      safelyWriteNumberField(
          json,
          "rollingCountFallbackRejection",
          new Func0<Long>() {
            @Override
            public Long call() {
              return commandMetrics.getRollingCount(HystrixEventType.FALLBACK_REJECTION);
            }
          });
      safelyWriteNumberField(
          json,
          "rollingCountFallbackSuccess",
          new Func0<Long>() {
            @Override
            public Long call() {
              return commandMetrics.getRollingCount(HystrixEventType.FALLBACK_SUCCESS);
            }
          });
      safelyWriteNumberField(
          json,
          "rollingCountResponsesFromCache",
          new Func0<Long>() {
            @Override
            public Long call() {
              return commandMetrics.getRollingCount(HystrixEventType.RESPONSE_FROM_CACHE);
            }
          });
      safelyWriteNumberField(
          json,
          "rollingCountSemaphoreRejected",
          new Func0<Long>() {
            @Override
            public Long call() {
              return commandMetrics.getRollingCount(HystrixEventType.SEMAPHORE_REJECTED);
            }
          });
      safelyWriteNumberField(
          json,
          "rollingCountShortCircuited",
          new Func0<Long>() {
            @Override
            public Long call() {
              return commandMetrics.getRollingCount(HystrixEventType.SHORT_CIRCUITED);
            }
          });
      safelyWriteNumberField(
          json,
          "rollingCountSuccess",
          new Func0<Long>() {
            @Override
            public Long call() {
              return commandMetrics.getRollingCount(HystrixEventType.SUCCESS);
            }
          });
      safelyWriteNumberField(
          json,
          "rollingCountThreadPoolRejected",
          new Func0<Long>() {
            @Override
            public Long call() {
              return commandMetrics.getRollingCount(HystrixEventType.THREAD_POOL_REJECTED);
            }
          });
      safelyWriteNumberField(
          json,
          "rollingCountTimeout",
          new Func0<Long>() {
            @Override
            public Long call() {
              return commandMetrics.getRollingCount(HystrixEventType.TIMEOUT);
            }
          });

      json.writeNumberField(
          "currentConcurrentExecutionCount", commandMetrics.getCurrentConcurrentExecutionCount());
      json.writeNumberField(
          "rollingMaxConcurrentExecutionCount", commandMetrics.getRollingMaxConcurrentExecutions());

      // latency percentiles
      json.writeNumberField("latencyExecute_mean", commandMetrics.getExecutionTimeMean());
      json.writeObjectFieldStart("latencyExecute");
      json.writeNumberField("0", commandMetrics.getExecutionTimePercentile(0));
      json.writeNumberField("25", commandMetrics.getExecutionTimePercentile(25));
      json.writeNumberField("50", commandMetrics.getExecutionTimePercentile(50));
      json.writeNumberField("75", commandMetrics.getExecutionTimePercentile(75));
      json.writeNumberField("90", commandMetrics.getExecutionTimePercentile(90));
      json.writeNumberField("95", commandMetrics.getExecutionTimePercentile(95));
      json.writeNumberField("99", commandMetrics.getExecutionTimePercentile(99));
      json.writeNumberField("99.5", commandMetrics.getExecutionTimePercentile(99.5));
      json.writeNumberField("100", commandMetrics.getExecutionTimePercentile(100));
      json.writeEndObject();
      //
      json.writeNumberField("latencyTotal_mean", commandMetrics.getTotalTimeMean());
      json.writeObjectFieldStart("latencyTotal");
      json.writeNumberField("0", commandMetrics.getTotalTimePercentile(0));
      json.writeNumberField("25", commandMetrics.getTotalTimePercentile(25));
      json.writeNumberField("50", commandMetrics.getTotalTimePercentile(50));
      json.writeNumberField("75", commandMetrics.getTotalTimePercentile(75));
      json.writeNumberField("90", commandMetrics.getTotalTimePercentile(90));
      json.writeNumberField("95", commandMetrics.getTotalTimePercentile(95));
      json.writeNumberField("99", commandMetrics.getTotalTimePercentile(99));
      json.writeNumberField("99.5", commandMetrics.getTotalTimePercentile(99.5));
      json.writeNumberField("100", commandMetrics.getTotalTimePercentile(100));
      json.writeEndObject();

      // property values for reporting what is actually seen by the command rather than what was set
      // somewhere
      HystrixCommandProperties commandProperties = commandMetrics.getProperties();

      json.writeNumberField(
          "propertyValue_circuitBreakerRequestVolumeThreshold",
          commandProperties.circuitBreakerRequestVolumeThreshold().get());
      json.writeNumberField(
          "propertyValue_circuitBreakerSleepWindowInMilliseconds",
          commandProperties.circuitBreakerSleepWindowInMilliseconds().get());
      json.writeNumberField(
          "propertyValue_circuitBreakerErrorThresholdPercentage",
          commandProperties.circuitBreakerErrorThresholdPercentage().get());
      json.writeBooleanField(
          "propertyValue_circuitBreakerForceOpen",
          commandProperties.circuitBreakerForceOpen().get());
      json.writeBooleanField(
          "propertyValue_circuitBreakerForceClosed",
          commandProperties.circuitBreakerForceClosed().get());
      json.writeBooleanField(
          "propertyValue_circuitBreakerEnabled", commandProperties.circuitBreakerEnabled().get());

      json.writeStringField(
          "propertyValue_executionIsolationStrategy",
          commandProperties.executionIsolationStrategy().get().name());
      json.writeNumberField(
          "propertyValue_executionIsolationThreadTimeoutInMilliseconds",
          commandProperties.executionTimeoutInMilliseconds().get());
      json.writeNumberField(
          "propertyValue_executionTimeoutInMilliseconds",
          commandProperties.executionTimeoutInMilliseconds().get());
      json.writeBooleanField(
          "propertyValue_executionIsolationThreadInterruptOnTimeout",
          commandProperties.executionIsolationThreadInterruptOnTimeout().get());
      json.writeStringField(
          "propertyValue_executionIsolationThreadPoolKeyOverride",
          commandProperties.executionIsolationThreadPoolKeyOverride().get());
      json.writeNumberField(
          "propertyValue_executionIsolationSemaphoreMaxConcurrentRequests",
          commandProperties.executionIsolationSemaphoreMaxConcurrentRequests().get());
      json.writeNumberField(
          "propertyValue_fallbackIsolationSemaphoreMaxConcurrentRequests",
          commandProperties.fallbackIsolationSemaphoreMaxConcurrentRequests().get());

      /*
       * The following are commented out as these rarely change and are verbose for streaming for something people don't change.
       * We could perhaps allow a property or request argument to include these.
       */

      //                    json.put("propertyValue_metricsRollingPercentileEnabled",
      // commandProperties.metricsRollingPercentileEnabled().get());
      //                    json.put("propertyValue_metricsRollingPercentileBucketSize",
      // commandProperties.metricsRollingPercentileBucketSize().get());
      //                    json.put("propertyValue_metricsRollingPercentileWindow",
      // commandProperties.metricsRollingPercentileWindowInMilliseconds().get());
      //                    json.put("propertyValue_metricsRollingPercentileWindowBuckets",
      // commandProperties.metricsRollingPercentileWindowBuckets().get());
      //                    json.put("propertyValue_metricsRollingStatisticalWindowBuckets",
      // commandProperties.metricsRollingStatisticalWindowBuckets().get());
      json.writeNumberField(
          "propertyValue_metricsRollingStatisticalWindowInMilliseconds",
          commandProperties.metricsRollingStatisticalWindowInMilliseconds().get());

      json.writeBooleanField(
          "propertyValue_requestCacheEnabled", commandProperties.requestCacheEnabled().get());
      json.writeBooleanField(
          "propertyValue_requestLogEnabled", commandProperties.requestLogEnabled().get());

      json.writeNumberField(
          "reportingHosts", 1); // this will get summed across all instances in a cluster
      json.writeStringField("threadPool", commandMetrics.getThreadPoolKey().name());

      json.writeEndObject();
      json.close();

      return jsonString.getBuffer().toString();
    }