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 }
// Converts Timeseries to metric structure used by the Hawkular func (self *hawkularSink) pointToMetricHeader(t *sink_api.Timeseries) (*metrics.MetricHeader, error) { p := t.Point name := self.idName(p) value, err := metrics.ConvertToFloat64(p.Value) if err != nil { return nil, err } m := metrics.Datapoint{ Value: value, Timestamp: metrics.UnixMilli(p.End), } mh := &metrics.MetricHeader{ Id: name, Data: []metrics.Datapoint{m}, Type: heapsterTypeToHawkularType(t.MetricDescriptor.Type), } return mh, nil }
// Converts Timeseries to metric structure used by the Hawkular func (self *hawkularSink) pointToMetricHeader(t *sink_api.Timeseries) (*metrics.MetricHeader, error) { p := t.Point name := self.idName(p) value, err := metrics.ConvertToFloat64(p.Value) if err != nil { return nil, err } m := metrics.Datapoint{ Value: value, Timestamp: metrics.UnixMilli(p.End), } // At the moment all the values are converted to gauges. mh := &metrics.MetricHeader{ Id: name, Data: []metrics.Datapoint{m}, Type: metrics.Gauge, } return mh, nil }