Files
firebase-ios-sdk/Metrics/Sources/MetricsLib/UploadMetrics.swift
T
Corrob 8ab90e5145 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
2019-06-24 17:38:42 -07:00

77 lines
2.7 KiB
Swift

/*
* Copyright 2019 Google
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Foundation
/// A set of SDK targets for which to collect code coverage.
let TARGETS_TO_COLLECT: Set = [
"Auth_Example_iOS.app",
"Core_Example_iOS.app",
"Database_Example_iOS.app",
"DynamicLinks_Example_iOS.app",
"InstanceID_Example_iOS.app",
"Messaging_Example_iOS.app",
"Storage_Example_iOS.app",
// TODO(Corrob): Add support for Firestore, Functions, and InAppMessaging.
]
/// Represents a set of metric table updates to upload to the database.
public struct UploadMetrics: Encodable {
public var tables: [TableUpdate]
public init(tables: [TableUpdate]) {
self.tables = tables
}
/// Converts the metric table updates to a JSON format this is compatible with the Java uploader.
public func json() throws -> String {
let json = try JSONEncoder().encode(self)
return String(data: json, encoding: .utf8)!
}
}
/// An update to a metrics table with the new data to uplaod to the database.
public struct TableUpdate: Encodable {
public var table_name: String
public var column_names: [String]
public var replace_measurements: [[String]]
public init(table_name: String, column_names: [String], replace_measurements: [[String]]) {
self.table_name = table_name
self.column_names = column_names
self.replace_measurements = replace_measurements
}
/// Creates a table update for code coverage by parsing a coverage report from XCov.
public static func createFrom(coverage: CoverageReport, pullRequest: Int, currentTime: String) -> TableUpdate {
var metrics = [[String]]()
for target in coverage.targets {
if TARGETS_TO_COLLECT.contains(target.name) {
var row = [String]()
row.append(target.name.components(separatedBy: "_")[0])
row.append(String(pullRequest))
row.append(String(target.coverage))
row.append(currentTime)
metrics.append(row)
} else {
print("WARNING - target \(target.name) is being filtered out from coverage collection. Skipping...")
}
}
let columnNames = ["product_name", "pull_request_id", "coverage_total", "collection_time"]
return TableUpdate(table_name: "IosCodeCoverage", column_names: columnNames, replace_measurements: metrics)
}
}