Skip to content

Commit

Permalink
Merge pull request #539 from SourcePointUSA/investigate_perf_issue
Browse files Browse the repository at this point in the history
DIA-3326 improve network calls caching and instrumentation
  • Loading branch information
andresilveirah authored Jan 10, 2024
2 parents f087b14 + b9514e6 commit c2284e3
Show file tree
Hide file tree
Showing 10 changed files with 360 additions and 227 deletions.
164 changes: 143 additions & 21 deletions ConsentViewController/Classes/OSLogger.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,46 +12,168 @@ protocol SPLogger {
func log(_ message: String)
func debug(_ message: String)
func error(_ message: String)
func begin(_ name: StaticString)
func end(_ name: StaticString)
func end(_ name: StaticString, _ args: CVarArg...)
func event(_ name: StaticString)
func event(_ name: StaticString, _ args: CVarArg...)
}

enum SPLogLevel: String {
case debug
case prod
}

struct OSLogger: SPLogger {
static let category = "SPSDK"
static var standard: OSLogger { OSLogger() }
@available(iOS 12.0, tvOS 12.0, *)
struct ModernishLogger: SPLogger {
let logger = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: .pointsOfInterest)

func begin(_ name: StaticString) {
os_signpost(.begin, log: logger, name: name)
}

func end(_ name: StaticString) {
os_signpost(.end, log: logger, name: name)
}

func end(_ name: StaticString, _ args: CVarArg...) {
os_signpost(.event, log: logger, name: name, "%@", args)
}

private init () {}
func event(_ name: StaticString) {
os_signpost(.event, log: logger, name: name)
}

let consentLog = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: OSLogger.category)

let level = SPLogLevel(rawValue:
Bundle.main.object(forInfoDictionaryKey: "SPLogLevel") as? String ??
Bundle.framework.object(forInfoDictionaryKey: "SPLogLevel") as? String ??
"prod"
)
func event(_ name: StaticString, _ args: CVarArg...) {
os_signpost(.event, log: logger, name: name, "%@", args)
}

func log(_ message: String) {
if level == .debug {
osLog("%s", message)
}
osLog("%s", message)
}

func debug(_ message: String) {
if level == .debug {
osLog("%s", message)
}
osLog("%s", type: .debug, message)
}

func error(_ message: String) {
osLog("%s", type: .error, message)
}

private func osLog(_ message: StaticString, type: OSLogType? = .default, _ args: CVarArg) {
os_log(message, log: logger, type: type ?? .default, args)
}
}

struct LegacyLogger: SPLogger {
let logger = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: "SPSDK")

func begin(_ name: StaticString) {
log("Begin: \(name)")
}

func end(_ name: StaticString) {
log("End: \(name)")
}

func end(_ name: StaticString, _ args: CVarArg...) {
log("End: \(name) \(String(format: "%@", args))")
}

func event(_ name: StaticString) {
log("Event: \(name)")
}

func event(_ name: StaticString, _ args: CVarArg...) {
log("Event: \(name) \(String(format: "%@", args))")
}

func log(_ message: String) {
osLog("%s", message)
}

func debug(_ message: String) {
osLog("%s", type: .debug, message)
}

func error(_ message: String) {
if level == .debug {
osLog("%s", message)
osLog("%s", type: .error, message)
}

private func osLog(_ message: StaticString, type: OSLogType? = .default, _ args: CVarArg) {
os_log(message, log: logger, type: type ?? .default, args)
}
}

struct NoopLogger: SPLogger {
func begin(_ name: StaticString) {}

func end(_ name: StaticString) {}

func end(_ name: StaticString, _ args: CVarArg...) {}

func event(_ name: StaticString) {}

func event(_ name: StaticString, _ args: CVarArg...) {}

func log(_ message: String) {}

func debug(_ message: String) {}

func error(_ message: String) {}
}

struct OSLogger: SPLogger {
static let category = "SPSDK"
static var standard: OSLogger { OSLogger() }
private let logger: SPLogger

static var defaultLevel: SPLogLevel {
SPLogLevel(rawValue:
Bundle.main.object(forInfoDictionaryKey: "SPLogLevel") as? String ??
Bundle.framework.object(forInfoDictionaryKey: "SPLogLevel") as? String ??
"prod"
) ?? .prod}

private init (level: SPLogLevel? = Self.defaultLevel) {
if level == .prod {
logger = NoopLogger()
} else if #available(iOS 12.0, tvOS 12.0, *) {
logger = ModernishLogger()
} else {
logger = LegacyLogger()
}
}

private func osLog(_ message: StaticString, _ args: CVarArg) {
os_log(message, log: consentLog, type: .default, args)
func begin(_ name: StaticString) {
logger.begin(name)
}

func end(_ name: StaticString) {
logger.end(name)
}

func end(_ name: StaticString, _ args: CVarArg...) {
logger.end(name, args)
}

func event(_ name: StaticString) {
logger.event(name)
}

func event(_ name: StaticString, _ args: CVarArg...) {
logger.event(name, args)
}

func log(_ message: String) {
logger.log(message)
}

func debug(_ message: String) {
logger.debug(message)
}

func error(_ message: String) {
logger.error(message)
}
}
Loading

0 comments on commit c2284e3

Please sign in to comment.