File Complexity Overall
  • There are 495 files with units, with 54,486 lines of code.
    • 2 very complex files (McCabe index sum 251+; 5,099 lines of code)
    • 2 complex files (McCabe index sum 126-250; 2,396 lines of code)
    • 20 medium complex files (McCabe index sum 51-125; 10,102 lines of code)
    • 44 slightly complex files (McCabe index sum 26-50; 9,820 lines of code)
    • 427 simple files (McCabe index sum 1-25; 27,069 lines of code)
  • 123 main files have no units (e.g. languages without unit analysis, or files without functions) and are not classified.
system9% | 4% | 18% | 18% | 49%
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
java9% | 4% | 18% | 18% | 49%
File Complexity per Logical Decomposition
primary
251+
126-250
51-125
26-50
1-25
netflix-sel51% | 0% | 14% | 11% | 22%
maestro-engine0% | 12% | 39% | 22% | 25%
maestro-flow0% | 0% | 17% | 32% | 50%
maestro-signal0% | 0% | 23% | 0% | 76%
maestro-dsl0% | 0% | 31% | 29% | 39%
maestro-common0% | 0% | 2% | 12% | 85%
maestro-extensions0% | 0% | 0% | 56% | 43%
maestro-server0% | 0% | 0% | 16% | 83%
maestro-database0% | 0% | 0% | 80% | 19%
maestro-queue0% | 0% | 0% | 14% | 85%
maestro-kubernetes0% | 0% | 0% | 0% | 100%
maestro-aws0% | 0% | 0% | 0% | 100%
maestro-timetrigger0% | 0% | 0% | 0% | 100%
maestro-http0% | 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
SelParser.java
in netflix-sel/src/main/java/com/netflix/sel/ast
3509 167 981 28 44
SelParserTokenManager.java
in netflix-sel/src/main/java/com/netflix/sel/ast
1590 38 572 36 195
MaestroTask.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/tasks
1096 33 172 16 35
MaestroWorkflowDao.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/dao
1300 53 137 11 13
JavaCharStream.java
in netflix-sel/src/main/java/com/netflix/sel/ast
409 40 111 27 23
ForeachStepRuntime.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/steps
857 19 101 12 17
ParamsMergeHelper.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/params
576 24 99 17 13
SelParserEvaluationVisitor.java
in netflix-sel/src/main/java/com/netflix/sel/visitor
580 46 99 17 10
MaestroStepInstanceDao.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/dao
1040 46 96 9 8
MaestroStepInstanceActionDao.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/dao
682 23 93 14 16
MaestroWorkflowInstanceDao.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/dao
1018 31 89 9 7
MaestroParamExtension.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/eval
470 24 83 18 11
ParamParser.java
in maestro-dsl/src/main/java/com/netflix/maestro/dsl/parsers
294 17 83 28 18
TaskHelper.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/utils
302 12 80 26 26
MaestroRunStrategyDao.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/dao
944 37 75 8 11
FlowActor.java
in maestro-flow/src/main/java/com/netflix/maestro/flow/actor
317 24 71 22 10
MaestroStepBreakpointDao.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/dao
727 22 66 9 7
MaestroSignalBrokerDao.java
in maestro-signal/src/main/java/com/netflix/maestro/signal/dao
297 16 59 20 16
WhileStepRuntime.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/steps
524 15 58 11 12
ForeachStepOverview.java
in maestro-common/src/main/java/com/netflix/maestro/models/instance
262 16 58 22 6
SelLong.java
in netflix-sel/src/main/java/com/netflix/sel/type
157 14 53 34 19
StepRuntimeSummary.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/execution
364 25 52 14 10
SelMap.java
in netflix-sel/src/main/java/com/netflix/sel/type
139 9 52 37 17
SelDouble.java
in netflix-sel/src/main/java/com/netflix/sel/type
143 11 51 36 18
WorkflowActionHandler.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/handlers
406 17 50 12 9
WorkflowParser.java
in maestro-dsl/src/main/java/com/netflix/maestro/dsl/parsers
278 13 49 18 11
SelTypeUtil.java
in netflix-sel/src/main/java/com/netflix/sel/type
223 12 48 22 13
MaestroTagPermitTask.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/tasks
240 14 47 20 8
ParamEvaluator.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/eval
405 17 44 11 8
AbstractDatabaseDao.java
in maestro-database/src/main/java/com/netflix/maestro/database
267 18 44 16 13
BaseActor.java
in maestro-flow/src/main/java/com/netflix/maestro/flow/actor
208 23 42 20 5
SubworkflowStepRuntime.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/steps
328 8 39 12 11
ExecutionContext.java
in maestro-flow/src/main/java/com/netflix/maestro/flow/engine
241 20 39 16 5
SelParserDefaultVisitor.java
in netflix-sel/src/main/java/com/netflix/sel/ast
118 38 38 32 1
RollupAggregationHelper.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/utils
184 8 36 20 12
ParamsManager.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/params
296 10 36 12 10
Timeline.java
in maestro-common/src/main/java/com/netflix/maestro/models/timeline
157 7 36 23 18
WorkflowController.java
in maestro-server/src/main/java/com/netflix/maestro/server/controllers
328 17 36 11 8
MaestroForeachFlattenedDao.java
in maestro-extensions/src/main/java/com/netflix/maestro/extensions/dao
435 12 36 8 9
SelUtilFunc.java
in netflix-sel/src/main/java/com/netflix/sel/type
162 14 35 22 15
SelString.java
in netflix-sel/src/main/java/com/netflix/sel/type
267 12 35 13 5
MapParameter.java
in maestro-common/src/main/java/com/netflix/maestro/models/parameter
199 11 35 18 19
WorkflowGraph.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/transformation
230 9 34 15 10
LiteralEvaluator.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/eval
172 9 33 19 8
WorkflowConstraint.java
in maestro-common/src/main/java/com/netflix/maestro/validations
181 7 33 18 9
TaskActor.java
in maestro-flow/src/main/java/com/netflix/maestro/flow/actor
132 12 33 25 10
RunRequest.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/execution
171 16 31 18 7
DatabaseConfiguration.java
in maestro-database/src/main/java/com/netflix/maestro/database
150 26 31 21 3
MaestroTagPermitDao.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/dao
349 16 30 9 5
MaestroFinalFlowStatusCallback.java
in maestro-engine/src/main/java/com/netflix/maestro/engine/listeners
296 8 30 10 17
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...