| 144 | } |
| 145 | |
| 146 | func (s *PrometheusStorage) GetMetrics(days int) (map[string]interface{}, error) { |
| 147 | s.mu.RLock() |
| 148 | defer s.mu.RUnlock() |
| 149 | |
| 150 | // Return current metrics from in-memory storage |
| 151 | // Historical data should be queried from Prometheus directly |
| 152 | cutoff := time.Now().AddDate(0, 0, -days) |
| 153 | |
| 154 | var volumeServers []map[string]interface{} |
| 155 | var diskUsage []map[string]interface{} |
| 156 | |
| 157 | for _, instance := range s.instances { |
| 158 | if instance.ReceivedAt.After(cutoff) { |
| 159 | volumeServers = append(volumeServers, map[string]interface{}{ |
| 160 | "date": instance.ReceivedAt.Format("2006-01-02"), |
| 161 | "value": instance.TelemetryData.VolumeServerCount, |
| 162 | }) |
| 163 | diskUsage = append(diskUsage, map[string]interface{}{ |
| 164 | "date": instance.ReceivedAt.Format("2006-01-02"), |
| 165 | "value": instance.TelemetryData.TotalDiskBytes, |
| 166 | }) |
| 167 | } |
| 168 | } |
| 169 | |
| 170 | return map[string]interface{}{ |
| 171 | "volume_servers": volumeServers, |
| 172 | "disk_usage": diskUsage, |
| 173 | }, nil |
| 174 | } |
| 175 | |
| 176 | func (s *PrometheusStorage) updateStats() { |
| 177 | now := time.Now() |