| 218 | } |
| 219 | |
| 220 | func (c *Cache) TemplateBuildTimeStats(id uuid.UUID) codersdk.TemplateBuildTimeStats { |
| 221 | unknown := codersdk.TemplateBuildTimeStats{ |
| 222 | codersdk.WorkspaceTransitionStart: {}, |
| 223 | codersdk.WorkspaceTransitionStop: {}, |
| 224 | codersdk.WorkspaceTransitionDelete: {}, |
| 225 | } |
| 226 | |
| 227 | m := c.templateAverageBuildTime.Load() |
| 228 | if m == nil { |
| 229 | // Data loading. |
| 230 | return unknown |
| 231 | } |
| 232 | |
| 233 | resp, ok := (*m)[id] |
| 234 | if !ok { |
| 235 | // No data or not enough builds. |
| 236 | return unknown |
| 237 | } |
| 238 | |
| 239 | convertMillis := func(m float64) *int64 { |
| 240 | if m <= 0 { |
| 241 | return nil |
| 242 | } |
| 243 | i := int64(m * 1000) |
| 244 | return &i |
| 245 | } |
| 246 | |
| 247 | return codersdk.TemplateBuildTimeStats{ |
| 248 | codersdk.WorkspaceTransitionStart: { |
| 249 | P50: convertMillis(resp.Start50), |
| 250 | P95: convertMillis(resp.Start95), |
| 251 | }, |
| 252 | codersdk.WorkspaceTransitionStop: { |
| 253 | P50: convertMillis(resp.Stop50), |
| 254 | P95: convertMillis(resp.Stop95), |
| 255 | }, |
| 256 | codersdk.WorkspaceTransitionDelete: { |
| 257 | P50: convertMillis(resp.Delete50), |
| 258 | P95: convertMillis(resp.Delete95), |
| 259 | }, |
| 260 | } |
| 261 | } |
| 262 | |
| 263 | func (c *Cache) TemplateWorkspaceOwners(id uuid.UUID) (int, bool) { |
| 264 | m := c.templateWorkspaceOwners.Load() |