File Complexity Overall
  • There are 124 files with units, with 9,311 lines of code.
    • 0 very complex files (McCabe index sum 251+; 0 lines of code)
    • 0 complex files (McCabe index sum 126-250; 0 lines of code)
    • 3 medium complex files (McCabe index sum 51-125; 983 lines of code)
    • 15 slightly complex files (McCabe index sum 26-50; 2,934 lines of code)
    • 106 simple files (McCabe index sum 1-25; 5,394 lines of code)
  • 39 main files have no units (e.g. languages without unit analysis, or files without functions) and are not classified.
system0% | 0% | 10% | 31% | 57%
Legend:
251+
126-250
51-125
26-50
1-25


explore: grouped by folders | grouped by complexity
File Complexity per Extension
251+
126-250
51-125
26-50
1-25
java0% | 0% | 10% | 31% | 57%
File Complexity per Logical Decomposition
primary
251+
126-250
51-125
26-50
1-25
servo-core0% | 0% | 13% | 28% | 57%
servo-atlas0% | 0% | 0% | 40% | 59%
servo-apache0% | 0% | 0% | 100% | 0%
servo-aws0% | 0% | 0% | 42% | 57%
servo-tomcat0% | 0% | 0% | 100% | 0%
servo-example0% | 0% | 0% | 0% | 100%
servo-graphite0% | 0% | 0% | 0% | 100%
Most Complex Files (Top 50)

The McCabe index of a file grows with its size: per 100 lines tells a large but plain file from a dense one, and most complex unit whether the complexity sits in one unit or is spread over many.

