@Override
public void process(ApplicationWithPrograms input) {
creationTime = String.valueOf(System.currentTimeMillis());
ApplicationId appId = input.getApplicationId();
ApplicationSpecification appSpec = input.getSpecification();
new AppSystemMetadataWriter(metadataPublisher, appId, appSpec, creationTime).write();
writeProgramSystemMetadata(appId, ProgramType.MAPREDUCE, appSpec.getMapReduce().values());
writeProgramSystemMetadata(appId, ProgramType.SERVICE, appSpec.getServices().values());
writeProgramSystemMetadata(appId, ProgramType.SPARK, appSpec.getSpark().values());
writeProgramSystemMetadata(appId, ProgramType.WORKER, appSpec.getWorkers().values());
writeProgramSystemMetadata(appId, ProgramType.WORKFLOW, appSpec.getWorkflows().values());
emit(input);
}