// // VPNLogger.swift // Privado // // Created by Juraldinio on 11/20/19. // Copyright © 2019 Omicronmedia. All rights reserved. // import Foundation final class VPNLogger: VPNCometLoggerProtocol { var type: CometLoggerType = .plain var isActive = true private enum Constants { static let tag = "VPN" } func vpnLog(type: String, error: Error) { self.save(tag: Constants.tag, label: type, payload: error.localizedDescription) } func vpnEvent(type: String, message: String, secured: String?) { self.save(tag: Constants.tag, label: type, payload: message + (secured ?? "")) } func vpnEvent(name: String, attributes: [String: Any]?, secured: [String: Any]?) { let payloadDict = (attributes ?? [:]).reduce(secured ?? [:]) { acc, elem in var acc = acc acc[elem.0] = elem.1 return acc } let payload = payloadDict.compactMap { (key, value) -> String? in guard let dic = value as? [String: Any] else { return "\(key) = \(value)" } return "[" + dic.compactMap { (ikey, ivalue) -> String? in return "\(ikey) = \(ivalue)" }.joined(separator: "; ") + "]" }.joined(separator: "; ") self.save(tag: Constants.tag, label: name, payload: payload) } // MARK: - Private private func save(tag: String, label: String, payload: String) { guard let coordinator = DatabaseAnswer.commonDB else { return } let context = coordinator.createContext() let log: LogRecord = context.create() log.uuid = UUID().uuidString log.tag = tag log.label = label log.date = Date() log.payload = payload context.save() coordinator.save() } }