/** * Renders a view of the profile measurement. * @param measurement The profile measurement to render. */ private Map<String, Object> render(ProfileMeasurement measurement) { Map<String, Object> view = new HashMap<>(); view.put(PROFILE_KEY, measurement.getProfileName()); view.put(ENTITY_KEY, measurement.getEntity()); view.put(PERIOD_KEY, measurement.getPeriod().getPeriod()); view.put(PERIOD_START_KEY, measurement.getPeriod().getStartTimeMillis()); view.put(PERIOD_END_KEY, measurement.getPeriod().getEndTimeMillis()); view.put(VALUE_KEY, measurement.getProfileValue()); view.put(GROUPS_KEY, measurement.getGroups()); return view; }
@Override public Object apply(List<Object> args, Context context) throws ParseException { // user must provide the stand-alone profiler StandAloneProfiler profiler = Util.getArg(0, StandAloneProfiler.class, args); if(profiler == null) { throw new IllegalArgumentException(format("expected the profiler returned by PROFILER_INIT, found null")); } // transform the profile measurements into maps to simplify manipulation in stellar List<Map<String, Object>> measurements = new ArrayList<>(); for(ProfileMeasurement m : profiler.flush()) { // create a map for the profile period Map<String, Object> period = new HashMap<>(); period.put("period", m.getPeriod().getPeriod()); period.put("start", m.getPeriod().getStartTimeMillis()); period.put("duration", m.getPeriod().getDurationMillis()); period.put("end", m.getPeriod().getEndTimeMillis()); // create a map for the measurement Map<String, Object> measurement = new HashMap<>(); measurement.put("profile", m.getProfileName()); measurement.put("entity", m.getEntity()); measurement.put("value", m.getProfileValue()); measurement.put("groups", m.getGroups()); measurement.put("period", period); measurements.add(measurement); } return measurements; } }
/** * Builds the row key for a given profile measurement. * @param m The profile measurement. * @return The HBase row key. */ @Override public byte[] rowKey(ProfileMeasurement m) { return rowKey(m.getProfileName(), m.getEntity(), m.getPeriod(), m.getGroups()); }