// Fetches definitions from the server and checks that they're matching the descriptors func (self *hawkularSink) updateDefinitions(mt metrics.MetricType) error { m := make([]metrics.Modifier, len(self.modifiers), len(self.modifiers)+1) copy(m, self.modifiers) m = append(m, metrics.Filters(metrics.TypeFilter(mt))) mds, err := self.client.Definitions(m...) if err != nil { return err } self.regLock.Lock() defer self.regLock.Unlock() for _, p := range mds { // If no descriptorTag is found, this metric does not belong to Heapster if mk, found := p.Tags[descriptorTag]; found { if model, f := self.models[mk]; f { if !self.recent(p, model) { if err := self.client.UpdateTags(mt, p.Id, p.Tags, self.modifiers...); err != nil { return err } } } self.reg[p.Id] = p } } return nil }
func (hs *hawkularSource) GetUsagePercentile(kind api.ResourceName, perc int64, image, namespace string, exactMatch bool, start, end time.Time) (int64, int64, error) { q := tagQuery(kind, image, exactMatch) m := make([]metrics.Modifier, len(hs.modifiers), 2+len(hs.modifiers)) copy(m, hs.modifiers) if namespace != api.NamespaceAll { m = append(m, metrics.Tenant(namespace)) } p, err := metrics.ConvertToFloat64(perc) if err != nil { return 0, 0, err } m = append(m, metrics.Filters(metrics.TagsFilter(q), metrics.BucketsFilter(1), metrics.StartTimeFilter(start), metrics.EndTimeFilter(end), metrics.PercentilesFilter([]float64{p}))) bp, err := hs.client.ReadBuckets(metrics.Counter, m...) if err != nil { return 0, 0, err } if len(bp) > 0 && len(bp[0].Percentiles) > 0 { return int64(bp[0].Percentiles[0].Value), int64(bp[0].Samples), nil } return 0, 0, nil }