How to create and graph synthetic metrics in SonarQube
The good news is THIS IS EASY
The bad news is "You'll have to write a little Java code"
The silver lining is "We both know a good tool for code metrics" :)
Our home page gives an example of a synthetic metric being graphed - Violations per Thousand lines is not a metric from SonarQube - it's a synthetic metric we created.
is how we created it
	public static Map<String,SyntheticMetric> populateSynthetics () {
		Map<String,SyntheticMetric> syntheticMetrics = new HashMap<>();
		
		SyntheticMetric violationsPerKLines = new SyntheticMetric() {
			@Override public String getSyntheicName() { return "ViolationsPerKLines";}
			@Override public List<String> getRealMetrics() { List<String> list = new ArrayList<>();  list.add ("violations");  list.add("lines");  return list;}
			@Override public double calculate(Map<String,Double> metrics) {
				double lines = 0;
				Double lineInput = metrics.get("lines");
				if (lineInput != null) lines = lineInput;
				double violations = 0;
				Double violationsInput = metrics.get("violations");
				if (violationsInput != null) violations = violationsInput;
				if ((lines == 0) || (violations == 0)) return 0.0;
				return (1000.0 * violations) / lines;
			}
		};
		syntheticMetrics.put(violationsPerKLines.getSyntheicName(), violationsPerKLines);
		return syntheticMetrics;
	}
Let's break this violationsPerKLines SyntheticMetric down.
getSyntheticName() returns the synthetic metric's name that you'll reference in your json file.
        {"metric":"ViolationsPerKLines","filename":"SonarViolationsPerThousandLines","title":"Violations Per Thousand Lines"}
getRealMetrics() returns the list of real metrics we need to query from SonarQube. (List.of arrives in Java 9 and we're compatible with Java 8, at least until most teams are at Java 11)
calculate() calculates the number to return.
So to create a new synthetic metric, create a new object that implements the SyntheticMetric interface and add it to the syntheticMetrics list, and your new synthetic metric is good to go! (Please consider a code contribution back to the project - we'll thank you publicly and loudly in Twitter and we'll give your code a code review!)
 
