 9bdcbe0447
			
		
	
	9bdcbe0447
	
	
	
		
			
			Major integrations and fixes: - Added BACKBEAT SDK integration for P2P operation timing - Implemented beat-aware status tracking for distributed operations - Added Docker secrets support for secure license management - Resolved KACHING license validation via HTTPS/TLS - Updated docker-compose configuration for clean stack deployment - Disabled rollback policies to prevent deployment failures - Added license credential storage (CHORUS-DEV-MULTI-001) Technical improvements: - BACKBEAT P2P operation tracking with phase management - Enhanced configuration system with file-based secrets - Improved error handling for license validation - Clean separation of KACHING and CHORUS deployment stacks 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			194 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2018, OpenCensus Authors
 | |
| //
 | |
| // Licensed under the Apache License, Version 2.0 (the "License");
 | |
| // you may not use this file except in compliance with the License.
 | |
| // You may obtain a copy of the License at
 | |
| //
 | |
| //     http://www.apache.org/licenses/LICENSE-2.0
 | |
| //
 | |
| // Unless required by applicable law or agreed to in writing, software
 | |
| // distributed under the License is distributed on an "AS IS" BASIS,
 | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| // See the License for the specific language governing permissions and
 | |
| // limitations under the License.
 | |
| 
 | |
| package metricdata
 | |
| 
 | |
