mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2026-04-04 01:01:35 -07:00
The key 'ordeable' in elementOptions was a long-standing typo for the correct English word 'orderable'. Since the JS check in settings_utils.js used the same misspelled key, the feature appeared to work — but it was relying on the consistent propagation of a typo across the entire codebase. Two pre-existing entries in front/plugins/ui_settings/config.json already used the correct spelling 'orderable', but these had no effect because the JavaScript check (option.ordeable === 'true') never matched them. As a result, orderable behavior was silently disabled for those two settings. Changes: - front/js/settings_utils.js: renamed option.ordeable → option.orderable and isOrdeable → isOrderable (6 occurrences, lines 792/823/824/880/1079/ 1192/1228). The JS key check is the authoritative definition of the elementOptions property name, so this must change atomically with all config files. - server/initialise.py:245: renamed "ordeable" → "orderable" in the hardcoded JSON string for LOADED_PLUGINS setting. This string is the source-of-truth for that setting's elementOptions and is not auto- generated from the plugin config files. - front/plugins/*/config.json (33 files, 90 occurrences): renamed all "ordeable": "true" entries to "orderable": "true" via sed. All plugins used the typo consistently; they must be updated in the same commit to avoid a broken intermediate state. The two formerly broken 'orderable' entries in ui_settings/config.json are now matched by the corrected JS check and work as intended. Fixes netalertx/NetAlertX#1584 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
931 lines
24 KiB
JSON
Executable File
931 lines
24 KiB
JSON
Executable File
{
|
|
"code_name": "sync",
|
|
"unique_prefix": "SYNC",
|
|
"plugin_type": "core",
|
|
"enabled": true,
|
|
"data_source": "script",
|
|
"mapped_to_table": "CurrentScan",
|
|
"data_filters": [
|
|
{
|
|
"compare_column": "objectPrimaryId",
|
|
"compare_operator": "==",
|
|
"compare_field_id": "txtMacFilter",
|
|
"compare_js_template": "'{value}'.toString()",
|
|
"compare_use_quotes": true
|
|
}
|
|
],
|
|
"show_ui": true,
|
|
"localized": [
|
|
"display_name",
|
|
"description",
|
|
"icon"
|
|
],
|
|
"display_name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Sync Hub"
|
|
}
|
|
],
|
|
"description": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Plugin to synchronize multiple NetAlertX instances."
|
|
}
|
|
],
|
|
"icon": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "<i class=\"fa fa-group-arrows-rotate\"></i>"
|
|
}
|
|
],
|
|
"params": [],
|
|
"settings": [
|
|
{
|
|
"function": "RUN",
|
|
"events": [
|
|
"run"
|
|
],
|
|
"type": {
|
|
"dataType": "string",
|
|
"elements": [
|
|
{
|
|
"elementType": "select",
|
|
"elementOptions": [],
|
|
"transformers": []
|
|
}
|
|
]
|
|
},
|
|
"default_value": "unused",
|
|
"options": [
|
|
"unused",
|
|
"once",
|
|
"schedule",
|
|
"always_after_scan",
|
|
"on_new_device",
|
|
"on_notification"
|
|
],
|
|
"localized": [
|
|
"name",
|
|
"description"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "When to run [n,h]"
|
|
},
|
|
{
|
|
"language_code": "es_es",
|
|
"string": "Cuándo ejecutar [n,h]"
|
|
},
|
|
{
|
|
"language_code": "de_de",
|
|
"string": "Wann laufen [n,h]"
|
|
}
|
|
],
|
|
"description": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "When the sync should run. Data might be lost if you run the sync less frequently. Good options are <code>always_after_scan</code>, <code>on_new_device</code>, <code>on_notification</code>"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"function": "RUN_SCHD",
|
|
"type": {
|
|
"dataType": "string",
|
|
"elements": [
|
|
{
|
|
"elementType": "span",
|
|
"elementOptions": [
|
|
{
|
|
"cssClasses": "input-group-addon validityCheck"
|
|
},
|
|
{
|
|
"getStringKey": "Gen_ValidIcon"
|
|
}
|
|
],
|
|
"transformers": []
|
|
},
|
|
{
|
|
"elementType": "input",
|
|
"elementOptions": [
|
|
{
|
|
"focusout": "validateRegex(this)"
|
|
},
|
|
{
|
|
"base64Regex": "Xig/OlwqfCg/OlswLTldfFsxLTVdWzAtOV18WzAtOV0rLVswLTldK3xcKi9bMC05XSspKVxzKyg/OlwqfCg/OlswLTldfDFbMC05XXwyWzAtM118WzAtOV0rLVswLTldK3xcKi9bMC05XSspKVxzKyg/OlwqfCg/OlsxLTldfFsxMl1bMC05XXwzWzAxXXxbMC05XSstWzAtOV0rfFwqL1swLTldKykpXHMrKD86XCp8KD86WzEtOV18MVswLTJdfFswLTldKy1bMC05XSt8XCovWzAtOV0rKSlccysoPzpcKnwoPzpbMC02XXxbMC02XS1bMC02XXxcKi9bMC05XSspKSQ="
|
|
}
|
|
],
|
|
"transformers": []
|
|
}
|
|
]
|
|
},
|
|
"default_value": "*/5 * * * *",
|
|
"options": [],
|
|
"localized": [
|
|
"name",
|
|
"description"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Schedule [n,h]"
|
|
}
|
|
],
|
|
"description": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Only enabled if you select <code>schedule</code> in the <a href=\"#SYNC_RUN\"><code>SYNC_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."
|
|
},
|
|
{
|
|
"language_code": "es_es",
|
|
"string": "Solo está habilitado si selecciona <code>schedule</code> en la configuración <a href=\"#SYNC_RUN\"><code>SYNC_RUN</code></a>. Asegúrese de ingresar la programación en el formato similar a cron correcto (por ejemplo, valide en <a href=\"https://crontab.guru/\" target=\"_blank\">crontab.guru</a>). Por ejemplo, ingresar <code>0 4 * * *</code> ejecutará el escaneo después de las 4 a.m. en el <a onclick=\"toggleAllSettings()\" href=\"#TIMEZONE\"><code>TIMEZONE</código> que configuró arriba</a>. Se ejecutará la PRÓXIMA vez que pase el tiempo."
|
|
},
|
|
{
|
|
"language_code": "de_de",
|
|
"string": "Nur aktiviert, wenn Sie <code>schedule</code> in der <a href=\"#SYNC_RUN\"><code>SYNC_RUN</code>-Einstellung</a> auswählen. Stellen Sie sicher, dass Sie den Zeitplan im richtigen Cron-ähnlichen Format eingeben (z. B. validieren unter <a href=\"https://crontab.guru/\" target=\"_blank\">crontab.guru</a>). Wenn Sie beispielsweise <code>0 4 * * *</code> eingeben, wird der Scan nach 4 Uhr morgens in der <a onclick=\"toggleAllSettings()\" href=\"#TIMEZONE\"><code>TIMEZONE</code> ausgeführt, den Sie oben festgelegt haben</a>. Wird das NÄCHSTE Mal ausgeführt, wenn die Zeit vergeht."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"function": "encryption_key",
|
|
"type": {
|
|
"dataType": "string",
|
|
"elements": [
|
|
{
|
|
"elementType": "input",
|
|
"elementHasInputValue": 1,
|
|
"elementOptions": [
|
|
{
|
|
"cssClasses": "col-xs-12"
|
|
}
|
|
],
|
|
"transformers": []
|
|
},
|
|
{
|
|
"elementType": "button",
|
|
"elementOptions": [
|
|
{
|
|
"getStringKey": "Gen_Generate"
|
|
},
|
|
{
|
|
"customParams": "SYNC_encryption_key"
|
|
},
|
|
{
|
|
"onClick": "generateApiToken(this, 30)"
|
|
},
|
|
{
|
|
"cssClasses": "col-xs-12"
|
|
}
|
|
],
|
|
"transformers": []
|
|
}
|
|
]
|
|
},
|
|
"maxLength": 50,
|
|
"default_value": "",
|
|
"options": [],
|
|
"localized": [
|
|
"name",
|
|
"description"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Encryption Key [n,h]"
|
|
}
|
|
],
|
|
"description": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "The encryption key is used to secure data by encrypting it before transmission and decrypting it upon arrival at the hub. For the system to function correctly, the encryption key must be identical on both the hub and all the nodes. Similarly, the <code>API_TOKEN</code> must also be set to the same value across the hub and all the nodes to ensure proper authentication and communication."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"function": "nodes",
|
|
"type": {
|
|
"dataType": "array",
|
|
"elements": [
|
|
{
|
|
"elementType": "input",
|
|
"elementOptions": [
|
|
{
|
|
"placeholder": "Enter full url"
|
|
},
|
|
{
|
|
"suffix": "_in"
|
|
},
|
|
{
|
|
"cssClasses": "col-sm-10"
|
|
},
|
|
{
|
|
"prefillValue": "null"
|
|
}
|
|
],
|
|
"transformers": []
|
|
},
|
|
{
|
|
"elementType": "button",
|
|
"elementOptions": [
|
|
{
|
|
"sourceSuffixes": [
|
|
"_in"
|
|
]
|
|
},
|
|
{
|
|
"separator": ""
|
|
},
|
|
{
|
|
"cssClasses": "col-xs-12"
|
|
},
|
|
{
|
|
"onClick": "addList(this, false)"
|
|
},
|
|
{
|
|
"getStringKey": "Gen_Add"
|
|
}
|
|
],
|
|
"transformers": []
|
|
},
|
|
{
|
|
"elementType": "select",
|
|
"elementHasInputValue": 1,
|
|
"elementOptions": [
|
|
{
|
|
"multiple": "true"
|
|
},
|
|
{
|
|
"readonly": "true"
|
|
},
|
|
{
|
|
"editable": "true"
|
|
}
|
|
],
|
|
"transformers": []
|
|
},
|
|
{
|
|
"elementType": "button",
|
|
"elementOptions": [
|
|
{
|
|
"sourceSuffixes": []
|
|
},
|
|
{
|
|
"separator": ""
|
|
},
|
|
{
|
|
"cssClasses": "col-xs-6"
|
|
},
|
|
{
|
|
"onClick": "removeAllOptions(this)"
|
|
},
|
|
{
|
|
"getStringKey": "Gen_Remove_All"
|
|
}
|
|
],
|
|
"transformers": []
|
|
},
|
|
{
|
|
"elementType": "button",
|
|
"elementOptions": [
|
|
{
|
|
"sourceSuffixes": []
|
|
},
|
|
{
|
|
"separator": ""
|
|
},
|
|
{
|
|
"cssClasses": "col-xs-6"
|
|
},
|
|
{
|
|
"onClick": "removeFromList(this)"
|
|
},
|
|
{
|
|
"getStringKey": "Gen_Remove_Last"
|
|
}
|
|
],
|
|
"transformers": []
|
|
}
|
|
]
|
|
},
|
|
"default_value": [],
|
|
"options": [],
|
|
"localized": [
|
|
"name",
|
|
"description"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Nodes [h]"
|
|
}
|
|
],
|
|
"description": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "If specified, the hub will pull Devices data from the listed nodes. The <code>API_TOKEN</code> and <code>SYNC_encryption_key</code> must be set to the same value across the hub and all the nodes to ensure proper authentication and communication. Add full host URL and use the value of the <code>GRAPHQL_PORT</code> setting of the target, as the port."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"function": "hub_url",
|
|
"type": {
|
|
"dataType": "string",
|
|
"elements": [
|
|
{
|
|
"elementType": "input",
|
|
"elementOptions": [],
|
|
"transformers": []
|
|
}
|
|
]
|
|
},
|
|
"maxLength": 50,
|
|
"default_value": "",
|
|
"options": [],
|
|
"localized": [
|
|
"name",
|
|
"description"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Hub URL [n]"
|
|
}
|
|
],
|
|
"description": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "If specified, this node will push data to the <code>GRAPHQL_PORT</code> API of the target. Use the target device <code>GRAPHQL_PORT</code> URL Without a trailing slash, for example <code>http://192.168.1.82:20212</code>"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"function": "node_name",
|
|
"type": {
|
|
"dataType": "string",
|
|
"elements": [
|
|
{
|
|
"elementType": "input",
|
|
"elementHasInputValue": 1,
|
|
"elementOptions": [
|
|
{
|
|
"cssClasses": "col-xs-12"
|
|
}
|
|
],
|
|
"transformers": []
|
|
},
|
|
{
|
|
"elementType": "button",
|
|
"elementOptions": [
|
|
{
|
|
"getStringKey": "Gen_Generate"
|
|
},
|
|
{
|
|
"customParams": "SYNC_node_name"
|
|
},
|
|
{
|
|
"onClick": "generateNaxNodeName(this)"
|
|
},
|
|
{
|
|
"cssClasses": "col-xs-12"
|
|
}
|
|
],
|
|
"transformers": []
|
|
}
|
|
]
|
|
},
|
|
"maxLength": 50,
|
|
"default_value": "",
|
|
"options": [],
|
|
"localized": [
|
|
"name",
|
|
"description"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Node name [n]"
|
|
}
|
|
],
|
|
"description": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "The unique name of this node, without spaces or special characters, such as <code>Node_Vlan01</code>"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"function": "devices",
|
|
"type": {
|
|
"dataType": "boolean",
|
|
"elements": [
|
|
{
|
|
"elementType": "input",
|
|
"elementOptions": [
|
|
{
|
|
"type": "checkbox"
|
|
}
|
|
],
|
|
"transformers": []
|
|
}
|
|
]
|
|
},
|
|
"default_value": false,
|
|
"options": [],
|
|
"localized": [
|
|
"name",
|
|
"description"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Sync Devices [n]"
|
|
}
|
|
],
|
|
"description": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "When enabled the whole Devices table is sent over. Only new devices with new MACs are inserted in the target hub."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"function": "plugins",
|
|
"type": {
|
|
"dataType": "array",
|
|
"elements": [
|
|
{
|
|
"elementType": "select",
|
|
"elementOptions": [
|
|
{
|
|
"multiple": "true",
|
|
"orderable": "true"
|
|
}
|
|
],
|
|
"transformers": []
|
|
}
|
|
]
|
|
},
|
|
"maxLength": 50,
|
|
"default_value": [],
|
|
"options": [
|
|
"{value}"
|
|
],
|
|
"options_params": [
|
|
{
|
|
"name": "value",
|
|
"type": "setting",
|
|
"value": "LOADED_PLUGINS"
|
|
}
|
|
],
|
|
"localized": [
|
|
"name",
|
|
"description"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Sync Plugins [n]"
|
|
}
|
|
],
|
|
"description": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Plugins to synchronize. Only plugins that produce some kind of output in <code>last_result.log</code> can be synchronized."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"function": "CMD",
|
|
"type": {
|
|
"dataType": "string",
|
|
"elements": [
|
|
{
|
|
"elementType": "input",
|
|
"elementOptions": [
|
|
{
|
|
"readonly": "true"
|
|
}
|
|
],
|
|
"transformers": []
|
|
}
|
|
]
|
|
},
|
|
"default_value": "python3 /app/front/plugins/sync/sync.py",
|
|
"options": [],
|
|
"localized": [
|
|
"name",
|
|
"description"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Command"
|
|
},
|
|
{
|
|
"language_code": "es_es",
|
|
"string": "Comando"
|
|
},
|
|
{
|
|
"language_code": "de_de",
|
|
"string": "Befehl"
|
|
}
|
|
],
|
|
"description": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Command to run. This can not be changed"
|
|
},
|
|
{
|
|
"language_code": "es_es",
|
|
"string": "Comando a ejecutar. Esto no se puede cambiar"
|
|
},
|
|
{
|
|
"language_code": "de_de",
|
|
"string": "Befehl zum Ausführen. Dies kann nicht geändert werden"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"function": "RUN_TIMEOUT",
|
|
"type": {
|
|
"dataType": "integer",
|
|
"elements": [
|
|
{
|
|
"elementType": "input",
|
|
"elementOptions": [
|
|
{
|
|
"type": "number"
|
|
}
|
|
],
|
|
"transformers": []
|
|
}
|
|
]
|
|
},
|
|
"default_value": 30,
|
|
"options": [],
|
|
"localized": [
|
|
"name",
|
|
"description"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Run timeout"
|
|
},
|
|
{
|
|
"language_code": "es_es",
|
|
"string": "Tiempo límite de ejecución"
|
|
},
|
|
{
|
|
"language_code": "de_de",
|
|
"string": "Zeitüberschreitung"
|
|
}
|
|
],
|
|
"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."
|
|
},
|
|
{
|
|
"language_code": "es_es",
|
|
"string": "Tiempo máximo en segundos para esperar a que finalice el script. Si se supera este tiempo, el script se cancela."
|
|
},
|
|
{
|
|
"language_code": "de_de",
|
|
"string": "Maximale Zeit in Sekunden, die auf den Abschluss des Skripts gewartet werden soll. Bei Überschreitung dieser Zeit wird das Skript abgebrochen."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"function": "SET_ALWAYS",
|
|
"type": {
|
|
"dataType": "array",
|
|
"elements": [
|
|
{
|
|
"elementType": "select",
|
|
"elementOptions": [{ "multiple": "true", "orderable": "true" }],
|
|
"transformers": []
|
|
}
|
|
]
|
|
},
|
|
"default_value": ["devMac", "devLastIP"],
|
|
"options": [
|
|
"devMac",
|
|
"devName",
|
|
"devVendor"
|
|
],
|
|
"localized": ["name", "description"],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Set always columns"
|
|
}
|
|
],
|
|
"description": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "These columns are treated as authoritative and will overwrite existing values, including those set by other plugins, unless the current value was explicitly set by the user (<code>Source = USER</code> or <code>Source = LOCKED</code>)."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"function": "SET_EMPTY",
|
|
"type": {
|
|
"dataType": "array",
|
|
"elements": [
|
|
{
|
|
"elementType": "select",
|
|
"elementOptions": [{ "multiple": "true", "orderable": "true" }],
|
|
"transformers": []
|
|
}
|
|
]
|
|
},
|
|
"default_value": [],
|
|
"options": [
|
|
"devMac",
|
|
"devLastIP",
|
|
"devName",
|
|
"devVendor",
|
|
"devSyncHubNode",
|
|
"devSourcePlugin"
|
|
],
|
|
"localized": ["name", "description"],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Set empty columns"
|
|
}
|
|
],
|
|
"description": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "These columns are only overwritten if they are empty (<code>NULL</code> / empty string) or if their Source is set to <code>NEWDEV</code>"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"database_column_definitions": [
|
|
{
|
|
"column": "index",
|
|
"css_classes": "col-sm-2",
|
|
"show": true,
|
|
"type": "none",
|
|
"default_value": "",
|
|
"options": [],
|
|
"localized": [
|
|
"name"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Index"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"column": "objectPrimaryId",
|
|
"mapped_to_column": "scanMac",
|
|
"css_classes": "col-sm-3",
|
|
"show": true,
|
|
"type": "device_name_mac",
|
|
"default_value": "",
|
|
"options": [],
|
|
"localized": [
|
|
"name"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "MAC (name)"
|
|
},
|
|
{
|
|
"language_code": "es_es",
|
|
"string": "MAC"
|
|
},
|
|
{
|
|
"language_code": "de_de",
|
|
"string": "MAC"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"column": "objectSecondaryId",
|
|
"mapped_to_column": "scanLastIP",
|
|
"css_classes": "col-sm-2",
|
|
"show": true,
|
|
"type": "device_ip",
|
|
"default_value": "",
|
|
"options": [],
|
|
"localized": [
|
|
"name"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "IP"
|
|
},
|
|
{
|
|
"language_code": "es_es",
|
|
"string": "IP"
|
|
},
|
|
{
|
|
"language_code": "de_de",
|
|
"string": "IP"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"column": "watchedValue1",
|
|
"mapped_to_column": "scanName",
|
|
"css_classes": "col-sm-2",
|
|
"show": true,
|
|
"type": "label",
|
|
"default_value": "",
|
|
"options": [],
|
|
"localized": [
|
|
"name"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Name"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"column": "watchedValue2",
|
|
"mapped_to_column": "scanVendor",
|
|
"css_classes": "col-sm-2",
|
|
"show": true,
|
|
"type": "label",
|
|
"default_value": "",
|
|
"options": [],
|
|
"localized": [
|
|
"name"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Vendor"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"column": "watchedValue3",
|
|
"mapped_to_column": "scanSyncHubNode",
|
|
"css_classes": "col-sm-2",
|
|
"show": true,
|
|
"type": "label",
|
|
"default_value": "",
|
|
"options": [],
|
|
"localized": [
|
|
"name"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Sync Node"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"column": "watchedValue4",
|
|
"css_classes": "col-sm-2",
|
|
"show": true,
|
|
"type": "label",
|
|
"default_value": "",
|
|
"options": [],
|
|
"localized": [
|
|
"name"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Device GUID"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"column": "Dummy",
|
|
"mapped_to_column": "scanSourcePlugin",
|
|
"mapped_to_column_data": {
|
|
"value": "sync"
|
|
},
|
|
"css_classes": "col-sm-2",
|
|
"show": false,
|
|
"type": "label",
|
|
"default_value": "",
|
|
"options": [],
|
|
"localized": [
|
|
"name"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Scan method"
|
|
},
|
|
{
|
|
"language_code": "es_es",
|
|
"string": "Método de escaneo"
|
|
},
|
|
{
|
|
"language_code": "de_de",
|
|
"string": "Scanmethode"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"column": "dateTimeCreated",
|
|
"css_classes": "col-sm-2",
|
|
"show": true,
|
|
"type": "label",
|
|
"default_value": "",
|
|
"options": [],
|
|
"localized": [
|
|
"name"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Created"
|
|
},
|
|
{
|
|
"language_code": "es_es",
|
|
"string": "Creado"
|
|
},
|
|
{
|
|
"language_code": "de_de",
|
|
"string": "Erstellt"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"column": "dateTimeChanged",
|
|
"css_classes": "col-sm-2",
|
|
"show": true,
|
|
"type": "label",
|
|
"default_value": "",
|
|
"options": [],
|
|
"localized": [
|
|
"name"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Changed"
|
|
},
|
|
{
|
|
"language_code": "es_es",
|
|
"string": "Cambiado"
|
|
},
|
|
{
|
|
"language_code": "de_de",
|
|
"string": "Geändert"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"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>"
|
|
},
|
|
{
|
|
"equals": "missing-in-last-scan",
|
|
"replacement": "<div style='text-align:center'><i class='fa-solid fa-question'></i></div>"
|
|
}
|
|
],
|
|
"localized": [
|
|
"name"
|
|
],
|
|
"name": [
|
|
{
|
|
"language_code": "en_us",
|
|
"string": "Status"
|
|
},
|
|
{
|
|
"language_code": "es_es",
|
|
"string": "Estado"
|
|
},
|
|
{
|
|
"language_code": "de_de",
|
|
"string": "Status"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
} |