70 lines
1.9 KiB
Swift
70 lines
1.9 KiB
Swift
//
|
|
// 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()
|
|
}
|
|
|
|
}
|