Files
steipete--codexbar/Sources/CodexBarCore/Providers/OpenCode/OpenCodeUsageSnapshot.swift
T
2026-07-13 12:22:33 +08:00

60 lines
2.0 KiB
Swift

import Foundation
public struct OpenCodeUsageSnapshot: Sendable {
public let rollingUsagePercent: Double
public let weeklyUsagePercent: Double
public let rollingResetInSec: Int
public let weeklyResetInSec: Int
public let renewsAt: Date?
public let updatedAt: Date
public init(
rollingUsagePercent: Double,
weeklyUsagePercent: Double,
rollingResetInSec: Int,
weeklyResetInSec: Int,
renewsAt: Date? = nil,
updatedAt: Date)
{
self.rollingUsagePercent = rollingUsagePercent
self.weeklyUsagePercent = weeklyUsagePercent
self.rollingResetInSec = rollingResetInSec
self.weeklyResetInSec = weeklyResetInSec
self.renewsAt = renewsAt
self.updatedAt = updatedAt
}
public func toUsageSnapshot() -> UsageSnapshot {
let rollingReset = self.updatedAt.addingTimeInterval(TimeInterval(self.rollingResetInSec))
let weeklyReset = self.updatedAt.addingTimeInterval(TimeInterval(self.weeklyResetInSec))
let primary = RateWindow(
usedPercent: self.rollingUsagePercent,
windowMinutes: 5 * 60,
resetsAt: rollingReset,
resetDescription: nil)
let secondary = RateWindow(
usedPercent: self.weeklyUsagePercent,
windowMinutes: 7 * 24 * 60,
resetsAt: weeklyReset,
resetDescription: nil)
var extraWindows: [NamedRateWindow]?
if let renewsAt = self.renewsAt {
let renewalWindow = RateWindow(
usedPercent: 0,
windowMinutes: nil,
resetsAt: renewsAt,
resetDescription: nil)
extraWindows = [NamedRateWindow(id: "renewal", title: "Renews", window: renewalWindow)]
}
return UsageSnapshot(
primary: primary,
secondary: secondary,
extraRateWindows: extraWindows,
updatedAt: self.updatedAt,
identity: nil)
}
}