thanks for reply @bednar,
I tried to create a similar to your task and it works, but when i use a more complicated task then the problem is appeared.
I don’t know if it is the right way to create a custom check but i try to follow the docs create custom checks
The generated task script works as i expected.
for example I use the same way to create a Task with the flux:
String flux = "import \"influxdata/influxdb/monitor\"\n" +
"import \"influxdata/influxdb/schema\"\n" +
"import \"contrib/tomhollingworth/events\"\n" +
"import \"math\"\n" +
"\n" +
"option v = {bucket: \"\", timeRangeStop: now()}\n" +
"option task = {name: \"test-if\", every: 2m}\n" +
"\n" +
"RPM_MCR = 105.0\n" +
"Power_MCR = 13560.0\n" +
" val1 = from(bucket: \"B_7637494\")\n" +
"\t|> range(start: -10m, stop: v.timeRangeStop)\n" +
"\t|> filter(fn: (r) =>\n" +
"\t\t(r[\"_measurement\"] == \"iot_data\"))\n" +
"\t|> filter(fn: (r) =>\n" +
"\t\t(r[\"sid\"] == \"7637494\"))\n" +
"\t|> filter(fn: (r) =>\n" +
"\t\t(r[\"_field\"] == \"00020102\"))\n" +
"\t|> filter(fn: (r) =>\n" +
"\t\t(r[\"_value\"] < 0.0 ))\n" +
"\t|> count()\n" +
"\t|> map(fn: (r) =>\n" +
"\t\t({r with \"condition\": if r._value == 5 then 1 else 0}))\n" +
"\t|> keep(columns: [\"condition\"])\n" +
"\t|> toFloat() val7 = from(bucket: \"B_7637494\")\n" +
"\t|> range(start: -10m, stop: v.timeRangeStop)\n" +
"\t|> filter(fn: (r) =>\n" +
"\t\t(r[\"_measurement\"] == \"iot_data\"))\n" +
"\t|> filter(fn: (r) =>\n" +
"\t\t(r[\"sid\"] == \"7637494\"))\n" +
"\t|> filter(fn: (r) =>\n" +
"\t\t(r[\"_field\"] == \"0101014C\"))\n" +
"\t|> filter(fn: (r) =>\n" +
"\t\t(r[\"_value\"] < 50.0 ))\n" +
"\t|> count()\n" +
"\t|> map(fn: (r) =>\n" +
"\t\t({r with \"condition\": if r._value == 5 then 1 else 0}))\n" +
"\t|> keep(columns: [\"condition\"])\n" +
"\t|> toFloat() con_1 =val1 con_2 =val7 con_and = union(tables: [con_1,con_2])\n" +
"\t|> sum(column: \"condition\")\n" +
"\t|> map(fn: (r) =>\n" +
"\t\t({r with \"condition\": if r.condition == 2 then 1 else 0, \"_time\": now()}))\n" +
"notification = from(bucket: \"_monitoring\")\n" +
"\t|> range(start: -1h, stop: v.timeRangeStop)\n" +
"\t|> filter(fn: (r) =>\n" +
"\t\t(r[\"_check_id\"] == \"73ac7e02-8818-01\"))\n" +
"\t|> filter(fn: (r) =>\n" +
"\t\t(r[\"_check_name\"] == \"test-if\"))\n" +
"\t|> filter(fn: (r) =>\n" +
"\t\t(r[\"_measurement\"] == \"notifications\"))\n" +
"\t|> filter(fn: (r) =>\n" +
"\t\t(r[\"_level\"] == \"crit\"))\n" +
"\t|> filter(fn: (r) =>\n" +
"\t\t(r[\"_sent\"] == \"true\"))\n" +
"\t|> filter(fn: (r) =>\n" +
"\t\t(r[\"_field\"] == \"condition\"))\n" +
"\t|> filter(fn: (r) =>\n" +
"\t\t(r[\"_value\"] == 1))\n" +
"\t|> last()\n" +
"\t|> keep(columns: [\"_value\", \"_time\"])\n" +
"\t|> rename(columns: {\"_value\": \"condition\"})\n" +
"note = union(tables: [notification, con_and])\n" +
"final_check = note\n" +
"\t|> group(columns: [\"_measurement\"])\n" +
"\t|> events.duration(unit: 1s, stop: now())\n" +
"\t|> sort(columns: [\"_time\"])\n" +
"\t|> first(column: \"_time\")\n" +
"\t|> map(fn: (r) =>\n" +
"\t\t({r with \"condition\": if r.duration > 480 or r.duration == 0 then 1 else 0}))\n" +
"\t|> map(fn: (r) =>\n" +
"\t\t({r with \n" +
"\t\t\t\"_field\": \"notification\",\n" +
"\t\t\t\"_measurement\": \"iot_event\",\n" +
"\t\t\t\"sid\": \"7637494\",\n" +
"\t\t\t\"_value\": 1,\n" +
"\t\t}))\n" +
"\t|> group(columns: [\"_measurement\"])\n" +
"check = {\n" +
"\t_check_id: \"73ac7e02-8818-01\",\n" +
"\t_check_name: \"test-if\",\n" +
"\t_type: \"custom\",\n" +
"\ttags: {},\n" +
"}\n" +
"ok = (r) =>\n" +
"\t(r[\"condition\"] == 0)\n" +
"crit = (r) =>\n" +
"\t(r[\"condition\"] == 1)\n" +
"messageFn = (r) =>\n" +
"\t(\"test-if\")\n" +
"\n" +
"final_check\n" +
"\t|> monitor[\"check\"](\n" +
"\t\tdata: check,\n" +
"\t\tmessageFn: messageFn,\n" +
"\t\tok: ok,\n" +
"\t\tcrit: crit,\n" +
"\t)";
and the influxdb correct create the task with the script:
import "influxdata/influxdb/monitor"
import "influxdata/influxdb/schema"
import "contrib/tomhollingworth/events"
import "math"
option v = {bucket: "", timeRangeStop: now()}
option task = {name: "test-if", every: 2m}
RPM_MCR = 105.0
Power_MCR = 13560.0
val1 = from(bucket: "B_7637494")
|> range(start: -10m, stop: v.timeRangeStop)
|> filter(fn: (r) =>
(r["_measurement"] == "iot_data"))
|> filter(fn: (r) =>
(r["sid"] == "7637494"))
|> filter(fn: (r) =>
(r["_field"] == "00020102"))
|> filter(fn: (r) =>
(r["_value"] < 0.0 ))
|> count()
|> map(fn: (r) =>
({r with "condition": if r._value == 5 then 1 else 0}))
|> keep(columns: ["condition"])
|> toFloat() val7 = from(bucket: "B_7637494")
|> range(start: -10m, stop: v.timeRangeStop)
|> filter(fn: (r) =>
(r["_measurement"] == "iot_data"))
|> filter(fn: (r) =>
(r["sid"] == "7637494"))
|> filter(fn: (r) =>
(r["_field"] == "0101014C"))
|> filter(fn: (r) =>
(r["_value"] < 50.0 ))
|> count()
|> map(fn: (r) =>
({r with "condition": if r._value == 5 then 1 else 0}))
|> keep(columns: ["condition"])
|> toFloat() con_1 =val1 con_2 =val7 con_and = union(tables: [con_1,con_2])
|> sum(column: "condition")
|> map(fn: (r) =>
({r with "condition": if r.condition == 2 then 1 else 0, "_time": now()}))
notification = from(bucket: "_monitoring")
|> range(start: -1h, stop: v.timeRangeStop)
|> filter(fn: (r) =>
(r["_check_id"] == "73ac7e02-8818-01"))
|> filter(fn: (r) =>
(r["_check_name"] == "test-if"))
|> filter(fn: (r) =>
(r["_measurement"] == "notifications"))
|> filter(fn: (r) =>
(r["_level"] == "crit"))
|> filter(fn: (r) =>
(r["_sent"] == "true"))
|> filter(fn: (r) =>
(r["_field"] == "condition"))
|> filter(fn: (r) =>
(r["_value"] == 1))
|> last()
|> keep(columns: ["_value", "_time"])
|> rename(columns: {"_value": "condition"})
note = union(tables: [notification, con_and])
final_check = note
|> group(columns: ["_measurement"])
|> events.duration(unit: 1s, stop: now())
|> sort(columns: ["_time"])
|> first(column: "_time")
|> map(fn: (r) =>
({r with "condition": if r.duration > 480 or r.duration == 0 then 1 else 0}))
|> map(fn: (r) =>
({r with
"_field": "notification",
"_measurement": "iot_event",
"sid": "7637494",
"_value": 1,
}))
|> group(columns: ["_measurement"])
check = {
_check_id: "73ac7e02-8818-01",
_check_name: "test-if",
_type: "custom",
tags: {},
}
ok = (r) =>
(r["condition"] == 0)
crit = (r) =>
(r["condition"] == 1)
messageFn = (r) =>
("test-if")
final_check
|> monitor["check"](
data: check,
messageFn: messageFn,
ok: ok,
crit: crit,
)