计算一组中每个系列的连续点数

时间:2018-01-06 01:50:48

标签: grafana graphite

如果我有两个(或更多......)"稀疏"系列(即不一定在每个时刻定义)和特定时间范围,我可以使用什么技巧在同步间隔内找到最大数量的已定义数据点" (即,系列的所有定义或未定义)?

e.g。以下三个系列:

    t: 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
   ----------------------------------------------------
   s0: 1  -  -  1  6  -  2  -  2  8  -  9  0  -  -  -
   s1: 3  -  -  4  0  -  3  2  3  3  -  1  1  -  -  7
   s2: 1  -  -  5  9  -  2  4  -  3  -  2  4  4  -  -
       ^-----------------^        ^--------^
count: 1........2..3....[4]       1.....2.[3]

我们会在"同步间隔内找到最多4个数据点。"

1 个答案:

答案 0 :(得分:0)

经过多次实验,我得出了一个解决方案 - 假设有两个系列s0和s1(虽然这可以概括为任意数量的系列):

$NUM_SERIES = 2
$NUM_SERIES_RECIPROCAL = 1/2
sum = sumSeries(isNonNull(s0),isNonNull(s1))

removeBelowValue(
  derivative(
    transformNull(
      keepLastValue(
        multiplySeries(
          transformNull(
            keepLastValue(
              integral(
                scale(
                  removeBelowValue(sum, $NUM_SERIES),
                  $NUM_SERIES_RECIPROCAL
                )
              )
            ),
            0
          ),
          scale(
            removeAboveValue(
              derivative(
                keepLastValue(
                  removeBelowValue(
                    sum,
                    1
                  )
                )
              ),
              -1
            ),
            -1
          )
        )
      ),
      0
    )
  ),
  1
)