{"record":{"id":"0e1ed588bbb76016","repo":"netdata/netdata","slug":"unsupported-classifier-action-name","errorCode":null,"errorMessage":"unsupported classifier action '{name}'","messagePattern":"unsupported classifier action '(.+?)'","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/crates/netflow-plugin/src/enrichment/classifiers/parse/action.rs","lineNumber":140,"sourceCode":"                arg3,\n                compiled,\n            ))\n        }\n        \"SetName\" => Ok(ActionExpr::SetName(one_string_arg(name, args)?)),\n        \"SetDescription\" => Ok(ActionExpr::SetDescription(one_string_arg(name, args)?)),\n        \"ClassifyExternal\" => {\n            if !args.is_empty() {\n                anyhow::bail!(\"ClassifyExternal() does not accept arguments\");\n            }\n            Ok(ActionExpr::ClassifyExternal)\n        }\n        \"ClassifyInternal\" => {\n            if !args.is_empty() {\n                anyhow::bail!(\"ClassifyInternal() does not accept arguments\");\n            }\n            Ok(ActionExpr::ClassifyInternal)\n        }\n        _ => anyhow::bail!(\"unsupported classifier action '{name}'\"),\n    }\n}\n","sourceCodeStart":122,"sourceCodeEnd":143,"githubUrl":"https://github.com/netdata/netdata/blob/4864de85e26f6734d92cfc27ccbeff5921f49938/src/crates/netflow-plugin/src/enrichment/classifiers/parse/action.rs#L122-L143","documentation":"The classifier rule used an action-function name that the parser does not recognize — the match in `parse_action` fell through to the catch-all arm. This is the parse-time unknown-builtin error; the supported action set is fixed (Reject, Classify*, SetName, SetDescription, ClassifyExternal/Internal, ...).","triggerScenarios":"Writing any unknown function call as a rule term: `SetRole(x)`, `Drop()`, `ClassifyAS(65001)`, or a typo like `SetNam(x)`.","commonSituations":"Typos in action names; assuming parity with another product's classifier DSL (e.g. Akips or ntopng syntax) that has actions this engine lacks; version drift where an action was renamed or not yet available in this build.","solutions":["Check the supported action list in the classifier documentation for this version and use one of those names exactly.","Fix typos/casing — action names are matched literally.","If you need behavior from an action that does not exist, approximate it with SetName/SetDescription plus conditions, or file a feature request."],"exampleFix":"// before\nSetRole(\"edge\")\n\n// after\nClassifyRole(\"edge\")","handlingStrategy":"validation","validationCode":"// Whitelist check before deploy\nconst SUPPORTED: &[&str] = &[\"Reject\", \"Classify\", \"ClassifyGroup\", \"ClassifyRole\",\n    \"ClassifySite\", \"SetName\", \"SetDescription\", \"ClassifyExternal\", \"ClassifyInternal\"];\nfn action_supported(name: &str) -> bool {\n    SUPPORTED.contains(&name)\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep the supported-action list from your version's docs at hand when authoring rules.","Beware muscle memory from other classifier DSLs — action names must match exactly.","After upgrading, re-check the action list; names are matched literally."],"tags":["rust","classifier","config","parse-error","unknown-action"],"backgroundTag":null,"analyzedSha":"4864de85e26f6734d92cfc27ccbeff5921f49938","analyzedAt":"2026-08-15T09:12:38.226Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}