github.com/GuanceCloud/cliutils@v1.1.21/pipeline/ptinput/plmap/aggmap_test.go (about)

     1  // Unless explicitly stated otherwise all files in this repository are licensed
     2  // under the MIT License.
     3  // This product includes software developed at Guance Cloud (https://www.guance.com/).
     4  // Copyright 2021-present Guance, Inc.
     5  
     6  package plmap
     7  
     8  import (
     9  	"testing"
    10  	"time"
    11  
    12  	"github.com/GuanceCloud/cliutils/point"
    13  	"github.com/stretchr/testify/assert"
    14  )
    15  
    16  func TestAggBuckets(t *testing.T) {
    17  	ptsLi := map[string][]*point.Point{}
    18  	var fn UploadFunc = func(cat point.Category, n string, d any) error {
    19  		ptsLi[n] = append(ptsLi[n], d.([]*point.Point)...)
    20  		return nil
    21  	}
    22  
    23  	buks := NewAggBuks(fn, nil)
    24  	buks.CreateBucket(point.Metric, "bucket_a", time.Second*5, 0, false, nil)
    25  	buks.CreateBucket(point.Metric, "bucket_a", time.Second, 0, false, nil)
    26  	buks.CreateBucket(point.Metric, "bucket_a", time.Second, 0, false, nil)
    27  	buks.CreateBucket(point.Metric, "bucket_b", time.Second, 0, false, nil)
    28  
    29  	v, ok := buks.GetBucket(point.Metric, "bucket_a")
    30  	assert.NotEqual(t, nil, v)
    31  	assert.Equal(t, true, ok)
    32  
    33  	if v, ok := buks.GetBucket(point.Metric, "bucket_b"); ok {
    34  		assert.NotEqual(t, nil, v)
    35  		v.stopScan()
    36  	} else {
    37  		assert.Equal(t, true, ok)
    38  	}
    39  	v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 1)
    40  	v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 2)
    41  	v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 3)
    42  
    43  	buks.StopAllBukScanner()
    44  	time.Sleep(time.Millisecond * 10)
    45  }
    46  
    47  func TestAggBuckets2(t *testing.T) {
    48  	ptsLi := map[point.Category]map[string][]*point.Point{}
    49  	var fn UploadFunc = func(cat point.Category, n string, d any) error {
    50  		if ptsLi[cat] == nil {
    51  			ptsLi[cat] = map[string][]*point.Point{}
    52  		}
    53  
    54  		ptsLi[cat][n] = append(ptsLi[cat][n], d.([]*point.Point)...)
    55  		return nil
    56  	}
    57  
    58  	buks := NewAggBuks(fn, nil)
    59  	buks.CreateBucket(point.Metric, "bucket_a", time.Second*5, 0, false, nil)
    60  	buks.CreateBucket(point.Metric, "bucket_a", 0, 2, false, nil)
    61  	buks.CreateBucket(point.Metric, "bucket_a", 0, 2, false, nil)
    62  	buks.CreateBucket(point.Metric, "bucket_b", 0, 2, false, nil)
    63  	buks.CreateBucket(point.Logging, "bucket_b", 0, 2, false, nil)
    64  
    65  	v, ok := buks.GetBucket(point.Metric, "bucket_a")
    66  	assert.NotEqual(t, nil, v)
    67  	assert.Equal(t, true, ok)
    68  
    69  	v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 1)
    70  	v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 2)
    71  	v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 3)
    72  
    73  	if v, ok := buks.GetBucket(point.Metric, "bucket_b"); ok {
    74  		assert.NotEqual(t, nil, v)
    75  
    76  		v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 1)
    77  		v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 2)
    78  		v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 3)
    79  		v.stopScan()
    80  	} else {
    81  		assert.Equal(t, true, ok)
    82  	}
    83  
    84  	if v, ok := buks.GetBucket(point.Logging, "bucket_b"); ok {
    85  		assert.NotEqual(t, nil, v)
    86  
    87  		v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 1)
    88  		v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 2)
    89  		v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 3)
    90  		v.stopScan()
    91  	} else {
    92  		assert.Equal(t, true, ok)
    93  	}
    94  
    95  	buks.StopAllBukScanner()
    96  
    97  	time.Sleep(time.Millisecond * 100)
    98  }
    99  
   100  func TestAggMetric(t *testing.T) {
   101  	cases := []struct {
   102  		action string
   103  		d      []any
   104  		o      any
   105  		failed bool
   106  	}{
   107  		{
   108  			action: "avg",
   109  			d:      []any{1, 2, 1, 2},
   110  			o:      1.5,
   111  		},
   112  		{
   113  			action: "sum",
   114  			d:      []any{1, 2, 1, 2},
   115  			o:      6.0,
   116  		},
   117  		{
   118  			action: "min",
   119  			d:      []any{1, 2, 3, 5, 1, 2, 1},
   120  			o:      1.0,
   121  		},
   122  		{
   123  			action: "max",
   124  			d:      []any{1, 2, 1, 2},
   125  			o:      2.0,
   126  		},
   127  		{
   128  			action: "set",
   129  			d:      []any{1, 2, 1, 2, -1},
   130  			o:      -1.0,
   131  		},
   132  	}
   133  
   134  	for _, tc := range cases {
   135  		t.Run(tc.action, func(t *testing.T) {
   136  			v, ok := NewAggMetric("", tc.action)
   137  			assert.Equal(t, !tc.failed, ok)
   138  			if v != nil {
   139  				for _, d := range tc.d {
   140  					v.Append(d)
   141  				}
   142  			}
   143  			assert.Equal(t, tc.o, v.Value())
   144  		})
   145  	}
   146  }