| import (
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| // Point is a single data point of a time series.
 | |
| type Point struct {
 | |
| 	// Time is the point in time that this point represents in a time series.
 | |
| 	Time time.Time
 | |
| 	// Value is the value of this point. Prefer using ReadValue to switching on
 | |
| 	// the value type, since new value types might be added.
 | |
| 	Value interface{}
 | |
| }
 | |
| 
 | |
| //go:generate stringer -type ValueType
 | |
| 
 | |
| // NewFloat64Point creates a new Point holding a float64 value.
 | |
| func NewFloat64Point(t time.Time, val float64) Point {
 | |
| 	return Point{
 | |
| 		Value: val,
 | |
| 		Time:  t,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // NewInt64Point creates a new Point holding an int64 value.
 | |
| func NewInt64Point(t time.Time, val int64) Point {
 | |
| 	return Point{
 | |
| 		Value: val,
 | |
| 		Time:  t,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // NewDistributionPoint creates a new Point holding a Distribution value.
 | |
| func NewDistributionPoint(t time.Time, val *Distribution) Point {
 | |
| 	return Point{
 | |
| 		Value: val,
 | |
| 		Time:  t,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // NewSummaryPoint creates a new Point holding a Summary value.
 | |
| func NewSummaryPoint(t time.Time, val *Summary) Point {
 | |
| 	return Point{
 | |
| 		Value: val,
 | |
| 		Time:  t,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // ValueVisitor allows reading the value of a point.
 | |
| type ValueVisitor interface {
 | |
| 	VisitFloat64Value(float64)
 | |
| 	VisitInt64Value(int64)
 | |
| 	VisitDistributionValue(*Distribution)
 | |
| 	VisitSummaryValue(*Summary)
 | |
| }
 | |
| 
 | |
| // ReadValue accepts a ValueVisitor and calls the appropriate method with the
 | |
| // value of this point.
 | |
| // Consumers of Point should use this in preference to switching on the type
 | |
| // of the value directly, since new value types may be added.
 | |
| func (p Point) ReadValue(vv ValueVisitor) {
 | |
| 	switch v := p.Value.(type) {
 | |
| 	case int64:
 | |
| 		vv.VisitInt64Value(v)
 | |
| 	case float64:
 | |
| 		vv.VisitFloat64Value(v)
 | |
| 	case *Distribution:
 | |
| 		vv.VisitDistributionValue(v)
 | |
| 	case *Summary:
 | |
| 		vv.VisitSummaryValue(v)
 | |
| 	default:
 | |
| 		panic("unexpected value type")
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Distribution contains summary statistics for a population of values. It
 | |
| // optionally contains a histogram representing the distribution of those
 | |
| // values across a set of buckets.
 | |
| type Distribution struct {
 | |
| 	// Count is the number of values in the population. Must be non-negative. This value
 | |
| 	// must equal the sum of the values in bucket_counts if a histogram is
 | |
| 	// provided.
 | |
| 	Count int64
 | |
| 	// Sum is the sum of the values in the population. If count is zero then this field
 | |
| 	// must be zero.
 | |
| 	Sum float64
 | |
| 	// SumOfSquaredDeviation is the sum of squared deviations from the mean of the values in the
 | |
| 	// population. For values x_i this is:
 | |
| 	//
 | |
| 	//     Sum[i=1..n]((x_i - mean)^2)
 | |
| 	//
 | |
| 	// Knuth, "The Art of Computer Programming", Vol. 2, page 323, 3rd edition
 | |
| 	// describes Welford's method for accumulating this sum in one pass.
 | |
| 	//
 | |
| 	// If count is zero then this field must be zero.
 | |
| 	SumOfSquaredDeviation float64
 | |
| 	// BucketOptions describes the bounds of the histogram buckets in this
 | |
| 	// distribution.
 | |
| 	//
 | |
| 	// A Distribution may optionally contain a histogram of the values in the
 | |
| 	// population.
 | |
| 	//
 | |
| 	// If nil, there is no associated histogram.
 | |
| 	BucketOptions *BucketOptions
 | |
| 	// Bucket If the distribution does not have a histogram, then omit this field.
 | |
| 	// If there is a histogram, then the sum of the values in the Bucket counts
 | |
| 	// must equal the value in the count field of the distribution.
 | |
| 	Buckets []Bucket
 | |
| }
 | |
| 
 | |
| // BucketOptions describes the bounds of the histogram buckets in this
 | |
| // distribution.
 | |
| type BucketOptions struct {
 | |
| 	// Bounds specifies a set of bucket upper bounds.
 | |
| 	// This defines len(bounds) + 1 (= N) buckets. The boundaries for bucket
 | |
| 	// index i are:
 | |
| 	//
 | |
| 	// [0, Bounds[i]) for i == 0
 | |
| 	// [Bounds[i-1], Bounds[i]) for 0 < i < N-1
 | |
| 	// [Bounds[i-1], +infinity) for i == N-1
 | |
| 	Bounds []float64
 | |
| }
 | |
| 
 | |
| // Bucket represents a single bucket (value range) in a distribution.
 | |
| type Bucket struct {
 | |
| 	// Count is the number of values in each bucket of the histogram, as described in
 | |
| 	// bucket_bounds.
 | |
| 	Count int64
 | |
| 	// Exemplar associated with this bucket (if any).
 | |
| 	Exemplar *Exemplar
 | |
| }
 | |
| 
 | |
| // Summary is a representation of percentiles.
 | |
| type Summary struct {
 | |
| 	// Count is the cumulative count (if available).
 | |
| 	Count int64
 | |
| 	// Sum is the cumulative sum of values  (if available).
 | |
| 	Sum float64
 | |
| 	// HasCountAndSum is true if Count and Sum are available.
 | |
| 	HasCountAndSum bool
 | |
| 	// Snapshot represents percentiles calculated over an arbitrary time window.
 | |
| 	// The values in this struct can be reset at arbitrary unknown times, with
 | |
| 	// the requirement that all of them are reset at the same time.
 | |
| 	Snapshot Snapshot
 | |
| }
 | |
| 
 | |
| // Snapshot represents percentiles over an arbitrary time.
 | |
| // The values in this struct can be reset at arbitrary unknown times, with
 | |
| // the requirement that all of them are reset at the same time.
 | |
| type Snapshot struct {
 | |
| 	// Count is the number of values in the snapshot. Optional since some systems don't
 | |
| 	// expose this. Set to 0 if not available.
 | |
| 	Count int64
 | |
| 	// Sum is the sum of values in the snapshot. Optional since some systems don't
 | |
| 	// expose this. If count is 0 then this field must be zero.
 | |
| 	Sum float64
 | |
| 	// Percentiles is a map from percentile (range (0-100.0]) to the value of
 | |
| 	// the percentile.
 | |
| 	Percentiles map[float64]float64
 | |
| }
 | |
| 
 | |
| //go:generate stringer -type Type
 | |
| 
 | |
| // Type is the overall type of metric, including its value type and whether it
 | |
| // represents a cumulative total (since the start time) or if it represents a
 | |
| // gauge value.
 | |
| type Type int
 | |
| 
 | |
| // Metric types.
 | |
| const (
 | |
| 	TypeGaugeInt64 Type = iota
 | |
| 	TypeGaugeFloat64
 | |
| 	TypeGaugeDistribution
 | |
| 	TypeCumulativeInt64
 | |
| 	TypeCumulativeFloat64
 | |
| 	TypeCumulativeDistribution
 | |
| 	TypeSummary
 | |
| )
 |