aws-samples / s3-to-lambda-patterns
Duplication

Places in code with 6 or more lines that are exactly the same.

Intro
  • For duplication, we look at places in code where there are 6 or more lines of code that are exactly the same.
  • Before duplication is calculated, the code is cleaned to remove empty lines, comments, and frequently duplicated constructs such as imports.
  • You should aim at having as little as possible (<5%) of duplicated code as high-level of duplication can lead to maintenance difficulties, poor factoring, and logical contradictions.
Learn more...
Duplication Overall
  • 53% duplication:
    • 4,391 cleaned lines of cleaned code (without empty lines, comments, and frequently duplicated constructs such as imports)
    • 2,362 duplicated lines
  • 276 duplicates
system53% (2,362 lines)
Duplication per Extension
yaml58% (1,215 lines)
js49% (1,147 lines)
Duplication per Component (primary)
decoupled-docrepo/converters79% (262 lines)
translation/v265% (237 lines)
videos-samples/1-translation68% (200 lines)
translation/v181% (177 lines)
decoupled-docrepo/analyzers57% (156 lines)
videos-samples/2-transcribe62% (115 lines)
docrepository48% (113 lines)
videos-samples/3-dynamodb56% (105 lines)
eventbridge/3-multi-bucket88% (88 lines)
videos-samples/4-workflow40% (81 lines)
eventbridge/4-multi-multi55% (75 lines)
transcription82% (73 lines)
ddbImporter/v167% (72 lines)
ddbImporter/v242% (69 lines)
docrepository/batchingFunction90% (69 lines)
eventbridge/1-integration78% (69 lines)
eventbridge/2-existing-bucket82% (69 lines)
workflow29% (41 lines)
decoupled-docrepo/loaders35% (39 lines)
docrepository/addToESindex44% (39 lines)
docrepository/addToQueueFunction65% (39 lines)
workflow/StartExecutionFunction54% (29 lines)
docrepository/processPDF64% (29 lines)
docrepository/processDOCX53% (25 lines)
decoupled-docrepo/setup22% (24 lines)
docrepository/queryESindex38% (23 lines)
decoupled-docrepo/parseS3event23% (23 lines)
workflow/deciderFunction17% (14 lines)
docrepository/processJPG13% (7 lines)
resize-video0% (0 lines)
resize-video/resizeFunction0% (0 lines)
ddbImporter/dataGenerator0% (0 lines)
transcription/sentimentFunction0% (0 lines)
transcription/transcribeFunction0% (0 lines)
videos-samples/5-s3-uploader0% (0 lines)
workflow/resultFunction0% (0 lines)

Duplication Between Components (50+ lines)

G translation/v1 translation/v1 translation/v2 translation/v2 translation/v1--translation/v2 327 videos-samples/1-translation videos-samples/1-translation translation/v1--videos-samples/1-translation 235 translation/v2--videos-samples/1-translation 198 decoupled-docrepo/analyzers decoupled-docrepo/analyzers decoupled-docrepo/converters decoupled-docrepo/converters decoupled-docrepo/analyzers--decoupled-docrepo/converters 261 decoupled-docrepo/converters--translation/v1 54 decoupled-docrepo/converters--translation/v2 54 docrepository/batchingFunction docrepository/batchingFunction decoupled-docrepo/converters--docrepository/batchingFunction 72 videos-samples/2-transcribe videos-samples/2-transcribe videos-samples/1-translation--videos-samples/2-transcribe 95 videos-samples/3-dynamodb videos-samples/3-dynamodb videos-samples/1-translation--videos-samples/3-dynamodb 77 eventbridge/3-multi-bucket eventbridge/3-multi-bucket eventbridge/4-multi-multi eventbridge/4-multi-multi eventbridge/3-multi-bucket--eventbridge/4-multi-multi 150 transcription transcription transcription--videos-samples/2-transcribe 146 videos-samples/2-transcribe--videos-samples/3-dynamodb 114 eventbridge/1-integration eventbridge/1-integration eventbridge/1-integration--eventbridge/3-multi-bucket 138 eventbridge/1-integration--eventbridge/4-multi-multi 108 eventbridge/2-existing-bucket eventbridge/2-existing-bucket eventbridge/1-integration--eventbridge/2-existing-bucket 138 eventbridge/2-existing-bucket--eventbridge/3-multi-bucket 138 eventbridge/2-existing-bucket--eventbridge/4-multi-multi 108 ddbImporter/v1 ddbImporter/v1 ddbImporter/v1--videos-samples/3-dynamodb 126 ddbImporter/v2 ddbImporter/v2 ddbImporter/v1--ddbImporter/v2 108 ddbImporter/v2--videos-samples/3-dynamodb 78 docrepository/batchingFunction--translation/v1 98 docrepository/batchingFunction--translation/v2 98 docrepository docrepository docrepository--translation/v2 91 videos-samples/4-workflow videos-samples/4-workflow workflow workflow videos-samples/4-workflow--workflow 82 workflow/StartExecutionFunction workflow/StartExecutionFunction videos-samples/4-workflow--workflow/StartExecutionFunction 58 decoupled-docrepo/loaders decoupled-docrepo/loaders docrepository/addToESindex docrepository/addToESindex decoupled-docrepo/loaders--docrepository/addToESindex 78 docrepository/addToQueueFunction docrepository/addToQueueFunction docrepository/addToQueueFunction--translation/v2 66 docrepository/processDOCX docrepository/processDOCX docrepository/processPDF docrepository/processPDF docrepository/processDOCX--docrepository/processPDF 50

