Remove plans/ directory (P0/P1/P2 work complete)

This commit is contained in:
2026-05-27 02:12:21 -05:00
parent 0c1840d223
commit 0dbb2e02ed
33 changed files with 1906 additions and 990 deletions
+78 -41
View File
@@ -27,8 +27,14 @@ type Metrics struct {
DiskCacheSize int64
MemoryCacheHits int64
DiskCacheHits int64
Promotions int64 // R2
Evictions int64 // R2
Promotions int64
Evictions int64
// Expanded observability (upstream breakdowns, cache write failures, per-service errors)
UpstreamErrors int64
CacheWriteFailures int64
ServiceErrors map[string]int64
serviceErrorsMutex sync.RWMutex
// Service metrics
ServiceRequests map[string]int64
@@ -44,6 +50,7 @@ func NewMetrics() *Metrics {
now := time.Now()
return &Metrics{
ServiceRequests: make(map[string]int64),
ServiceErrors: make(map[string]int64),
StartTime: now,
LastResetTime: now,
}
@@ -128,10 +135,21 @@ func (m *Metrics) GetServiceRequests(service string) int64 {
return m.ServiceRequests[service]
}
// R2 tiny wiring
func (m *Metrics) IncrementPromotions() { atomic.AddInt64(&m.Promotions, 1) }
func (m *Metrics) IncrementEvictions() { atomic.AddInt64(&m.Evictions, 1) }
// Additional observability counters
func (m *Metrics) IncrementUpstreamErrors() { atomic.AddInt64(&m.UpstreamErrors, 1) }
func (m *Metrics) IncrementCacheWriteFailures() { atomic.AddInt64(&m.CacheWriteFailures, 1) }
func (m *Metrics) IncrementServiceError(service string) {
m.serviceErrorsMutex.Lock()
defer m.serviceErrorsMutex.Unlock()
if m.ServiceErrors == nil {
m.ServiceErrors = make(map[string]int64)
}
m.ServiceErrors[service]++
}
// GetStats returns a snapshot of current metrics
func (m *Metrics) GetStats() *Stats {
totalRequests := atomic.LoadInt64(&m.TotalRequests)
@@ -155,26 +173,36 @@ func (m *Metrics) GetStats() *Stats {
}
m.serviceMutex.RUnlock()
serviceErrors := make(map[string]int64)
m.serviceErrorsMutex.RLock()
defer m.serviceErrorsMutex.RUnlock()
for k, v := range m.ServiceErrors {
serviceErrors[k] = v
}
return &Stats{
TotalRequests: totalRequests,
CacheHits: cacheHits,
CacheMisses: cacheMisses,
CacheCoalesced: atomic.LoadInt64(&m.CacheCoalesced),
Errors: atomic.LoadInt64(&m.Errors),
RateLimited: atomic.LoadInt64(&m.RateLimited),
HitRate: hitRate,
AvgResponseTime: avgResponseTime,
TotalBytesServed: atomic.LoadInt64(&m.TotalBytesServed),
TotalBytesCached: atomic.LoadInt64(&m.TotalBytesCached),
MemoryCacheSize: atomic.LoadInt64(&m.MemoryCacheSize),
DiskCacheSize: atomic.LoadInt64(&m.DiskCacheSize),
MemoryCacheHits: atomic.LoadInt64(&m.MemoryCacheHits),
DiskCacheHits: atomic.LoadInt64(&m.DiskCacheHits),
Promotions: atomic.LoadInt64(&m.Promotions),
Evictions: atomic.LoadInt64(&m.Evictions),
ServiceRequests: serviceRequests,
Uptime: time.Since(m.StartTime),
LastResetTime: m.LastResetTime,
TotalRequests: totalRequests,
CacheHits: cacheHits,
CacheMisses: cacheMisses,
CacheCoalesced: atomic.LoadInt64(&m.CacheCoalesced),
Errors: atomic.LoadInt64(&m.Errors),
RateLimited: atomic.LoadInt64(&m.RateLimited),
HitRate: hitRate,
AvgResponseTime: avgResponseTime,
TotalBytesServed: atomic.LoadInt64(&m.TotalBytesServed),
TotalBytesCached: atomic.LoadInt64(&m.TotalBytesCached),
MemoryCacheSize: atomic.LoadInt64(&m.MemoryCacheSize),
DiskCacheSize: atomic.LoadInt64(&m.DiskCacheSize),
MemoryCacheHits: atomic.LoadInt64(&m.MemoryCacheHits),
DiskCacheHits: atomic.LoadInt64(&m.DiskCacheHits),
Promotions: atomic.LoadInt64(&m.Promotions),
Evictions: atomic.LoadInt64(&m.Evictions),
ServiceRequests: serviceRequests,
UpstreamErrors: atomic.LoadInt64(&m.UpstreamErrors),
CacheWriteFailures: atomic.LoadInt64(&m.CacheWriteFailures),
ServiceErrors: serviceErrors,
Uptime: time.Since(m.StartTime),
LastResetTime: m.LastResetTime,
}
}
@@ -193,33 +221,42 @@ func (m *Metrics) Reset() {
atomic.StoreInt64(&m.DiskCacheHits, 0)
atomic.StoreInt64(&m.Promotions, 0)
atomic.StoreInt64(&m.Evictions, 0)
atomic.StoreInt64(&m.UpstreamErrors, 0)
atomic.StoreInt64(&m.CacheWriteFailures, 0)
m.serviceMutex.Lock()
m.ServiceRequests = make(map[string]int64)
m.serviceMutex.Unlock()
m.serviceErrorsMutex.Lock()
defer m.serviceErrorsMutex.Unlock()
m.ServiceErrors = make(map[string]int64)
m.LastResetTime = time.Now()
}
// Stats represents a snapshot of metrics
type Stats struct {
TotalRequests int64
CacheHits int64
CacheMisses int64
CacheCoalesced int64
Errors int64
RateLimited int64
HitRate float64
AvgResponseTime time.Duration
TotalBytesServed int64
TotalBytesCached int64
MemoryCacheSize int64
DiskCacheSize int64
MemoryCacheHits int64
DiskCacheHits int64
Promotions int64
Evictions int64
ServiceRequests map[string]int64
Uptime time.Duration
LastResetTime time.Time
TotalRequests int64
CacheHits int64
CacheMisses int64
CacheCoalesced int64
Errors int64
RateLimited int64
HitRate float64
AvgResponseTime time.Duration
TotalBytesServed int64
TotalBytesCached int64
MemoryCacheSize int64
DiskCacheSize int64
MemoryCacheHits int64
DiskCacheHits int64
Promotions int64
Evictions int64
UpstreamErrors int64
CacheWriteFailures int64
ServiceErrors map[string]int64
ServiceRequests map[string]int64
Uptime time.Duration
LastResetTime time.Time
}