COVIDSafe code from version 2.0 (#37)

This commit is contained in:
COVIDSafe Support 2020-12-19 16:13:44 +11:00 committed by GitHub
parent cf93ea43c0
commit 8b75c1fc6f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
55 changed files with 4624 additions and 1117 deletions

View file

@ -0,0 +1,96 @@
//
// Logger.swift
//
// Copyright 2020 VMware, Inc.
// SPDX-License-Identifier: MIT
//
import Foundation
import UIKit
import os
protocol SensorLogger {
init(subsystem: String, category: String)
func log(_ level: SensorLoggerLevel, _ message: String)
func debug(_ message: String)
func info(_ message: String)
func fault(_ message: String)
}
enum SensorLoggerLevel: String {
case debug, info, fault
}
class ConcreteSensorLogger: NSObject, SensorLogger {
private let subsystem: String
private let category: String
private let dateFormatter = DateFormatter()
private let log: OSLog?
private static let logFile = TextFile(filename: "log.txt")
required init(subsystem: String, category: String) {
self.subsystem = subsystem
self.category = category
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
if #available(iOS 10.0, *) {
log = OSLog(subsystem: subsystem, category: category)
} else {
log = nil
}
}
private func suppress(_ level: SensorLoggerLevel) -> Bool {
switch level {
case .debug:
return (BLESensorConfiguration.logLevel == .info || BLESensorConfiguration.logLevel == .fault);
case .info:
return (BLESensorConfiguration.logLevel == .fault);
default:
return false;
}
}
func log(_ level: SensorLoggerLevel, _ message: String) {
guard !suppress(level) else {
return
}
// Write to unified os log if available, else print to console
let timestamp = dateFormatter.string(from: Date())
let csvMessage = message.replacingOccurrences(of: "\"", with: "'")
let quotedMessage = (message.contains(",") ? "\"" + csvMessage + "\"" : csvMessage)
let entry = timestamp + "," + level.rawValue + "," + subsystem + "," + category + "," + quotedMessage
ConcreteSensorLogger.logFile.write(entry)
guard let log = log else {
print(entry)
return
}
if #available(iOS 10.0, *) {
switch (level) {
case .debug:
os_log("%s", log: log, type: .debug, message)
case .info:
os_log("%s", log: log, type: .info, message)
case .fault:
os_log("%s", log: log, type: .fault, message)
}
return
}
}
func debug(_ message: String) {
log(.debug, message)
}
func info(_ message: String) {
log(.debug, message)
}
func fault(_ message: String) {
log(.debug, message)
}
}