File# lines# unitsMcCabe index
(sum)
per 100
lines
most complex
unit
StatsMonitor.java
in servo-core/src/main/java/com/netflix/servo/monitor
381 38 65 17 9
Monitors.java
in servo-core/src/main/java/com/netflix/servo/monitor
251 30 61 24 8
ThreadCpuStats.java
in servo-core/src/main/java/com/netflix/servo/util
351 29 54 15 10
AtlasMetricObserver.java
in servo-atlas/src/main/java/com/netflix/servo/publish/atlas
320 30 50 16 4
JmxMetricPoller.java
in servo-core/src/main/java/com/netflix/servo/publish
228 16 46 20 6
SpectatorContext.java
in servo-core/src/main/java/com/netflix/servo
330 25 45 14 7
SmallTagMap.java
in servo-core/src/main/java/com/netflix/servo/tag
194 22 43 22 6
StatsConfig.java
in servo-core/src/main/java/com/netflix/servo/stats
163 24 42 26 12
ApacheStatusPoller.java
in servo-apache/src/main/java/com/netflix/servo/publish/apache
173 11 34 20 12
MonitorConfig.java
in servo-core/src/main/java/com/netflix/servo/monitor
126 22 31 25 6
NormalizationTransform.java
in servo-core/src/main/java/com/netflix/servo/publish
166 15 31 19 7
JvmMetricPoller.java
in servo-core/src/main/java/com/netflix/servo/publish
359 14 30 8 12
BasicTagList.java
in servo-core/src/main/java/com/netflix/servo/tag
113 22 30 27 3
BucketTimer.java
in servo-core/src/main/java/com/netflix/servo/monitor
170 15 29 17 10
TomcatPoller.java
in servo-tomcat/src/main/java/com/netflix/servo/publish/tomcat
145 10 28 19 7
StatsBuffer.java
in servo-core/src/main/java/com/netflix/servo/stats
141 15 28 20 5
CloudWatchMetricObserver.java
in servo-aws/src/main/java/com/netflix/servo/publish/cloudwatch
158 14 27 17 6
MonitorRegistryMetricPoller.java
in servo-core/src/main/java/com/netflix/servo/publish
148 13 26 18 4
BasicTimer.java
in servo-core/src/main/java/com/netflix/servo/monitor
132 16 25 19 8
GraphiteMetricObserver.java
in servo-graphite/src/main/java/com/netflix/servo/publish/graphite
122 9 24 20 4
DurationTimer.java
in servo-core/src/main/java/com/netflix/servo/monitor
128 15 24 19 6
DynamicTimer.java
in servo-core/src/main/java/com/netflix/servo/monitor
119 18 23 19 5
ValidCharacters.java
in servo-atlas/src/main/java/com/netflix/servo/publish/atlas
91 9 22 24 5
SortedTagList.java
in servo-core/src/main/java/com/netflix/servo/tag
96 17 22 23 2
BucketConfig.java
in servo-core/src/main/java/com/netflix/servo/monitor
89 9 21 24 8
BasicDistributionSummary.java
in servo-core/src/main/java/com/netflix/servo/monitor
98 11 20 20 8
AwsInjectableTag.java
in servo-aws/src/main/java/com/netflix/servo/tag/aws
118 14 20 17 4
ExpiringCache.java
in servo-core/src/main/java/com/netflix/servo/util
104 12 18 17 5
CounterToRateMetricTransform.java
in servo-core/src/main/java/com/netflix/servo/publish
119 11 18 15 5
Main.java
in servo-example/src/main/java/com/netflix/servo/example
105 11 17 16 5
HttpHelper.java
in servo-atlas/src/main/java/com/netflix/servo/publish/atlas
153 7 17 11 5
MinGauge.java
in servo-core/src/main/java/com/netflix/servo/monitor
61 8 17 28 5
PeakRateCounter.java
in servo-core/src/main/java/com/netflix/servo/monitor
77 9 17 22 5
BasicGraphiteNamingConvention.java
in servo-graphite/src/main/java/com/netflix/servo/publish/graphite
77 5 16 21 5
MaxGauge.java
in servo-core/src/main/java/com/netflix/servo/monitor
72 9 16 22 5
StepCounter.java
in servo-core/src/main/java/com/netflix/servo/monitor
72 11 16 22 5
DoubleMaxGauge.java
in servo-core/src/main/java/com/netflix/servo/monitor
72 9 16 22 5
MonitorMBean.java
in servo-core/src/main/java/com/netflix/servo/jmx
101 12 16 16 3
JmxMonitorRegistry.java
in servo-core/src/main/java/com/netflix/servo/jmx
100 7 16 16 4
AsyncMetricObserver.java
in servo-core/src/main/java/com/netflix/servo/publish
99 9 16 16 4
DoubleCounter.java
in servo-core/src/main/java/com/netflix/servo/monitor
76 8 15 20 5
UpdateRequest.java
in servo-atlas/src/main/java/com/netflix/servo/publish/atlas
66 7 14 21 4
NumberGauge.java
in servo-core/src/main/java/com/netflix/servo/monitor
60 9 14 23 4
Metric.java
in servo-core/src/main/java/com/netflix/servo
53 10 14 26 5
AtlasPrettyPrinter.java
in servo-atlas/src/main/java/com/netflix/servo/publish/atlas
55 10 13 24 2
StatsTimer.java
in servo-core/src/main/java/com/netflix/servo/monitor
59 11 13 22 3
Config.java
in servo-example/src/main/java/com/netflix/servo/example
60 12 12 20 1
BasicInformational.java
in servo-core/src/main/java/com/netflix/servo/monitor
41 6 12 29 6
DynamicCounter.java
in servo-core/src/main/java/com/netflix/servo/monitor
82 10 12 15 3
DoubleGauge.java
in servo-core/src/main/java/com/netflix/servo/monitor
57 8 12 21 5
About This Analysis
  • File complexity is the sum of the McCabe indexes (conditional complexity) of the units (methods, functions...) in a file.
  • Files are classified in five categories based on that sum: 1-25 (simple files), 26-50 (slightly complex files), 51-125 (medium complex files), 126-250 (complex files), 251+ (very complex files). The default bands are five times the unit complexity bands, as a file is a group of units.
  • Only main code files with units are classified. Files without units (languages without unit analysis, or files without functions) have no complexity to measure and are left out rather than counted as simple.
  • A very complex file holds many decisions, which often means it has too many responsibilities: a candidate to split, and a place where changes need more testing.
Learn more...