Skip to content

Commit e63e7c4

Browse files
authored
Merge pull request #440 from codacy/feature/upload-batch-size-param-CY-5727
feature: add upload batch size flag CY-5727
2 parents db21143 + 6ae0f71 commit e63e7c4

7 files changed

Lines changed: 34 additions & 25 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ Found [Clone] 7 duplicated lines with 10 tokens:
205205
* `--skip-commit-uuid-validation` [default: false] - Force using a commit UUID even if it doesn't belong to the current git branch.
206206
* `--skip-uncommitted-files-check` [default: false] - Skip check for uncommitted files in the analysis directory
207207
* `--upload` [default: false] - Request to push results to Codacy
208+
* `--upload-batch-size` [default: 50000] - Batch size for upload of results
208209
* `--skip-ssl-verification` [default: false] - Skip the SSL certificate verification when communicating with the Codacy API
209210
* `--parallel` [default: 2] - Number of tools to run in parallel
210211
* `--max-allowed-issues` [default: 0] - Maximum number of issues allowed for the analysis to succeed

cli/src/main/scala/com/codacy/analysis/cli/command/AnalyseCommand.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,11 @@ object AnalyseCommand {
6969
configuration.analysis,
7070
toolSelector)
7171
val uploaderOpt: Either[String, Option[ResultsUploader]] =
72-
ResultsUploader(codacyClientOpt, configuration.upload.upload, configuration.upload.commitUuid)
72+
ResultsUploader(
73+
codacyClientOpt,
74+
configuration.upload.upload,
75+
configuration.upload.commitUuid,
76+
configuration.upload.batchSize)
7377

7478
new AnalyseCommand(analyze, configuration, analyseExecutor, uploaderOpt)
7579
}

cli/src/main/scala/com/codacy/analysis/cli/command/CLIApp.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import com.codacy.analysis.cli.analysis.ExitStatus
77
import com.codacy.analysis.cli.command.ArgumentParsers._
88
import com.codacy.analysis.cli.formatter.Formatter
99
import com.codacy.analysis.core.analysis.Analyser
10-
import com.codacy.analysis.core.clients.{ProjectName, UserName, OrganizationProvider}
10+
import com.codacy.analysis.core.clients.{OrganizationProvider, ProjectName, UserName}
11+
import com.codacy.analysis.core.configuration.AppConfiguration
1112
import com.codacy.analysis.core.git.Commit
1213

1314
import scala.concurrent.duration.Duration
@@ -148,6 +149,8 @@ final case class Analyze(
148149
skipUncommittedFilesCheck: Int @@ Counter = Tag.of(0),
149150
@ExtraName("u") @ValueDescription("If the results should be uploaded to the API")
150151
upload: Int @@ Counter = Tag.of(0),
152+
@ValueDescription(s"Batch size for upload of results. If not set defaults to ${AppConfiguration.batchSize}")
153+
uploadBatchSize: Int = AppConfiguration.batchSize,
151154
@ExtraName("i") @ValueDescription(
152155
"[default: false] - Skip the SSL certificate verification when communicating with the Codacy API")
153156
skipSslVerification: Int @@ Counter = Tag.of(0),

cli/src/main/scala/com/codacy/analysis/cli/configuration/CLIConfiguration.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ object CLIConfiguration {
6666
}
6767
}
6868

69-
final case class Upload(commitUuid: Option[Commit.Uuid], upload: Boolean)
69+
final case class Upload(commitUuid: Option[Commit.Uuid], upload: Boolean, batchSize: Int)
7070
final case class Result(maxAllowedIssues: Int, failIfIncomplete: Boolean)
7171

7272
final case class Output(format: String, file: Option[File], ghCodeScanningCompat: Boolean)
@@ -215,7 +215,7 @@ object CLIConfiguration {
215215
remoteProjectConfiguration,
216216
analyze.tmpDirectory,
217217
analyze.maxToolMemory)
218-
val uploadConfiguration = Upload(commitUuid, analyze.uploadValue)
218+
val uploadConfiguration = Upload(commitUuid, analyze.uploadValue, analyze.uploadBatchSize)
219219
val resultConfiguration = Result(analyze.maxAllowedIssues, analyze.failIfIncompleteValue)
220220

221221
CLIConfiguration(analysisConfiguration, uploadConfiguration, resultConfiguration)

cli/src/test/scala/com/codacy/analysis/cli/configuration/CLIConfigurationSpec.scala

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class CLIConfigurationSpec extends Specification with NoLanguageFeatures {
4040
}
4141
private val toolInput = Option("hey! i'm a tool!")
4242
private val commitUuid = Option(Commit.Uuid("uuid"))
43+
private val batchSize = 5
4344

