/** * Copy the result, adding or replacing the value of a metric * <p> * Don't add a without column method because removing columns is far less safe. * * @param metricColumn The metric column * @param value The new value for that column * * @return A new result based on this one */ public Result withMetricValue(MetricColumn metricColumn, Object value) { Map<MetricColumn, Object> newMetricValues = new LinkedHashMap<>(metricValues); newMetricValues.put(metricColumn, value); return new Result(dimensionRows, newMetricValues, timeStamp); }
/** * Create a list of results from a JsonNode of a timeseries response. * * @param jsonResult current record to parse * @param metricColumns set of metric columns * @param dateTimeZone The date time zone to apply to timestamps * * @return list of results */ private List<Result> makeTimeSeriesResults( JsonNode jsonResult, Set<MetricColumn> metricColumns, DateTimeZone dateTimeZone ) { List<Result> results = new ArrayList<>(); /* loop over all records */ for (JsonNode record : jsonResult) { DateTime timeStamp = new DateTime(record.get("timestamp").asText(), dateTimeZone); JsonNode result = record.get("result"); LinkedHashMap<MetricColumn, Object> metricValues = extractMetricValues(metricColumns, result); results.add(new Result(new LinkedHashMap<>(), metricValues, timeStamp)); } return results; }
/** * Expand the result by adding a new metric column with the row number as the metric value. * * @param result Result to expand * @param metricColumn New column to add * @param rowNum Row number to use as the metric value * * @return the expanded Result */ private Result rowNumMap(Result result, MetricColumn metricColumn, int rowNum) { Map<MetricColumn, Object> metricValues = new LinkedHashMap<>(result.getMetricValues()); metricValues.put(metricColumn, BigDecimal.valueOf(rowNum)); return new Result(result.getDimensionRows(), metricValues, result.getTimeStamp()); } }
/** * Create a list of results from a JsonNode of a groupBy response. * * @param jsonResult current results to parse in json * @param dimensionColumns set of dimension columns * @param metricColumns set of metric columns * @param dateTimeZone The date time zone to apply to timestamps * * @return list of results */ private List<Result> makeGroupByResults( JsonNode jsonResult, Set<DimensionColumn> dimensionColumns, Set<MetricColumn> metricColumns, DateTimeZone dateTimeZone ) { List<Result> results = new ArrayList<>(); for (JsonNode record : jsonResult) { DateTime timeStamp = new DateTime(record.get("timestamp").asText(), dateTimeZone); JsonNode event = record.get("event"); LinkedHashMap<DimensionColumn, DimensionRow> dimensionRows = extractDimensionRows(dimensionColumns, event); LinkedHashMap<MetricColumn, Object> metricValues = extractMetricValues(metricColumns, event); results.add(new Result(dimensionRows, metricValues, timeStamp)); } return results; }
/** * Create a list of results from a JsonNode of a lookback response. * * @param jsonResult current results to parse in json * @param dimensionColumns set of dimension columns * @param metricColumns set of metric columns * @param dateTimeZone The date time zone to apply to timestamps * * @return list of results */ private List<Result> makeLookbackResults( JsonNode jsonResult, Set<DimensionColumn> dimensionColumns, Set<MetricColumn> metricColumns, DateTimeZone dateTimeZone ) { List<Result> results = new ArrayList<>(); for (JsonNode record : jsonResult) { DateTime timeStamp = new DateTime(record.get("timestamp").asText(), dateTimeZone); JsonNode result = record.get("result"); LinkedHashMap<MetricColumn, Object> metricValues = extractMetricValues(metricColumns, result); LinkedHashMap<DimensionColumn, DimensionRow> dimensionRows; dimensionRows = dimensionColumns == null ? new LinkedHashMap<>() : extractDimensionRows(dimensionColumns, result); results.add(new Result(dimensionRows, metricValues, timeStamp)); } return results; }
LinkedHashMap<MetricColumn, Object> metricValues = extractMetricValues(metricColumns, entry); results.add(new Result(dimensionRows, metricValues, timeStamp));
/** * Creates new Result object from JsonNode. * * @param serializedResult JsonNode which contains all the serialized details to generate Result object * @param resultSetSchema Schema of the result to generate the Result object * * @return Result object generated from given JsonNode */ private Result getResult(JsonNode serializedResult, ResultSetSchema resultSetSchema) { return new Result( extractDimensionValues( serializedResult.get(DIMENSION_VALUES_KEY), resultSetSchema.getColumns(DimensionColumn.class) ), extractMetricValues( serializedResult.get(METRIC_VALUES_KEY), resultSetSchema.getColumns(MetricColumnWithValueType.class) ), DateTime.parse(serializedResult.get(TIMESTAMP_KEY).asText()) ); }
Result result = new Result(new HashMap<>(), metricValues, DateTime.parse("2016-01-12T00:00:00.000Z")); List<Result> results = new ArrayList<>(); results.add(result); Result result1 = new Result(new HashMap<>(), metricValues, DateTime.parse("2016-01-12T00:00:00.000Z")); Result result2 = new Result(new HashMap<>(), metricValues, DateTime.parse("2016-01-13T00:00:00.000Z")); Result result3 = new Result(new HashMap<>(), metricValues, DateTime.parse("2016-01-14T00:00:00.000Z"));
Result result = new Result(new HashMap<>(), metricValues, DateTime.parse("2016-01-12T00:00:00.000Z")); List<Result> results = new ArrayList<>(); results.add(result); Result result1 = new Result(new HashMap<>(), metricValues, DateTime.parse("2016-01-12T00:00:00.000Z")); Result result2 = new Result(new HashMap<>(), metricValues, DateTime.parse("2016-01-13T00:00:00.000Z")); Result result3 = new Result(new HashMap<>(), metricValues, DateTime.parse("2016-01-14T00:00:00.000Z"));