Download: SVG DOT (open online Graphviz editor)

Open 3D force graph...

Show more details on duplication between components...
Longest Duplicates
The list of 20 longest duplicates.
See data for all 276 duplicates...
Size#FoldersFilesLinesCode
70 x 2 translation/v1
videos-samples/1-translation
template.yaml
template-v2.yaml
19:93 (76%)
17:91 (83%)
view
62 x 2 translation/v1/batchingFunction
translation/v2/batchingFunction
app.js
app.js
17:117 (100%)
17:117 (100%)
view
56 x 2 eventbridge/3-multi-bucket
eventbridge/4-multi-multi
template.yaml
template.yaml
14:77 (57%)
14:77 (43%)
view
48 x 2 decoupled-docrepo/analyzers/analyzeImage
decoupled-docrepo/converters/processPDF
eventbridge.js
eventbridge.js
16:80 (100%)
16:80 (100%)
view
48 x 2 decoupled-docrepo/analyzers/analyzeImage
decoupled-docrepo/analyzers/analyzeText
eventbridge.js
eventbridge.js
16:80 (100%)
16:80 (100%)
view
48 x 2 decoupled-docrepo/analyzers/analyzeText
decoupled-docrepo/converters/processDOCX
eventbridge.js
eventbridge.js
16:80 (100%)
16:80 (100%)
view
48 x 2 decoupled-docrepo/analyzers/analyzeImage
decoupled-docrepo/converters/processDOCX
eventbridge.js
eventbridge.js
16:80 (100%)
16:80 (100%)
view
48 x 2 decoupled-docrepo/analyzers/analyzeText
decoupled-docrepo/converters/processPDF
eventbridge.js
eventbridge.js
16:80 (100%)
16:80 (100%)
view
48 x 2 decoupled-docrepo/converters/processDOCX
decoupled-docrepo/converters/processPDF
eventbridge.js
eventbridge.js
16:80 (100%)
16:80 (100%)
view
46 x 2 transcription
videos-samples/2-transcribe
template.yaml
template.yaml
45:91 (51%)
45:91 (54%)
view
39 x 2 eventbridge/2-existing-bucket
eventbridge/4-multi-multi
template.yaml
template.yaml
16:58 (47%)
31:73 (30%)
view
39 x 2 eventbridge/1-integration
eventbridge/3-multi-bucket
template.yaml
template.yaml
21:63 (45%)
31:73 (39%)
view
39 x 2 eventbridge/1-integration
eventbridge/2-existing-bucket
template.yaml
template.yaml
21:63 (45%)
16:58 (47%)
view
39 x 2 eventbridge/2-existing-bucket
eventbridge/3-multi-bucket
template.yaml
template.yaml
16:58 (47%)
31:73 (39%)
view
39 x 2 eventbridge/1-integration
eventbridge/4-multi-multi
template.yaml
template.yaml
21:63 (45%)
31:73 (30%)
view
36 x 2 videos-samples/1-translation
videos-samples/1-translation
template-v1.yaml
template-v2.yaml
19:54 (70%)
27:64 (42%)
view
36 x 2 translation/v1
videos-samples/1-translation
template.yaml
template-v1.yaml
29:66 (39%)
19:54 (70%)
view
32 x 2 decoupled-docrepo/converters/processDOCX
decoupled-docrepo/converters/processPDF
batching.js
batching.js
17:77 (100%)
17:77 (100%)
view
29 x 2 videos-samples/4-workflow/processFunction
workflow/StartExecutionFunction
test.js
test.js
18:50 (100%)
18:50 (100%)
view
27 x 2 transcription
videos-samples/2-transcribe
template.yaml
template.yaml
10:39 (30%)
10:39 (31%)
view
Duplicated Units
The list of top 3 duplicated units.
See data for all 3 unit duplicates...
Size#FoldersFilesLinesCode
11 x 2 videos-samples/3-dynamodb/importFunction
videos-samples/1-translation/translatorFunction
s3.js
s3.js
53:64 
53:64 
view
11 x 2 videos-samples/1-translation/batchingFunction
videos-samples/2-transcribe/sentimentFunction
s3.js
s3.js
53:64 
53:64 
view
10 x 4 videos-samples/3-dynamodb/importFunction
videos-samples/1-translation/translatorFunction
videos-samples/1-translation/batchingFunction
videos-samples/2-transcribe/sentimentFunction
s3.js
s3.js
s3.js
s3.js
29:39 
29:39 
29:39 
29:39 
view