4445
private val defaultAnalyse = Analyze(
4546
options = CommonOptions(),
@@ -49,7 +50,8 @@ class CLIConfigurationSpec extends Specification with NoLanguageFeatures {
4950
format = Json.name,
5051
toolTimeout = Option.empty,
5152
commitUuid = commitUuid,
52-
extras = ExtraOptions(analyser = Analyser.defaultAnalyser.name))
53+
extras = ExtraOptions(analyser = Analyser.defaultAnalyser.name),
54+
uploadBatchSize = batchSize)
5355
private val defaultEnvironment = new Environment(Map.empty)
5456
private val httpHelper = new HttpHelper(remoteUrl, Map.empty, false)
5557

@@ -85,7 +87,8 @@ class CLIConfigurationSpec extends Specification with NoLanguageFeatures {
8587
allowNetwork = Tag.of(1),
8688
upload = Tag.of(1),
8789
maxAllowedIssues = 5,
88-
failIfIncomplete = Tag.of(1))
90+
failIfIncomplete = Tag.of(1),
91+
uploadBatchSize = batchSize)
8992

9093
val expectedConfiguration = CLIConfiguration(
9194
analysis = CLIConfiguration.Analysis(
@@ -106,7 +109,7 @@ class CLIConfigurationSpec extends Specification with NoLanguageFeatures {
106109
extraToolConfigurations = Option.empty,
107110
extensionsByLanguage = Map.empty),
108111
maxToolMemory = Some("3000000000")),
109-
upload = CLIConfiguration.Upload(commitUuid = commitUuid, upload = true),
112+
upload = CLIConfiguration.Upload(commitUuid = commitUuid, upload = true, batchSize = batchSize),
110113
result = CLIConfiguration.Result(maxAllowedIssues = 5, failIfIncomplete = true))
111114

112115
val actualConfiguration =
@@ -169,7 +172,7 @@ class CLIConfigurationSpec extends Specification with NoLanguageFeatures {
169172
extraToolConfigurations = Option.empty,
170173
extensionsByLanguage = Map.empty),
171174
maxToolMemory = Some("3000000000")),
172-
upload = CLIConfiguration.Upload(commitUuid = commitUuid, upload = false),
175+
upload = CLIConfiguration.Upload(commitUuid = commitUuid, upload = false, batchSize = batchSize),
173176
result = CLIConfiguration.Result(maxAllowedIssues = 0, failIfIncomplete = false))
174177

175178
val actualConfiguration =
@@ -221,7 +224,7 @@ class CLIConfigurationSpec extends Specification with NoLanguageFeatures {
221224
.Extra(baseSubDir = engineConfig.baseSubDir, extraValues = engineConfig.extraValues))),
222225
extensionsByLanguage = Map(Languages.Scala -> Set(".scala", ".alacs"))),
223226
maxToolMemory = Some("3000000000")),
224-
upload = CLIConfiguration.Upload(commitUuid = commitUuid, upload = false),
227+
upload = CLIConfiguration.Upload(commitUuid = commitUuid, upload = false, batchSize = batchSize),
225228
result = CLIConfiguration.Result(maxAllowedIssues = 0, failIfIncomplete = false))
226229

227230
val actualConfiguration =
@@ -254,7 +257,7 @@ class CLIConfigurationSpec extends Specification with NoLanguageFeatures {
254257
extraToolConfigurations = Option.empty,
255258
extensionsByLanguage = Map.empty),
256259
maxToolMemory = Some("3000000000")),
257-
upload = CLIConfiguration.Upload(commitUuid = commitUuid, upload = false),
260+
upload = CLIConfiguration.Upload(commitUuid = commitUuid, upload = false, batchSize = batchSize),
258261
result = CLIConfiguration.Result(maxAllowedIssues = 0, failIfIncomplete = false))
259262

260263
val actualConfiguration =
@@ -334,7 +337,7 @@ class CLIConfigurationSpec extends Specification with NoLanguageFeatures {
334337
.Extra(baseSubDir = engineConfig.baseSubDir, extraValues = engineConfig.extraValues))),
335338
extensionsByLanguage = Map(Languages.Scala -> Set(".sc"))),
336339
maxToolMemory = Some("3000000000")),
337-
upload = CLIConfiguration.Upload(commitUuid = commitUuid, upload = false),
340+
upload = CLIConfiguration.Upload(commitUuid = commitUuid, upload = false, batchSize = batchSize),
338341
result = CLIConfiguration.Result(maxAllowedIssues = 0, failIfIncomplete = false))
339342

340343
val actualConfiguration =

