602 lines
21 KiB
Plaintext
602 lines
21 KiB
Plaintext
{
|
|
"custom": {
|
|
"auth": {
|
|
"almAck": true,
|
|
"almShelve": true,
|
|
"config": true,
|
|
"control": true
|
|
},
|
|
"filters": {
|
|
"alm": [],
|
|
"prov": [],
|
|
"tag": []
|
|
}
|
|
},
|
|
"params": {},
|
|
"propConfig": {
|
|
"custom.auth": {
|
|
"binding": {
|
|
"config": {
|
|
"path": "session.props.auth.user.roles"
|
|
},
|
|
"transforms": [
|
|
{
|
|
"code": "\treturn utils.roles.validate(value)",
|
|
"type": "script"
|
|
}
|
|
],
|
|
"type": "property"
|
|
},
|
|
"persistent": true
|
|
},
|
|
"custom.filters": {
|
|
"onChange": {
|
|
"enabled": null,
|
|
"script": "\tif currentValue is not None:\n\t\tself.getChild(\"root\").getChild(\"AlarmJournalTable\").refreshData()"
|
|
},
|
|
"persistent": true
|
|
}
|
|
},
|
|
"props": {},
|
|
"root": {
|
|
"children": [
|
|
{
|
|
"children": [
|
|
{
|
|
"children": [
|
|
{
|
|
"meta": {
|
|
"name": "Label"
|
|
},
|
|
"position": {
|
|
"basis": "75px",
|
|
"shrink": 0
|
|
},
|
|
"props": {
|
|
"style": {
|
|
"backgroundColor": "var(--neutral-30)"
|
|
},
|
|
"text": "IO GW:",
|
|
"textStyle": {
|
|
"fontSize": "0.6em",
|
|
"textAlign": "center",
|
|
"textTransform": "uppercase"
|
|
}
|
|
},
|
|
"type": "ia.display.label"
|
|
},
|
|
{
|
|
"meta": {
|
|
"name": "FlexRepeater"
|
|
},
|
|
"position": {
|
|
"grow": 1,
|
|
"shrink": 0
|
|
},
|
|
"props": {
|
|
"alignItems": "flex-start",
|
|
"elementPosition": {
|
|
"basis": "auto",
|
|
"grow": 0,
|
|
"shrink": 0
|
|
},
|
|
"instances": [
|
|
{
|
|
"color": "var(--callToAction)",
|
|
"filterString": "prov:Ignition_Common_IO_Gtwy",
|
|
"instancePosition": {},
|
|
"instanceStyle": {
|
|
"classes": ""
|
|
},
|
|
"label": "Ignition_Common_IO_Gtwy",
|
|
"source": "prov"
|
|
},
|
|
{
|
|
"color": "var(--callToAction)",
|
|
"filterString": "prov:Ignition_SATB1_IO1_default",
|
|
"instancePosition": {},
|
|
"instanceStyle": {
|
|
"classes": ""
|
|
},
|
|
"label": "Ignition_SATB1_IO1_default",
|
|
"source": "prov"
|
|
}
|
|
],
|
|
"path": "Library/Templates/Framework/Pill Button",
|
|
"style": {
|
|
"gap": "5px",
|
|
"padding": "8px 5px"
|
|
},
|
|
"useDefaultViewHeight": false,
|
|
"useDefaultViewWidth": false,
|
|
"wrap": "wrap"
|
|
},
|
|
"type": "ia.display.flex-repeater"
|
|
},
|
|
{
|
|
"children": [
|
|
{
|
|
"events": {
|
|
"component": {
|
|
"onActionPerformed": {
|
|
"config": {
|
|
"script": "\tsource \u003d self.parent.parent.meta.name\n\tsystem.perspective.sendMessage(\u0027clearFilters\u0027, {\n\t\t\u0027source\u0027: source\n\t})\n\tself.parent.parent.parent.parent.getChild(\"AlarmStatusTable\").custom.filters[source] \u003d []"
|
|
},
|
|
"scope": "G",
|
|
"type": "script"
|
|
}
|
|
}
|
|
},
|
|
"meta": {
|
|
"name": "Button"
|
|
},
|
|
"props": {
|
|
"primary": false,
|
|
"text": "Remove All",
|
|
"textStyle": {
|
|
"fontSize": "0.75em",
|
|
"textAlign": "center"
|
|
}
|
|
},
|
|
"type": "ia.input.button"
|
|
}
|
|
],
|
|
"meta": {
|
|
"name": "FlexContainer"
|
|
},
|
|
"position": {
|
|
"basis": "78px",
|
|
"shrink": 0
|
|
},
|
|
"props": {
|
|
"alignItems": "center",
|
|
"justify": "center",
|
|
"style": {
|
|
"backgroundColor": "var(--neutral-30)",
|
|
"border-left": "1px solid var(--border)"
|
|
}
|
|
},
|
|
"type": "ia.container.flex"
|
|
}
|
|
],
|
|
"meta": {
|
|
"name": "prov"
|
|
},
|
|
"position": {
|
|
"display": false,
|
|
"grow": 1
|
|
},
|
|
"props": {
|
|
"style": {
|
|
"borderBottom": "1px solid var(--border)",
|
|
"borderTop": "1px solid var(--border)"
|
|
}
|
|
},
|
|
"type": "ia.container.flex"
|
|
},
|
|
{
|
|
"children": [
|
|
{
|
|
"meta": {
|
|
"name": "Label"
|
|
},
|
|
"position": {
|
|
"basis": "75px",
|
|
"shrink": 0
|
|
},
|
|
"props": {
|
|
"style": {
|
|
"backgroundColor": "var(--neutral-30)"
|
|
},
|
|
"text": "Quick Search:",
|
|
"textStyle": {
|
|
"fontSize": "0.6em",
|
|
"textAlign": "center",
|
|
"textTransform": "uppercase"
|
|
}
|
|
},
|
|
"type": "ia.display.label"
|
|
},
|
|
{
|
|
"meta": {
|
|
"name": "FlexRepeater"
|
|
},
|
|
"position": {
|
|
"grow": 1
|
|
},
|
|
"propConfig": {
|
|
"props.instances[11].label": {
|
|
"binding": {
|
|
"config": {
|
|
"expression": "\u0027\u0027"
|
|
},
|
|
"type": "expr"
|
|
}
|
|
}
|
|
},
|
|
"props": {
|
|
"elementPosition": {
|
|
"basis": "auto",
|
|
"grow": 0,
|
|
"shrink": 0
|
|
},
|
|
"instances": [
|
|
{
|
|
"color": "var(--callToAction)",
|
|
"filterString": "",
|
|
"instancePosition": {},
|
|
"instanceStyle": {
|
|
"classes": ""
|
|
},
|
|
"label": "DH1",
|
|
"mode": "",
|
|
"selected": false,
|
|
"source": "tag"
|
|
},
|
|
{
|
|
"color": "var(--callToAction)",
|
|
"filterString": "",
|
|
"instancePosition": {},
|
|
"instanceStyle": {
|
|
"classes": ""
|
|
},
|
|
"label": "DH2",
|
|
"mode": "",
|
|
"selected": false,
|
|
"source": "tag"
|
|
},
|
|
{
|
|
"color": "var(--callToAction)",
|
|
"filterString": "",
|
|
"instancePosition": {},
|
|
"instanceStyle": {
|
|
"classes": ""
|
|
},
|
|
"label": "DH3",
|
|
"mode": "",
|
|
"selected": false,
|
|
"source": "tag"
|
|
},
|
|
{
|
|
"color": "var(--callToAction)",
|
|
"filterString": "",
|
|
"instancePosition": {},
|
|
"instanceStyle": {
|
|
"classes": ""
|
|
},
|
|
"label": "DH4",
|
|
"mode": "",
|
|
"selected": false,
|
|
"source": "tag"
|
|
},
|
|
{
|
|
"color": "var(--callToAction)",
|
|
"filterString": "",
|
|
"instancePosition": {},
|
|
"instanceStyle": {
|
|
"classes": ""
|
|
},
|
|
"label": "DH5",
|
|
"mode": "",
|
|
"selected": false,
|
|
"source": "tag"
|
|
},
|
|
{
|
|
"color": "var(--callToAction)",
|
|
"filterString": "",
|
|
"instancePosition": {},
|
|
"instanceStyle": {
|
|
"classes": ""
|
|
},
|
|
"label": "CHWS",
|
|
"mode": "",
|
|
"selected": false,
|
|
"source": "tag"
|
|
},
|
|
{
|
|
"color": "var(--callToAction)",
|
|
"filterString": "",
|
|
"instancePosition": {},
|
|
"instanceStyle": {
|
|
"classes": ""
|
|
},
|
|
"label": "Electrical",
|
|
"mode": "",
|
|
"selected": false,
|
|
"source": "tag"
|
|
},
|
|
{
|
|
"color": "var(--callToAction)",
|
|
"filterString": "",
|
|
"instancePosition": {},
|
|
"instanceStyle": {
|
|
"classes": ""
|
|
},
|
|
"label": "",
|
|
"mode": "",
|
|
"selected": false,
|
|
"source": "tag"
|
|
}
|
|
],
|
|
"path": "Library/Templates/Framework/Pill Button",
|
|
"style": {
|
|
"gap": "5px",
|
|
"padding": "8px 5px"
|
|
},
|
|
"useDefaultViewHeight": false,
|
|
"useDefaultViewWidth": false,
|
|
"wrap": "wrap"
|
|
},
|
|
"type": "ia.display.flex-repeater"
|
|
},
|
|
{
|
|
"children": [
|
|
{
|
|
"events": {
|
|
"component": {
|
|
"onActionPerformed": {
|
|
"config": {
|
|
"script": "\tsource \u003d self.parent.parent.meta.name\n\tself.view.custom.filters[source] \u003d []\n\tflexRepeater \u003d self.parent.parent.getChild(\"FlexRepeater\")\n\ttoDelete \u003d []\n\tfor i, instance in enumerate(flexRepeater.props.instances):\n\t\tinstance[\u0027selected\u0027] \u003d False\n\t\tif instance[\u0027mode\u0027] \u003d\u003d \u0027Custom\u0027:\n\t\t\tinstance[\u0027label\u0027] \u003d \u0027\u0027\n\t\t\tif i \u003c len(flexRepeater.props.instances) - 1:\n\t\t\t\ttoDelete.append(i)\n\tfor index in reversed(toDelete):\n\t\tflexRepeater.props.instances.pop(index)"
|
|
},
|
|
"scope": "G",
|
|
"type": "script"
|
|
}
|
|
}
|
|
},
|
|
"meta": {
|
|
"name": "Button"
|
|
},
|
|
"props": {
|
|
"primary": false,
|
|
"text": "Remove All",
|
|
"textStyle": {
|
|
"fontSize": "0.75em",
|
|
"textAlign": "center"
|
|
}
|
|
},
|
|
"type": "ia.input.button"
|
|
}
|
|
],
|
|
"meta": {
|
|
"name": "FlexContainer"
|
|
},
|
|
"position": {
|
|
"basis": "78px",
|
|
"shrink": 0
|
|
},
|
|
"props": {
|
|
"alignItems": "center",
|
|
"justify": "center",
|
|
"style": {
|
|
"backgroundColor": "var(--neutral-30)",
|
|
"border-left": "1px solid var(--border)"
|
|
}
|
|
},
|
|
"type": "ia.container.flex"
|
|
}
|
|
],
|
|
"meta": {
|
|
"name": "tag"
|
|
},
|
|
"position": {
|
|
"grow": 1
|
|
},
|
|
"type": "ia.container.flex"
|
|
}
|
|
],
|
|
"meta": {
|
|
"name": "FlexContainer"
|
|
},
|
|
"position": {
|
|
"shrink": 0
|
|
},
|
|
"props": {
|
|
"direction": "column",
|
|
"style": {
|
|
"border": "1px solid var(--border)"
|
|
}
|
|
},
|
|
"type": "ia.container.flex"
|
|
},
|
|
{
|
|
"meta": {
|
|
"name": "RadioGroup"
|
|
},
|
|
"position": {
|
|
"shrink": 0
|
|
},
|
|
"propConfig": {
|
|
"props.value": {
|
|
"binding": {
|
|
"config": {
|
|
"expression": "0"
|
|
},
|
|
"type": "expr"
|
|
},
|
|
"onChange": {
|
|
"enabled": null,
|
|
"script": "\tif currentValue is not None:\n\t\tself.getSibling(\"AlarmJournalTable\").refreshData()"
|
|
}
|
|
}
|
|
},
|
|
"props": {
|
|
"align": "start",
|
|
"radioStyle": {
|
|
"padding": "0px 10px"
|
|
},
|
|
"radios": [
|
|
{
|
|
"selected": true,
|
|
"text": "Match on ANY",
|
|
"value": 0
|
|
},
|
|
{
|
|
"selected": false,
|
|
"text": "Match on ALL",
|
|
"value": 1
|
|
}
|
|
],
|
|
"style": {
|
|
"borderLeft": "1px solid var(--border)",
|
|
"borderRight": "1px solid var(--border)",
|
|
"fontSize": "0.8em",
|
|
"padding": "4px 5px"
|
|
}
|
|
},
|
|
"type": "ia.input.radio-group"
|
|
},
|
|
{
|
|
"meta": {
|
|
"name": "AlarmJournalTable"
|
|
},
|
|
"position": {
|
|
"grow": 1
|
|
},
|
|
"props": {
|
|
"columns": {
|
|
"displayPath": {
|
|
"enabled": true
|
|
},
|
|
"eventId": {
|
|
"enabled": false
|
|
},
|
|
"label": {
|
|
"enabled": true
|
|
},
|
|
"source": {
|
|
"enabled": false
|
|
}
|
|
},
|
|
"dateRange": {
|
|
"historical": {
|
|
"endDate": {
|
|
"$": [
|
|
"ts",
|
|
0,
|
|
1729635409199
|
|
],
|
|
"$ts": 1729494000000
|
|
},
|
|
"startDate": {
|
|
"$": [
|
|
"ts",
|
|
0,
|
|
1729635406447
|
|
],
|
|
"$ts": 1729407600000
|
|
}
|
|
},
|
|
"realtime": {
|
|
"interval": 10,
|
|
"unit": "minutes"
|
|
}
|
|
},
|
|
"filter": {
|
|
"events": {
|
|
"acked": false,
|
|
"active": false,
|
|
"cleared": false
|
|
},
|
|
"priorities": {
|
|
"critical": false,
|
|
"high": false,
|
|
"low": false,
|
|
"medium": false
|
|
}
|
|
},
|
|
"rowStyles": {
|
|
"acked": {
|
|
"priorities": {
|
|
"critical": {
|
|
"backgroundColor": "#e2202860"
|
|
},
|
|
"high": {
|
|
"backgroundColor": "#de7c3360"
|
|
},
|
|
"low": {
|
|
"backgroundColor": "#7266b760"
|
|
},
|
|
"medium": {
|
|
"backgroundColor": "#f4b83460"
|
|
}
|
|
}
|
|
},
|
|
"active": {
|
|
"priorities": {
|
|
"critical": {
|
|
"backgroundColor": "#e22028b0"
|
|
},
|
|
"high": {
|
|
"backgroundColor": "#de7c33b0"
|
|
},
|
|
"low": {
|
|
"backgroundColor": "#7266b7b0"
|
|
},
|
|
"medium": {
|
|
"backgroundColor": "#f4b834b0"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"toolbar": {
|
|
"enableFilter": false
|
|
}
|
|
},
|
|
"scripts": {
|
|
"customMethods": [
|
|
{
|
|
"name": "convertToDict",
|
|
"params": [
|
|
"input_str"
|
|
],
|
|
"script": " # Split by \u0027:/\u0027, keeping \u0027:\u0027 within key-value pairs\n parts \u003d input_str.split(\u0027:/\u0027)\n result_dict \u003d {}\n \n # Loop through the parts and create key-value pairs\n for part in parts:\n key, value \u003d part.split(\u0027:\u0027, 1)\n result_dict[key] \u003d value\n \n return result_dict"
|
|
}
|
|
],
|
|
"extensionFunctions": [
|
|
{
|
|
"enabled": true,
|
|
"name": "filterAlarm",
|
|
"script": "\tresult \u003d True\n\tsource \u003d self.convertToDict(alarmEvent.get(\u0027source\u0027).toString())\n\tprov \u003d source[\u0027prov\u0027]\n\ttag \u003d source[\u0027tag\u0027]\n\talm \u003d source[\u0027alm\u0027]\n\t\n\tfilters \u003d self.view.custom.filters\n\tmatchRule \u003d self.getSibling(\"RadioGroup\").props.value\n\t\n\tif len(filters[\u0027prov\u0027]) \u003e 0:\n\t\tif prov not in filters[\u0027prov\u0027]:\n\t\t\tresult \u003d False\n\t\t\t\n\tif len(filters[\u0027tag\u0027]) \u003e 0:\n\t if matchRule \u003d\u003d 0: # match on ANY\n\t result \u003d False \n\t for t in filters[\u0027tag\u0027]:\n\t if t.upper() in tag.upper():\n\t result \u003d True\n\t break # If any tag matches, we can break out of the loop\n\t elif matchRule \u003d\u003d 1: # match on ALL\n\t for t in filters[\u0027tag\u0027]:\n\t if t.upper() not in tag.upper():\n\t result \u003d False\n\t break # If any tag doesn\u0027t match, stop and return False\n\t\n\treturn result"
|
|
}
|
|
],
|
|
"messageHandlers": []
|
|
},
|
|
"type": "ia.display.alarmjournaltable"
|
|
}
|
|
],
|
|
"meta": {
|
|
"name": "root"
|
|
},
|
|
"props": {
|
|
"direction": "column"
|
|
},
|
|
"scripts": {
|
|
"customMethods": [],
|
|
"extensionFunctions": null,
|
|
"messageHandlers": [
|
|
{
|
|
"messageType": "addFilter",
|
|
"pageScope": true,
|
|
"script": "\tsource \u003d payload[\u0027source\u0027]\n\tlabel \u003d payload[\u0027label\u0027]\n\tindex \u003d payload[\u0027index\u0027]\n\t\n\tflexRepeater \u003d self.getChild(\"FlexContainer\").getChild(source).getChild(\"FlexRepeater\")\n\t\n\tif label in self.view.custom.filters[source]:\n\t\tpass\n\telse:\n\t\tself.view.custom.filters[source].append(label)\n\t\tflexRepeater.props.instances[index].selected \u003d True",
|
|
"sessionScope": false,
|
|
"viewScope": false
|
|
},
|
|
{
|
|
"messageType": "customFilter",
|
|
"pageScope": true,
|
|
"script": "\tsource \u003d payload[\u0027source\u0027]\n\tlabel \u003d payload[\u0027label\u0027]\n\tindex \u003d payload[\u0027index\u0027]\n\t\n\tflexRepeater \u003d self.getChild(\"FlexContainer\").getChild(source).getChild(\"FlexRepeater\")\n\t\n\tif label in self.view.custom.filters[source]:\n\t\tpass\n\telse:\n\t\tself.view.custom.filters[source].append(label)\n\t\tflexRepeater.props.instances[index][\u0027selected\u0027] \u003d True\n\t\tflexRepeater.props.instances[index][\u0027label\u0027] \u003d label\n\t\tflexRepeater.props.instances.append({\n\t\t\t\"color\": \"var(--neutral-50)\",\n\t\t\t\"filterString\": \"\",\n\t\t\t\"instancePosition\": {},\n\t\t\t\"instanceStyle\": {\n\t\t\t\"classes\": \"\"\n\t\t\t},\n\t\t\t\"mode\": \"Custom\",\n\t\t\t\"selected\": False,\n\t\t\t\"source\": \"tag\",\n\t\t\t\"label\": \"\"\n\t\t\t})",
|
|
"sessionScope": false,
|
|
"viewScope": false
|
|
},
|
|
{
|
|
"messageType": "removeFilter",
|
|
"pageScope": true,
|
|
"script": "\tsource \u003d payload[\u0027source\u0027]\n\tlabel \u003d payload[\u0027label\u0027]\n\tindex \u003d payload[\u0027index\u0027]\n\t\n\tflexRepeater \u003d self.getChild(\"FlexContainer\").getChild(source).getChild(\"FlexRepeater\")\n\t\n\tif label in self.view.custom.filters[source]:\n\t\ti \u003d self.view.custom.filters[source].index(label)\n\t\tself.view.custom.filters[source].pop(i)\n\t\tflexRepeater.props.instances[index].selected \u003d False\n\t\tif flexRepeater.props.instances[index].mode \u003d\u003d \u0027Custom\u0027:\n\t\t\tflexRepeater.props.instances[index].label \u003d \u0027\u0027\n\t\t\tif index \u003c len(flexRepeater.props.instances) - 1:\n\t\t\t\tflexRepeater.props.instances.pop(index)\n\telse:\n\t\tpass",
|
|
"sessionScope": false,
|
|
"viewScope": false
|
|
}
|
|
]
|
|
},
|
|
"type": "ia.container.flex"
|
|
}
|
|
} |