FLUX - InfluxDB 2.0 - type error @40:29-40:44: [t8206] is not Comparable

Hello,

Writing a flux script in Explore.

We are trying to load data from csv and alert based on threshold (column in csv) for a respective host.

I am getting error at the following line:
crit: (r) => r._value > alert_threshold,

I am not able to figure out what is wrong. How to use variable alert_threshold under monitor.check

Error 
**type error @40:29-40:44: [t8206] is not Comparable**

You can run this script as it is to recreate:

import "csv"

import "influxdata/influxdb/monitor"

csvData = "

#datatype,string,long,string,double

#group,false,false,false,false

#default,,,,

,result,table,host,threshold

,mean,0,Computer_1,15.1

,mean,0,Computer_2,20.2

,mean,0,Computer_3,52.62

"

threshold_data = csv.from(csv: csvData)

getFieldValue = (threshold_data=<-,hostname) => 

threshold_data

|> reduce(

            identity: {new_threshold: 90.0},

            fn: (r,accumulator) => ({

              new_threshold:

                if r.host == hostname then r.threshold

                else accumulator.new_threshold

            })

        )

alert_threshold=threshold_data

|> getFieldValue(hostname: "A700459-W10")

|>yield()

main_data =  from(bucket: "amsv_bucket")

  |> range(start: -7d)

  |> filter(fn: (r) =>

      r._measurement == "Processor" and

      r._field == "Percent_Processor_Time"

  )

  |> group(columns: ["_measurement","host"])

  |> aggregateWindow(every: 1d, fn: mean, createEmpty: false)

  |> monitor.check(

    crit: (r) => r._value > alert_threshold,

    messageFn: (r) =>

      if r._level == "crit" then "Critical alert for host ${r.host} !!"

      else "Things are looking good for host ${r.host}.",

    data: {

      _check_name: "CPU Utilization (Used Percent_Processor_Time)",

      _check_id: "Percent_Processor_Time",

      _type: "threshold",

      tags: {}

    }

  )

|> yield(name: "val1")

Do you have any idea @Anaisdg ?

Hello @Ashish_Sikarwar,
I’m not sure. It looks like maybe that’s a value type error? Can you verify the types with the raw data view? and try converting the type please? https://docs.influxdata.com/influxdb/v2.0/reference/flux/stdlib/built-in/transformations/type-conversions/

Hey @Anaisdg,

Actually it seemed to me too but it was not a conversion issue, they were all floats.

After making changes noted on line# 27, 28, 38 it worked for me.

  1. import “csv”

  2. import “influxdata/influxdb/monitor”

  3. csvData = "

  4. #datatype,string,long,string,double

  5. #group,false,false,false,false

  6. #default,

  7. ,result,table,host,threshold

  8. ,mean,0,A700459-W10,15.1

  9. ,mean,0,M20095-W10N,20.2

  10. ,mean,0,V822548-W10,52.62

  11. "

  12. threshold_data = csv.from(csv: csvData)

  13. getFieldValue = (threshold_data=<-,hostname) =>

  14. threshold_data

  15. |> reduce(

  16.         identity: {new_threshold: 90.0},
    
  17.         fn: (r,accumulator) => ({
    
  18.           new_threshold:
    
  19.             if r.host == hostname then r.threshold
    
  20.             else accumulator.new_threshold
    
  21.         })
    
  22.     )
    
  23. alert_threshold=threshold_data

  24. |> getFieldValue(hostname: “M20095-W10N”)

  25. //|>yield()

  26. |> findRecord(fn: (key) => true, idx: 0)

  27. main_data = from(bucket: “amsv_bucket”)

  28. |> range(start: -17d)

  29. |> filter(fn: ® =>

  30.   r._measurement == "Processor" and
    
  31.   r._field == "Percent_Processor_Time"
    
  32. )

  33. |> group(columns: ["_measurement",“host”])

  34. |> aggregateWindow(every: 1d, fn: mean, createEmpty: false)

  35. |> monitor.check(

  36. crit: (r) => r._value > alert_threshold.new_threshold ,
    
  37. messageFn: (r) =>
    
  38.   if r._level == "crit" then "Critical alert for host ${r.host} !!"
    
  39.   else "Things are looking good for host ${r.host}.",
    
  40. data: {
    
  41.   _check_name: "CPU Utilization (Used Percent_Processor_Time)",
    
  42.   _check_id: "Percent_Processor_Time",
    
  43.   _type: "threshold",
    
  44.   tags: {}
    
  45. }
    
  46. )

  47. |> yield(name: “val1”)

1 Like

Hello @Ashish_Sikarwar,
Nice! Do you mind me asking, what are you trying to do with that scipt/what’s your usecase?
Thanks