{
    "code_name": "snmp_discovery",
    "unique_prefix": "SNMPDSC",
    "enabled": true,    
    "data_source":  "script",
    "data_filters": [
        {
            "compare_column" : "Object_PrimaryID",
            "compare_operator" : "==",
            "compare_field_id": "txtMacFilter",
            "compare_js_template": "'{value}'.toString()", 
            "compare_use_quotes": true 
        }
    ],
    "show_ui": true,
    "localized": ["display_name", "description", "icon"],
    "mapped_to_table": "DHCP_Leases",    
    "display_name" : [{
        "language_code":"en_us",
        "string" : "SNMP discovery"
    }],
    "icon":[{
        "language_code":"en_us",
        "string" : "<i class=\"fa-solid fa-s\"></i>"
    }],     
    "description": [{
        "language_code":"en_us",
        "string" : "This plugin is used to discover devices via the arp table(s) of a RFC1213 compliant router or switch."
    }],
    "params" : [
        {
            "name"  : "routers",
            "type"  : "setting",
            "value" : "SNMPDSC_routers"
        }
    ], 
    "database_column_definitions":
    [          
        {
            "column": "Index",            
            "css_classes": "col-sm-2",
            "show": false,
            "type": "label",            
            "default_value":"",
            "options": [],
            "localized": ["name"],
            "name":[{
                "language_code":"en_us",
                "string" : "N/A"
                }]
        } ,
        {
            "column": "Plugin",
            "css_classes": "col-sm-2",
            "show": false,
            "type": "label",            
            "default_value":"",
            "options": [],
            "localized": ["name"],
            "name":[{
                "language_code":"en_us",
                "string" : "N/A"
                }]
        },
        {
            "column": "Object_PrimaryID",
            "mapped_to_column": "DHCP_MAC", 
            "css_classes": "col-sm-2",
            "show": true,
            "type": "devicemac",            
            "default_value":"",
            "options": [],
            "localized": ["name"],
            "name":[{
                "language_code":"en_us",
                "string" : "MAC address"
                }]
        },
        {
            "column": "Object_SecondaryID",
            "mapped_to_column": "DHCP_IP", 
            "css_classes": "col-sm-2",
            "show": true,
            "type": "deviceip",            
            "default_value":"",
            "options": [],
            "localized": ["name"],
            "name":[{
                "language_code":"en_us",
                "string" : "IP"
                }]
        } ,
        {
            "column": "DateTimeCreated",
            "css_classes": "col-sm-2",
            "show": true,
            "type": "label",            
            "default_value":"",
            "options": [],
            "localized": ["name"],
            "name":[{
                "language_code":"en_us",
                "string" : "Created"
                }]
        },
        {
            "column": "DateTimeChanged",
            "mapped_to_column": "DHCP_DateTime", 
            "css_classes": "col-sm-2",
            "show": true,
            "type": "label",            
            "default_value":"",
            "options": [],
            "localized": ["name"],
            "name":[{
                "language_code":"en_us",
                "string" : "Changed"
                }]
        },
        {
            "column": "Watched_Value1",
            "mapped_to_column": "DHCP_Name", 
            "css_classes": "col-sm-2",
            "show": true,
            "type": "label",            
            "default_value":"(unknown)",
            "options": [],
            "localized": ["name"],
            "name":[{
                "language_code":"en_us",
                "string" : "Hostname"
                }]
        },
        {
            "column": "Watched_Value2",            
            "css_classes": "col-sm-2",
            "show": true,
            "type": "label",            
            "default_value":"",
            "options": [],
            "localized": ["name"],
            "name":[{
                "language_code":"en_us",
                "string" : "Router IP"
                }]
        },
        {
            "column": "Watched_Value3",
            "css_classes": "col-sm-2",
            "show": false,
            "type": "label",            
            "default_value":"",
            "options": [],
            "localized": ["name"],
            "name":[{
                "language_code":"en_us",
                "string" : "Type"
                }]
        } ,
        {
            "column": "Watched_Value4",
            "css_classes": "col-sm-2",
            "show": false,
            "type": "label",            
            "default_value":"",
            "options": [],
            "localized": ["name"],
            "name":[{
                "language_code":"en_us",
                "string" : "Network"
                }]
        } ,       
        {
            "column": "UserData",
            "css_classes": "col-sm-2",
            "show": false,
            "type": "textboxsave",            
            "default_value":"",
            "options": [],
            "localized": ["name"],
            "name":[{
                "language_code":"en_us",
                "string" : "Comments"
                }]
        },        
        {
            "column": "Extra",
            "css_classes": "col-sm-3",
            "show": true,
            "type": "label",            
            "default_value":"",
            "options": [],
            "localized": ["name"],
            "name":[{
                "language_code":"en_us",
                "string" : "RAW output"
                }]
        },        
        {
            "column": "Status",
            "css_classes": "col-sm-1",
            "show": true,
            "type": "replace",            
            "default_value":"",
            "options": [
                {
                    "equals": "watched-not-changed",
                    "replacement": "<div style='text-align:center'><i class='fa-solid fa-square-check'></i><div></div>"
                },
                {
                    "equals": "watched-changed",
                    "replacement": "<div style='text-align:center'><i class='fa-solid fa-triangle-exclamation'></i></div>"
                },
                {
                    "equals": "new",
                    "replacement": "<div style='text-align:center'><i class='fa-solid fa-circle-plus'></i></div>"
                }
            ],
            "localized": ["name"],
            "name":[{
                "language_code":"en_us",
                "string" : "Status"
                }]
        }            
    ],
    "settings":[
        {
            "function": "RUN",            
            "type": "text.select",            
            "default_value":"disabled",
            "options": ["disabled", "once", "schedule", "always_after_scan", "on_new_device"],
            "localized": ["name", "description"],
            "name" :[{
                "language_code":"en_us",
                "string" : "When to run"
            }],
            "description": [{
                "language_code":"en_us",
                "string" : "Enable import of devices from a SNMP enabled device. If you select <code>schedule</code> the scheduling settings from below are applied. If you select <code>once</code> the scan is run only once on start of the application (container) or after you update your settings."
            }]
        },
        {
            "function": "CMD",
            "type": "text",
            "default_value":"python3 /home/pi/pialert/front/plugins/snmp_discovery/script.py routers={s-quote}{routers}{s-quote}",
            "options": [],
            "localized": ["name", "description"],
            "name" : [{
                "language_code":"en_us",
                "string" : "Command"
            }],
            "description": [{
                "language_code":"en_us",
                "string" : "Command to run. Not recommended to change."
            }]
        },
        {
            "function": "routers",
            "type": "list",
            "default_value":["snmpwalk -v 2c -c public -OXsq 192.168.1.1 .1.3.6.1.2.1.3.1.1.2"],
            "options": [],
            "localized": ["name", "description"],
            "name" : [{
                "language_code":"en_us",
                "string" : "Routers"
            }],
            "description": [{
                "language_code":"en_us",
                "string" : "A list of <code>snmpwalk</code> commands to execute against IP addresses of roputers/switches with SNMP turned on. <br/> <br/> Example with the router on the IP <code>192.168.1.1</code>: <br/> <code>snmpwalk -v 2c -c public -OXsq 192.168.1.1 .1.3.6.1.2.1.3.1.1.2</code> <br/><br/> Only IPv4 supported. Authentication is not supported. More info on the plugin <a href='https://github.com/jokob-sk/Pi.Alert/tree/main/front/plugins/snmp_discovery' target='_blank'>here</a>."
            }]
        },
        {
            "function": "RUN_SCHD",
            "type": "text",
            "default_value":"0 2 * * *",
            "options": [],
            "localized": ["name", "description"],
            "name" : [{
                "language_code":"en_us",
                "string" : "Schedule"
            }],
            "description": [{
                "language_code":"en_us",
                "string" : "Only enabled if you select <code>schedule</code> in the <a href=\"#SNMPDSC_RUN\"><code>SNMPDSC_RUN</code> setting</a>. Make sure you enter the schedule in the correct cron-like format (e.g. validate at <a href=\"https://crontab.guru/\" target=\"_blank\">crontab.guru</a>). For example entering <code>0 4 * * *</code> will run the scan after 4 am in the <a onclick=\"toggleAllSettings()\" href=\"#TIMEZONE\"><code>TIMEZONE</code> you set above</a>. Will be run NEXT time the time passes."
            }]
        },
        {
            "function": "RUN_TIMEOUT",
            "type": "integer",
            "default_value":5,
            "options": [],
            "localized": ["name", "description"],
            "name" : [{
                "language_code":"en_us",
                "string" : "Run timeout"
            },
            {
                "language_code":"de_de",
                "string" : "Wartezeit"
            }],
            "description": [{
                "language_code":"en_us",
                "string" : "Maximum time in seconds to wait for the script to finish. If this time is exceeded the script is aborted."
            }]
        },
        {
            "function": "WATCH",
            "type": "text.multiselect",
            "default_value":["Watched_Value1"],
            "options": ["Watched_Value1","Watched_Value2","Watched_Value3","Watched_Value4"],
            "localized": ["name", "description"],
            "name" :[{
                "language_code":"en_us",
                "string" : "Watched"
            }] ,
            "description":[{
                "language_code":"en_us",
                "string" : "Send a notification if selected values change. Use <code>CTRL + Click</code> to select/deselect. <ul> <li><code>Watched_Value1</code> is Hostname (not discoverable) </li><li><code>Watched_Value2</code> is Router IP </li><li><code>Watched_Value3</code> is not used </li><li><code>Watched_Value4</code> is not used </li></ul>"
            }] 
        },
        {
            "function": "REPORT_ON",
            "type": "text.multiselect",
            "default_value":["new","watched-changed"],
            "options": ["new","watched-changed","watched-not-changed"],
            "localized": ["name", "description"],
            "name" :[{
                "language_code":"en_us",
                "string" : "Report on"
            }] ,
            "description":[{
                "language_code":"en_us",
                "string" : "Send a notification only on these statuses. <code>new</code> means a new unique (unique combination of PrimaryId and SecondaryId) object was discovered. <code>watched-changed</code> means that selected <code>Watched_ValueN</code> columns changed."
            }] 
        }
    ]
}

