/** * 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; } }
@Override public ColumnList columns(ProfileMeasurement measurement) { ColumnList cols = new ColumnList(); cols.addColumn(columnFamilyBytes, getColumnQualifier("value"), SerDeUtils.toBytes(measurement.getProfileValue())); return cols; }
m.getProfileName(), m.getEntity(), m.getPeriod().getPeriod(), m.getProfileValue()); return new ProfileMeasurementAdapter(m);
values.add(m.getProfileValue());
public ProfileMeasurementAdapter(ProfileMeasurement measurement) { this.profileName = measurement.getProfileName(); this.entity = measurement.getEntity(); this.periodId = measurement.getPeriod().getPeriod(); this.durationMillis = measurement.getPeriod().getDurationMillis(); this.profileValue = SerDeUtils.toBytes(measurement.getProfileValue()); }
/** * Handles the {@code ProfileMeasurement}s that are created when a profile is flushed. * * @param measurements The measurements to handle. */ private void emitMeasurements(List<ProfileMeasurement> measurements) { // flush each profile for(ProfileMeasurement measurement: measurements) { // allow each 'emitter' to emit the measurement for (ProfileMeasurementEmitter emitter : emitters) { emitter.emit(measurement, collector); LOG.debug("Measurement emitted; stream={}, profile={}, entity={}, value={}, start={}, end={}, duration={}, period={}", emitter.getStreamId(), measurement.getProfileName(), measurement.getEntity(), measurement.getProfileValue(), measurement.getPeriod().getStartTimeMillis(), measurement.getPeriod().getEndTimeMillis(), measurement.getPeriod().getDurationMillis(), measurement.getPeriod().getPeriod()); } } LOG.debug("Emitted {} measurement(s).", measurements.size()); }