core/src/main/scala/com/codacy/analysis/core/upload/ResultsUploader.scala

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,8 @@ object ResultsUploader {
2323

2424
private val logger: Logger = getLogger
2525

26-
def apply(codacyClientOpt: Option[CodacyClient],
27-
upload: Boolean,
28-
commitUuidOpt: Option[Commit.Uuid],
29-
batchSize: Option[Int] = Option.empty[Int])(implicit
30-
context: ExecutionContext): Either[String, Option[ResultsUploader]] = {
26+
def apply(codacyClientOpt: Option[CodacyClient], upload: Boolean, commitUuidOpt: Option[Commit.Uuid], batchSize: Int)(
27+
implicit context: ExecutionContext): Either[String, Option[ResultsUploader]] = {
3128
if (upload) {
3229
for {
3330
codacyClient <- codacyClientOpt.toRight("No credentials found.")
@@ -40,17 +37,17 @@ object ResultsUploader {
4037
}
4138
}
4239

43-
class ResultsUploader private (commitUuid: Commit.Uuid, codacyClient: CodacyClient, batchSizeOpt: Option[Int])(implicit
40+
class ResultsUploader private (commitUuid: Commit.Uuid, codacyClient: CodacyClient, uploadBatchSize: Int)(implicit
4441
context: ExecutionContext) {
4542

4643
private val logger: Logger = getLogger
4744

48-
private val batchSize: Int = batchSizeOpt.map {
45+
private val batchSize: Int = uploadBatchSize match {
4946
case size if size > 0 => size
5047
case size =>
5148
logger.warn(s"Illegal value for upload batch size ($size), using default batch size")
5249
ResultsUploader.defaultBatchSize
53-
}.getOrElse(ResultsUploader.defaultBatchSize)
50+
}
5451

5552
def sendResults(toolResults: Seq[ResultsUploader.ToolResults],
5653
metricsResults: Seq[MetricsResult],

core/src/test/scala/com.codacy.analysis.core/upload/ResultsUploaderSpec.scala

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,23 +32,24 @@ class ResultsUploaderSpec extends Specification with NoLanguageFeatures with Moc
3232
private val otherTool = "rubocop"
3333
private val otherFilenames = Set(Paths.get("src/things/Clazz.scala"))
3434
private val batchSize = 10
35+
private val defaultBatchSize = 50000
3536

3637
"ResultsUploader" should {
3738

3839
"not create the uploader if upload is not requested" in {
3940
val codacyClient = mock[CodacyClient]
40-
ResultsUploader(Option(codacyClient), upload = false, Option(commitUuid), Option(batchSize)) must beRight(
41+
ResultsUploader(Option(codacyClient), upload = false, Option(commitUuid), batchSize) must beRight(
4142
Option.empty[ResultsUploader])
4243
}
4344

4445
"fail to create the uploader if the client is not passed" in {
45-
ResultsUploader(Option.empty[CodacyClient], upload = true, Option(commitUuid), Option(batchSize)) must beLeft(
46+
ResultsUploader(Option.empty[CodacyClient], upload = true, Option(commitUuid), batchSize) must beLeft(
4647
"No credentials found.")
4748
}
4849

4950
"fail to create the uploader if the commit is not passed" in {
5051
val codacyClient = mock[CodacyClient]
51-
ResultsUploader(Option(codacyClient), upload = true, Option.empty[Commit.Uuid], Option(batchSize)) must beLeft(
52+
ResultsUploader(Option(codacyClient), upload = true, Option.empty[Commit.Uuid], batchSize) must beLeft(
5253
"No commit found.")
5354
}
5455

@@ -87,7 +88,7 @@ class ResultsUploaderSpec extends Specification with NoLanguageFeatures with Moc
8788
.thenReturn(Future.successful(().asRight[String]))
8889

8990
val uploader: ResultsUploader =
90-
ResultsUploader(Option(codacyClient), upload = true, Some(commitUuid), None).right.get.get
91+
ResultsUploader(Option(codacyClient), upload = true, Some(commitUuid), defaultBatchSize).right.get.get
9192

9293
def testFileMetrics(i: Int) = {
9394
MetricsAnalysis.FileResults(
@@ -145,7 +146,7 @@ class ResultsUploaderSpec extends Specification with NoLanguageFeatures with Moc
145146
.thenReturn(Future.successful(().asRight[String]))
146147

147148
val uploader: ResultsUploader =
148-
ResultsUploader(Option(codacyClient), upload = true, Some(commitUuid), None).right.get.get
149+
ResultsUploader(Option(codacyClient), upload = true, Some(commitUuid), defaultBatchSize).right.get.get
149150

150151
def testClone(i: Int) = {
151152
DuplicationClone("", i, i, Set.empty)
@@ -184,7 +185,7 @@ class ResultsUploaderSpec extends Specification with NoLanguageFeatures with Moc
184185
}
185186
val codacyClient = mock[CodacyClient]
186187
val uploader: ResultsUploader =
187-
ResultsUploader(Option(codacyClient), upload = true, Option(commitUuid), Option(batchSize)).right.get.get
188+
ResultsUploader(Option(codacyClient), upload = true, Option(commitUuid), batchSize).right.get.get
188189

189190
when(
190191
codacyClient.sendRemoteIssues(

0 commit comments

Comments
 (0)