| 209 | } |
| 210 | |
| 211 | func (p *promHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { |
| 212 | timeHorizon := r.URL.Query().Get("time_horizon") |
| 213 | if timeHorizon == "" { |
| 214 | timeHorizon = "5m" |
| 215 | } |
| 216 | filterEmpty := false |
| 217 | filterEmptyStr := r.URL.Query().Get("filter_empty") |
| 218 | if filterEmptyStr == "true" { |
| 219 | filterEmpty = true |
| 220 | } |
| 221 | |
| 222 | dstNamespace := r.URL.Query().Get("destination_namespace") |
| 223 | dstWorkload := r.URL.Query().Get("destination_workload") |
| 224 | srcNamespace := r.URL.Query().Get("source_namespace") |
| 225 | srcWorkload := r.URL.Query().Get("source_workload") |
| 226 | // validate time_horizon |
| 227 | if _, err := model.ParseDuration(timeHorizon); err != nil { |
| 228 | writeError(w, fmt.Errorf("could not parse time_horizon: %v", err)) |
| 229 | return |
| 230 | } |
| 231 | g, err := p.generate(genOpts{ |
| 232 | timeHorizon, |
| 233 | filterEmpty, |
| 234 | dstNamespace, |
| 235 | dstWorkload, |
| 236 | srcNamespace, |
| 237 | srcWorkload, |
| 238 | }) |
| 239 | g.Merge(p.static) |
| 240 | if err != nil { |
| 241 | writeError(w, err) |
| 242 | return |
| 243 | } |
| 244 | err = p.writer(w, g) |
| 245 | if err != nil { |
| 246 | writeError(w, err) |
| 247 | return |
| 248 | } |
| 249 | } |
| 250 | |
| 251 | func writeError(w http.ResponseWriter, err error) { |
| 252 | w.WriteHeader(http.StatusInternalServerError) |