{
  "jsonSchema": {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "properties": {
      "update_every": {
        "title": "Update every",
        "description": "Data collection interval, measured in seconds.",
        "type": "integer",
        "minimum": 1,
        "default": 10
      },
      "hostname": {
        "title": "Hostname",
        "description": "The hostname or IP address of the SNMP-enabled device.",
        "type": "string"
      },
      "community": {
        "title": "SNMPv1/2 community",
        "description": "The SNMP community string for SNMPv1/v2c authentication.",
        "type": "string",
        "default": "public"
      },
      "create_vnode": {
        "title": "Create",
        "description": "If set, the collector will create a [Virtual Node](https://learn.netdata.cloud/docs/netdata-agent/configuration/organize-systems-metrics-and-alerts#virtual-nodes) for this SNMP device, which will appear as a separate Node in Netdata.",
        "type": "boolean",
        "default": true
      },
      "vnode": {
        "title": "Configuration",
        "description": "",
        "type": [
          "object",
          "null"
        ],
        "properties": {
          "guid": {
            "title": "GUID",
            "description": "A unique identifier for the Virtual Node. If not set, a GUID will be automatically generated from the device's IP address.",
            "type": "string"
          },
          "hostname": {
            "title": "Hostname",
            "description": "The hostname that will be used for the Virtual Node. If not set, the device's hostname will be used.",
            "type": "string"
          },
          "labels": {
            "title": "Labels",
            "description": "Additional key-value pairs to associate with the Virtual Node.",
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "network_interface_filter": {
        "title": "Network interface filter",
        "description": "Configuration for filtering specific network interfaces. If left empty, no interfaces will be filtered. You can filter interfaces by name or type using [simple patterns](/src/libnetdata/simple_pattern/README.md#simple-patterns).",
        "type": [
          "object",
          "null"
        ],
        "properties": {
          "by_name": {
            "title": "By Name",
            "description": "Specify the interface name or a pattern to match against the [ifName](https://cric.grenoble.cnrs.fr/Administrateurs/Outils/MIBS/?oid=1.3.6.1.2.1.31.1.1.1.1) label.",
            "type": "string"
          },
          "by_type": {
            "title": "By Type",
            "description": "Specify the interface type or a pattern to match against the [ifType](https://cric.grenoble.cnrs.fr/Administrateurs/Outils/MIBS/?oid=1.3.6.1.2.1.2.2.1.3) label.",
            "type": "string"
          }
        }
      },
      "options": {
        "title": "Options",
        "description": "Configuration options for SNMP monitoring.",
        "type": [
          "object",
          "null"
        ],
        "properties": {
          "version": {
            "title": "SNMP version",
            "type": "string",
            "enum": [
              "1",
              "2c",
              "3"
            ],
            "default": "2c"
          },
          "port": {
            "title": "Port",
            "description": "The port number on which the SNMP service is running.",
            "type": "integer",
            "exclusiveMinimum": 0,
            "default": 161
          },
          "timeout": {
            "title": "Timeout",
            "description": "The timeout duration in seconds for SNMP requests.",
            "type": "integer",
            "minimum": 1,
            "default": 5
          },
          "retries": {
            "title": "Retries",
            "description": "The number of retries to attempt for SNMP requests.",
            "type": "integer",
            "minimum": 0,
            "default": 1
          },
          "max_repetitions": {
            "title": "Max repetitions",
            "description": "Controls how many SNMP variables to retrieve in a single GETBULK request.",
            "type": "integer",
            "minimum": 1,
            "default": 25
          },
          "max_request_size": {
            "title": "Max OIDs",
            "description": "The maximum number of OIDs allowed in a single GET request.",
            "type": "integer",
            "minimum": 1,
            "default": 60
          }
        },
        "required": [
          "version",
          "port",
          "retries",
          "timeout",
          "max_request_size"
        ]
      },
      "user": {
        "title": "SNMPv3 configuration",
        "description": "Configuration options for SNMPv3 authentication and encryption.",
        "type": [
          "object",
          "null"
        ],
        "properties": {
          "name": {
            "title": "Username",
            "description": "The username for SNMPv3 authentication.",
            "type": "string"
          },
          "level": {
            "title": "Security level",
            "description": "Controls the security aspects of SNMPv3 communication, including authentication and encryption.",
            "type": "string",
            "enum": [
              "none",
              "authNoPriv",
              "authPriv"
            ],
            "default": "authPriv"
          },
          "auth_proto": {
            "title": "Authentication protocol",
            "type": "string",
            "enum": [
              "none",
              "md5",
              "sha",
              "sha224",
              "sha256",
              "sha384",
              "sha512"
            ],
            "default": "sha512"
          },
          "auth_key": {
            "title": "Authentication passphrase",
            "type": "string"
          },
          "priv_proto": {
            "title": "Privacy protocol",
            "type": "string",
            "enum": [
              "none",
              "des",
              "aes",
              "aes192",
              "aes256",
              "aes192c"
            ],
            "default": "aes192c"
          },
          "priv_key": {
            "title": "Privacy passphrase",
            "type": "string"
          }
        }
      },
      "charts": {
        "title": "Charts configuration",
        "type": [
          "array",
          "null"
        ],
        "uniqueItems": true,
        "items": {
          "title": "Chart",
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "id": {
              "title": "ID",
              "description": "Unique identifier for the chart.",
              "type": "string"
            },
            "title": {
              "title": "Title",
              "description": "Title of the chart.",
              "type": "string"
            },
            "units": {
              "title": "Units",
              "description": "Unit label for the vertical axis on charts.",
              "type": "string"
            },
            "family": {
              "title": "Family",
              "description": "Subsection on the dashboard where the chart will be displayed.",
              "type": "string"
            },
            "type": {
              "title": "Type",
              "type": "string",
              "enum": [
                "line",
                "area",
                "stacked"
              ],
              "default": "line"
            },
            "priority": {
              "title": "Priority",
              "description": "Rendering priority of the chart on the dashboard. Lower priority values will cause the chart to appear before those with higher priority values.",
              "type": "integer",
              "minimum": 1,
              "default": 90000
            },
            "multiply_range": {
              "title": "OID index range",
              "description": "Specifies the range of indexes used to create multiple charts. If set, a chart will be created for each index in the specified range. Each chart will have the index appended to the OID dimension.",
              "type": [
                "array",
                "null"
              ],
              "items": {
                "title": "Index",
                "type": "integer",
                "minimum": 0
              },
              "uniqueItems": true,
              "maxItems": 2
            },
            "dimensions": {
              "title": "Dimensions",
              "description": "Configuration for dimensions of the chart.",
              "type": [
                "array",
                "null"
              ],
              "uniqueItems": true,
              "minItems": 1,
              "items": {
                "title": "Dimension configuration",
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "oid": {
                    "title": "OID",
                    "description": "SNMP OID.",
                    "type": "string"
                  },
                  "name": {
                    "title": "Dimension",
                    "description": "Name of the dimension.",
                    "type": "string"
                  },
                  "algorithm": {
                    "title": "Algorithm",
                    "description": "Algorithm of the dimension.",
                    "type": "string",
                    "enum": [
                      "absolute",
                      "incremental"
                    ],
                    "default": "absolute"
                  },
                  "multiplier": {
                    "title": "Multiplier",
                    "description": "Value to multiply the collected value.",
                    "type": "integer",
                    "not": {
                      "const": 0
                    },
                    "default": 1
                  },
                  "divisor": {
                    "title": "Divisor",
                    "description": "Value to divide the collected value.",
                    "type": "integer",
                    "not": {
                      "const": 0
                    },
                    "default": 1
                  }
                },
                "required": [
                  "oid",
                  "name",
                  "algorithm",
                  "multiplier",
                  "divisor"
                ]
              }
            }
          },
          "required": [
            "id",
            "title",
            "units",
            "family",
            "type",
            "priority",
            "dimensions"
          ]
        }
      }
    },
    "required": [
      "hostname",
      "community",
      "options"
    ],
    "patternProperties": {
      "^name$": {}
    }
  },
  "uiSchema": {
    "uiOptions": {
      "fullPage": true
    },
    "network_interface_filter": {
      "ui:collapsible": true
    },
    "community": {
      "ui:widget": "password"
    },
    "options": {
      "version": {
        "ui:widget": "radio",
        "ui:options": {
          "inline": true
        }
      },
      "max_repetitions": {
        "ui:help": "A higher value retrieves more data in fewer round trips, potentially improving efficiency. This reduces network overhead compared to sending multiple individual requests. **Important**: Setting a value too high might cause the target device to return no data."
      }
    },
    "user": {
      "name": {
        "ui:widget": "password"
      },
      "level": {
        "ui:widget": "radio",
        "ui:options": {
          "inline": true
        }
      },
      "auth_proto": {
        "ui:widget": "radio",
        "ui:options": {
          "inline": true
        }
      },
      "priv_proto": {
        "ui:widget": "radio",
        "ui:options": {
          "inline": true
        }
      }
    },
    "charts": {
      "items": {
        "ui:collapsible": true,
        "type": {
          "ui:widget": "radio",
          "ui:options": {
            "inline": true
          }
        },
        "multiply_range": {
          "ui:listFlavour": "list"
        },
        "dimensions": {
          "items": {
            "ui:collapsible": true,
            "algorithm": {
              "ui:widget": "radio",
              "ui:options": {
                "inline": true
              }
            }
          }
        }
      }
    },
    "ui:flavour": "tabs",
    "ui:options": {
      "tabs": [
        {
          "title": "Base",
          "fields": [
            "update_every",
            "hostname",
            "community"
          ]
        },
        {
          "title": "Vnode",
          "fields": [
            "create_vnode",
            "vnode"
          ]
        },
        {
          "title": "Options",
          "fields": [
            "network_interface_filter",
            "options"
          ]
        },
        {
          "title": "SNMPv3",
          "fields": [
            "user"
          ]
        },
        {
          "title": "Charts",
          "fields": [
            "charts"
          ]
        }
      ]
    }
  }
}
