code: static Tuple2<String, List<Tag>> resolveNameAndTags(Publisher<?> source) {
  		//resolve the tags and names at instantiation
  		String name;
  		List<Tag> tags;
  
  		Scannable scannable = Scannable.from(source);
  		if (scannable.isScanAvailable()) {
  			String nameOrDefault = scannable.name();
  			if (scannable.stepName().equals(nameOrDefault)) {
  				name = REACTOR_DEFAULT_NAME;
  			}
  			else {
  				name = nameOrDefault;
  			}
  			tags = scannable.tags()
  			                .map(tuple -> Tag.of(tuple.getT1(), tuple.getT2()))
  			                .collect(Collectors.toList());
  		}
  		else {
  			LOGGER.warn("Attempting to activate metrics but the upstream is not Scannable. " +
  					"You might want to use `name()` (and optionally `tags()`) right before `metrics()`");
  			name = REACTOR_DEFAULT_NAME;
  			tags = Collections.emptyList();
  		}
  
  		return Tuples.of(name, tags);
  	}
docs: Extract the name and tags from the upstream, and detect if there was an actual name
  (ie. distinct from {@link Scannable#stepName()}) set by the user.
  
  @param source the upstream
  @return a {@link Tuple2} of name and list of {@link Tag}