Skip to content

Commit 8ab90e5

Browse files
authored
Update the coverage collection to point to the prod database (#3240)
* Update the coverage collection to point to the prod database * Fix formatting * Misc fixes * Update message
1 parent 5ecd9f0 commit 8ab90e5

File tree

5 files changed

+46
-37
lines changed

5 files changed

+46
-37
lines changed

Metrics/Sources/Metrics/main.swift

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,15 @@ let coveragePath = flags.string("c",
2525
let pullRequest = flags.int("p",
2626
"pull_request",
2727
description: "Required - The number of the pull request that corresponds to this coverage run.")
28+
29+
/// Returns the current UTC time in a string format.
30+
func currentTime() -> String {
31+
let formatter = DateFormatter()
32+
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
33+
formatter.timeZone = TimeZone(identifier: "UTC")
34+
return formatter.string(from: Date())
35+
}
36+
2837
do {
2938
try flags.parse()
3039
if !coveragePath.wasSet {
@@ -35,13 +44,11 @@ do {
3544
print("Please specify the corresponding pull request number. -p or --pull_request")
3645
exit(1)
3746
}
38-
let pullRequestTable = TableUpdate(table_name: "PullRequests",
39-
column_names: ["pull_request_id"],
40-
replace_measurements: [[Double(pullRequest.value!)]])
4147
let coverageReport = try CoverageReport.load(path: coveragePath.value!)
4248
let coverageTable = TableUpdate.createFrom(coverage: coverageReport,
43-
pullRequest: pullRequest.value!)
44-
let metrics = UploadMetrics(tables: [pullRequestTable, coverageTable])
49+
pullRequest: pullRequest.value!,
50+
currentTime: currentTime())
51+
let metrics = UploadMetrics(tables: [coverageTable])
4552
try Uploader.upload(metrics: metrics)
4653
} catch {
4754
print("Error occurred: \(error)")

Metrics/Sources/MetricsLib/UploadMetrics.swift

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@
1616

1717
import Foundation
1818

19-
/// A mapping of SDKs to an ID that will represent that SDK in the database.
20-
let TARGET_TO_SDK_INDEX = [
21-
"Auth_Example_iOS.app": 0.0,
22-
"Core_Example_iOS.app": 1.0,
23-
"Database_Example_iOS.app": 2.0,
24-
"DynamicLinks_Example_iOS.app": 3.0,
25-
"InstanceID_Example_iOS.app": 4.0,
26-
"Messaging_Example_iOS.app": 5.0,
27-
"Storage_Example_iOS.app": 6.0,
19+
/// A set of SDK targets for which to collect code coverage.
20+
let TARGETS_TO_COLLECT: Set = [
21+
"Auth_Example_iOS.app",
22+
"Core_Example_iOS.app",
23+
"Database_Example_iOS.app",
24+
"DynamicLinks_Example_iOS.app",
25+
"InstanceID_Example_iOS.app",
26+
"Messaging_Example_iOS.app",
27+
"Storage_Example_iOS.app",
2828
// TODO(Corrob): Add support for Firestore, Functions, and InAppMessaging.
2929
]
3030

@@ -47,30 +47,30 @@ public struct UploadMetrics: Encodable {
4747
public struct TableUpdate: Encodable {
4848
public var table_name: String
4949
public var column_names: [String]
50-
public var replace_measurements: [[Double]]
50+
public var replace_measurements: [[String]]
5151

52-
public init(table_name: String, column_names: [String], replace_measurements: [[Double]]) {
52+
public init(table_name: String, column_names: [String], replace_measurements: [[String]]) {
5353
self.table_name = table_name
5454
self.column_names = column_names
5555
self.replace_measurements = replace_measurements
5656
}
5757

5858
/// Creates a table update for code coverage by parsing a coverage report from XCov.
59-
public static func createFrom(coverage: CoverageReport, pullRequest: Int) -> TableUpdate {
60-
var metrics = [[Double]]()
59+
public static func createFrom(coverage: CoverageReport, pullRequest: Int, currentTime: String) -> TableUpdate {
60+
var metrics = [[String]]()
6161
for target in coverage.targets {
62-
let sdkKey = TARGET_TO_SDK_INDEX[target.name]
63-
if sdkKey == nil {
64-
print("WARNING - target \(target.name) has no mapping to an SDK id. Skipping...")
65-
} else {
66-
var row = [Double]()
67-
row.append(Double(pullRequest))
68-
row.append(sdkKey!)
69-
row.append(target.coverage)
62+
if TARGETS_TO_COLLECT.contains(target.name) {
63+
var row = [String]()
64+
row.append(target.name.components(separatedBy: "_")[0])
65+
row.append(String(pullRequest))
66+
row.append(String(target.coverage))
67+
row.append(currentTime)
7068
metrics.append(row)
69+
} else {
70+
print("WARNING - target \(target.name) is being filtered out from coverage collection. Skipping...")
7171
}
7272
}
73-
let columnNames = ["pull_request_id", "sdk_id", "coverage_percent"]
74-
return TableUpdate(table_name: "Coverage1", column_names: columnNames, replace_measurements: metrics)
73+
let columnNames = ["product_name", "pull_request_id", "coverage_total", "collection_time"]
74+
return TableUpdate(table_name: "IosCodeCoverage", column_names: columnNames, replace_measurements: metrics)
7575
}
7676
}

Metrics/Tests/MetricsTests/UploadMetricsTests.swift

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,35 +18,37 @@ import MetricsLib
1818
import XCTest
1919

2020
let PULL_REQUEST = 777
21+
let CURRENT_TIME = "2019-06-21 11:11:11"
22+
let TABLE_NAME = "IosCodeCoverage"
2123

2224
final class UploadMetricsTests: XCTestCase {
2325
func testShouldCreateTableUpdateFromCoverageReport() {
2426
let target_one = Target(name: "Auth_Example_iOS.app", coverage: 0.1)
2527
let target_two = Target(name: "Core_Example_iOS.app", coverage: 0.2)
2628
let report = CoverageReport(targets: [target_one, target_two], coverage: 0.15)
27-
let metricsUpdate = TableUpdate.createFrom(coverage: report, pullRequest: PULL_REQUEST)
28-
XCTAssertEqual(metricsUpdate.table_name, "Coverage1")
29+
let metricsUpdate = TableUpdate.createFrom(coverage: report, pullRequest: PULL_REQUEST, currentTime: CURRENT_TIME)
30+
XCTAssertEqual(metricsUpdate.table_name, TABLE_NAME)
2931
XCTAssertEqual(metricsUpdate.replace_measurements.count, 2)
3032
XCTAssertEqual(metricsUpdate.replace_measurements[0],
31-
[Double(PULL_REQUEST), 0, target_one.coverage])
33+
["Auth", String(PULL_REQUEST), String(target_one.coverage), CURRENT_TIME])
3234
XCTAssertEqual(metricsUpdate.replace_measurements[1],
33-
[Double(PULL_REQUEST), 1, target_two.coverage])
35+
["Core", String(PULL_REQUEST), String(target_two.coverage), CURRENT_TIME])
3436
}
3537

3638
func testShouldIgnoreUnkownTargets() {
3739
let target = Target(name: "Unknown_Target", coverage: 0.3)
3840
let report = CoverageReport(targets: [target], coverage: 0.15)
39-
let metrics = TableUpdate.createFrom(coverage: report, pullRequest: PULL_REQUEST)
40-
XCTAssertEqual(metrics.table_name, "Coverage1")
41+
let metrics = TableUpdate.createFrom(coverage: report, pullRequest: PULL_REQUEST, currentTime: CURRENT_TIME)
42+
XCTAssertEqual(metrics.table_name, TABLE_NAME)
4143
XCTAssertEqual(metrics.replace_measurements.count, 0)
4244
}
4345

4446
func testShouldConvertToJson() throws {
4547
let table = TableUpdate(table_name: "name",
4648
column_names: ["col"],
47-
replace_measurements: [[0], [2]])
49+
replace_measurements: [["0"], ["test"]])
4850
let metrics = UploadMetrics(tables: [table])
4951
let json = try metrics.json()
50-
XCTAssertEqual(json, "{\"tables\":[{\"replace_measurements\":[[0],[2]],\"column_names\":[\"col\"],\"table_name\":\"name\"}]}")
52+
XCTAssertEqual(json, "{\"tables\":[{\"replace_measurements\":[[\"0\"],[\"test\"]],\"column_names\":[\"col\"],\"table_name\":\"name\"}]}")
5153
}
5254
}

scripts/install_prereqs.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ function install_secrets() {
2626
# requests from forks. See
2727
# https://docs.travis-ci.com/user/pull-requests#pull-requests-and-security-restrictions
2828
if [[ ! -z $encrypted_d6a88994a5ab_key ]]; then
29-
openssl aes-256-cbc -K $encrypted_d6a88994a5ab_key -iv $encrypted_d6a88994a5ab_iv \
29+
openssl aes-256-cbc -K $encrypted_44810a80e6cc_key -iv $encrypted_44810a80e6cc_iv \
3030
-in scripts/travis-encrypted/Secrets.tar.enc \
3131
-out scripts/travis-encrypted/Secrets.tar -d
3232

-34 KB
Binary file not shown.

0 commit comments

Comments
 (0)