private static String makeDataKey(NamespacedEntityId data) { if (data instanceof DatasetId) { return makeDatasetKey((DatasetId) data); } if (data instanceof StreamId) { return makeStreamKey((StreamId) data); } throw new IllegalArgumentException("Unknown data object " + data); }
public static LineageRecord toLineageRecord(long start, long end, Lineage lineage, Set<CollapseType> collapseTypes) { Set<RelationRecord> relationBuilder = new HashSet<>(); Map<String, ProgramRecord> programBuilder = new HashMap<>(); Map<String, DataRecord> dataBuilder = new HashMap<>(); Set<CollapsedRelation> collapsedRelations = LineageCollapser.collapseRelations(lineage.getRelations(), collapseTypes); for (CollapsedRelation relation : collapsedRelations) { String dataKey = makeDataKey(relation.getData()); String programKey = makeProgramKey(relation.getProgram()); RelationRecord relationRecord = new RelationRecord(dataKey, programKey, convertAccessType(relation.getAccess()), convertRuns(relation.getRuns()), convertComponents(relation.getComponents())); relationBuilder.add(relationRecord); programBuilder.put(programKey, new ProgramRecord(relation.getProgram())); dataBuilder.put(dataKey, new DataRecord(relation.getData())); } return new LineageRecord(start, end, relationBuilder, programBuilder, dataBuilder); }
@GET @Path("/namespaces/{namespace-id}/streams/{stream-id}/lineage") public void streamLineage(HttpRequest request, HttpResponder responder, @PathParam("namespace-id") String namespaceId, @PathParam("stream-id") String stream, @QueryParam("start") String startStr, @QueryParam("end") String endStr, @QueryParam("levels") @DefaultValue("10") int levels, @QueryParam("collapse") List<String> collapse, @QueryParam("rollup") String rollup) throws Exception { checkLevels(levels); TimeRange range = parseRange(startStr, endStr); StreamId streamId = new StreamId(namespaceId, stream); Lineage lineage = lineageAdmin.computeLineage(streamId, range.getStart(), range.getEnd(), levels, rollup); responder.sendJson(HttpResponseStatus.OK, GSON.toJson(LineageSerializer.toLineageRecord( TimeUnit.MILLISECONDS.toSeconds(range.getStart()), TimeUnit.MILLISECONDS.toSeconds(range.getEnd()), lineage, getCollapseTypes(collapse)), LineageRecord.class)); }
private static String makeDataKey(NamespacedEntityId data) { if (!(data instanceof DatasetId)) { throw new IllegalArgumentException("Unknown data object " + data); } return makeDatasetKey((DatasetId) data); }
public static LineageRecord toLineageRecord(long start, long end, Lineage lineage, Set<CollapseType> collapseTypes) { Set<RelationRecord> relationBuilder = new HashSet<>(); Map<String, ProgramRecord> programBuilder = new HashMap<>(); Map<String, DataRecord> dataBuilder = new HashMap<>(); Set<CollapsedRelation> collapsedRelations = LineageCollapser.collapseRelations(lineage.getRelations(), collapseTypes); for (CollapsedRelation relation : collapsedRelations) { String dataKey = makeDataKey(relation.getData()); String programKey = makeProgramKey(relation.getProgram()); RelationRecord relationRecord = new RelationRecord(dataKey, programKey, convertAccessType(relation.getAccess()), convertRuns(relation.getRuns()), convertComponents(relation.getComponents())); relationBuilder.add(relationRecord); programBuilder.put(programKey, new ProgramRecord(relation.getProgram())); dataBuilder.put(dataKey, new DataRecord(relation.getData())); } return new LineageRecord(start, end, relationBuilder, programBuilder, dataBuilder); }
@GET @Path("/namespaces/{namespace-id}/datasets/{dataset-id}/lineage") public void datasetLineage(HttpRequest request, HttpResponder responder, @PathParam("namespace-id") String namespaceId, @PathParam("dataset-id") String datasetId, @QueryParam("start") String startStr, @QueryParam("end") String endStr, @QueryParam("levels") @DefaultValue("10") int levels, @QueryParam("collapse") List<String> collapse, @QueryParam("rollup") String rollup) throws Exception { checkLevels(levels); TimeRange range = parseRange(startStr, endStr); DatasetId datasetInstance = new DatasetId(namespaceId, datasetId); Lineage lineage = lineageAdmin.computeLineage(datasetInstance, range.getStart(), range.getEnd(), levels, rollup); responder.sendJson(HttpResponseStatus.OK, GSON.toJson(LineageSerializer.toLineageRecord( TimeUnit.MILLISECONDS.toSeconds(range.getStart()), TimeUnit.MILLISECONDS.toSeconds(range.getEnd()), lineage, getCollapseTypes(collapse)), LineageRecord.class)); }
@GET @Path("/namespaces/{namespace-id}/datasets/{dataset-id}/lineage") public void datasetLineage(HttpRequest request, HttpResponder responder, @PathParam("namespace-id") String namespaceId, @PathParam("dataset-id") String datasetId, @QueryParam("start") String startStr, @QueryParam("end") String endStr, @QueryParam("levels") @DefaultValue("10") int levels, @QueryParam("collapse") List<String> collapse, @QueryParam("rollup") String rollup) throws Exception { checkLevels(levels); TimeRange range = parseRange(startStr, endStr); DatasetId datasetInstance = new DatasetId(namespaceId, datasetId); Lineage lineage = lineageAdmin.computeLineage(datasetInstance, range.getStart(), range.getEnd(), levels, rollup); responder.sendJson(HttpResponseStatus.OK, GSON.toJson(LineageSerializer.toLineageRecord( TimeUnit.MILLISECONDS.toSeconds(range.getStart()), TimeUnit.MILLISECONDS.toSeconds(range.getEnd()), lineage, getCollapseTypes(collapse)), LineageRecord.class)); }