The code would be a great deal larger than 100 lines if it were split up.  

parts[] needs to remain mutable.  Which parts get lopped off are a function whether or not the metric is internal, is a counter component or has a global prefix.  Breaking it up means that becomes an instance variable, but a mutable one at that, which is asking for trouble IMO.

@fourk Also, the logic that determines type would need to be duplicated for determining name for the counter and timer components.

I'm becoming less convinced that having drop-in compatibility with carbon is important or useful (though it was during development). I'm fine with pulling the CarbonCompatibleIngest code, of which this is part of, into a private branch if it will help move along this PR.