forked from b.peck/BAT
Data seeding, filter overhaul, UI scaling fixes, sanitized AlarmAnalysis copy
Data & simulation: - simulation_tags.json: re-prioritize 10 tags to Medium so all four priorities appear in live data (backfilled journal history to match) - SimHarness probe P2: ack-user/includeData ground truth + filtered-bundle verification against the live journal Data layer (PrimeControls.calc/alarms): - filters now drive every metric: queryStatus rows (Active Now/Unacked/ Standing) filtered via calc.apply_status_filters; event_count counts only filtered instances (per-instance n_events); dropdown options enumerate unfiltered data so choices never collapse - build_bundle refactored into _assemble(); when filters are active an unfiltered mirror is attached as bundle.overview - the Overview tab stays a plant-wide summary while all other consumers bind filtered sections - _fetch_journal now honors includeData (required for ackUserName; without it ack attribution is always None); enabled for journal rows + source detail so Top Ack Users and the Ack By column populate FilterBar/Dashboard: - root-cause fix: bidirectional bindings never wrote dropdown selections back to session props, so filters silently did nothing; Apply now pulls values directly from the sibling controls, Clear resets both - multi-select dropdowns cap at 280px and wrap chips; filter bar row is auto-height so wrapped chips push tabs down instead of overlapping - filter bar hidden on the Overview tab (not applicable there) UI scaling: - Header: Prime logo added; KpiCard compacted to fit the 71px KPI row (basis-95% overflow fix, chip hugs text, embeds clipped) - no scrollbars - Overview timeline: thinned x labels (minDistance 140), labels anchored below the axis, smaller legend markers - Bad Actors focus chip shows the full source string with the clear X - popup repeaters (Daily Activity, ScoreBars) no longer overflow (useDefaultViewWidth/Height off, taller strip); 5px table cell padding Tooling/tests: - lint_project.py: accept propConfig params.* as param declarations (Designer saves strip null params entries) - tests: 31 -> 34 (status-filter semantics, overview mirror, filtered event counts) - .gitignore: runtime churn (valueStore.idb, local-system-properties, migration logs, thumbnails, .schemas) New project: AlarmAnalysis - submission copy of PrimeBAT with client-visible Prime Controls branding removed (logo, subtitle, project title, shift report heading); PrimeControls organizational namespaces retained per spec. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -3,12 +3,12 @@
|
||||
"PrimeControls": {
|
||||
"query": {
|
||||
"areas": [],
|
||||
"endMs": 0,
|
||||
"endMs": 1784233045923,
|
||||
"priorities": [],
|
||||
"rangePreset": "8h",
|
||||
"refreshToken": 0,
|
||||
"search": "",
|
||||
"startMs": 0,
|
||||
"startMs": 1784204245923,
|
||||
"states": []
|
||||
},
|
||||
"ui": {
|
||||
@@ -83,7 +83,7 @@
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"address": "172.23.0.1",
|
||||
"address": "172.18.0.1",
|
||||
"device": {},
|
||||
"geolocation": {},
|
||||
"locale": "en-US",
|
||||
|
||||
@@ -6,5 +6,11 @@
|
||||
"files": [
|
||||
"props.json"
|
||||
],
|
||||
"attributes": {}
|
||||
}
|
||||
"attributes": {
|
||||
"lastModificationSignature": "3d8f163b8f2bb09be0bd014e7ee7d798223ddf7b5019b1a9fa95ab63e56b2958",
|
||||
"lastModification": {
|
||||
"actor": "admin",
|
||||
"timestamp": "2026-07-16T20:18:00Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,14 @@
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"view.json"
|
||||
"view.json",
|
||||
"thumbnail.png"
|
||||
],
|
||||
"attributes": {}
|
||||
}
|
||||
"attributes": {
|
||||
"lastModificationSignature": "44b87b06b842940d391b9bafd34557de0ac8a5005f6ee91844ac9dd2f18c0f04",
|
||||
"lastModification": {
|
||||
"actor": "admin",
|
||||
"timestamp": "2026-07-16T20:14:21Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,6 @@
|
||||
{
|
||||
"custom": {},
|
||||
"params": {
|
||||
"health": null
|
||||
},
|
||||
"params": {},
|
||||
"propConfig": {
|
||||
"params.health": {
|
||||
"paramDirection": "input",
|
||||
@@ -24,7 +22,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\tg = value['grade']\n\texcept:\n\t\tg = None\n\treturn 'PrimeControls/Grade/' + (g if g in ['A', 'B', 'C', 'D', 'F'] else 'NA')",
|
||||
"code": "\ttry:\n\t\tg \u003d value[\u0027grade\u0027]\n\texcept:\n\t\tg \u003d None\n\treturn \u0027PrimeControls/Grade/\u0027 + (g if g in [\u0027A\u0027, \u0027B\u0027, \u0027C\u0027, \u0027D\u0027, \u0027F\u0027] else \u0027NA\u0027)",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -38,7 +36,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn value['grade'] or 'N/A'\n\texcept:\n\t\treturn 'N/A'",
|
||||
"code": "\ttry:\n\t\treturn value[\u0027grade\u0027] or \u0027N/A\u0027\n\texcept:\n\t\treturn \u0027N/A\u0027",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -85,7 +83,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\ts = value['score']\n\t\treturn 'Score %d - click for detail' % round(s) if s is not None else 'no data in range'\n\texcept:\n\t\treturn 'no data in range'",
|
||||
"code": "\ttry:\n\t\ts \u003d value[\u0027score\u0027]\n\t\treturn \u0027Score %d - click for detail\u0027 % round(s) if s is not None else \u0027no data in range\u0027\n\texcept:\n\t\treturn \u0027no data in range\u0027",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -114,7 +112,7 @@
|
||||
"dom": {
|
||||
"onClick": {
|
||||
"config": {
|
||||
"script": "\tsystem.perspective.openPopup('PC_HealthScore', 'PrimeControls/Popups/HealthScore', params = {'health': self.view.params.health}, showCloseIcon = True, draggable = True)"
|
||||
"script": "\tsystem.perspective.openPopup(\u0027PC_HealthScore\u0027, \u0027PrimeControls/Popups/HealthScore\u0027, params \u003d {\u0027health\u0027: self.view.params.health}, showCloseIcon \u003d True, draggable \u003d True)"
|
||||
},
|
||||
"scope": "G",
|
||||
"type": "script"
|
||||
@@ -125,7 +123,6 @@
|
||||
"name": "root"
|
||||
},
|
||||
"props": {
|
||||
"direction": "row",
|
||||
"style": {
|
||||
"alignItems": "center",
|
||||
"cursor": "pointer",
|
||||
|
||||
@@ -4,7 +4,14 @@
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"view.json"
|
||||
"view.json",
|
||||
"thumbnail.png"
|
||||
],
|
||||
"attributes": {}
|
||||
}
|
||||
"attributes": {
|
||||
"lastModificationSignature": "75b1aa709e8638ac045f15b7a6d3543d023b8f3e886e2f9f1c263c0390c4fe9d",
|
||||
"lastModification": {
|
||||
"actor": "admin",
|
||||
"timestamp": "2026-07-16T20:45:13Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,6 @@
|
||||
{
|
||||
"custom": {},
|
||||
"params": {
|
||||
"delta": null,
|
||||
"label": null,
|
||||
"unit": null,
|
||||
"value": null
|
||||
},
|
||||
"params": {},
|
||||
"propConfig": {
|
||||
"params.delta": {
|
||||
"paramDirection": "input",
|
||||
@@ -43,10 +38,14 @@
|
||||
},
|
||||
"props": {
|
||||
"style": {
|
||||
"classes": "PrimeControls/Text/Muted"
|
||||
"classes": "PrimeControls/Text/Muted",
|
||||
"lineHeight": "1.1"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.label"
|
||||
"type": "ia.display.label",
|
||||
"position": {
|
||||
"shrink": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"children": [
|
||||
@@ -72,7 +71,8 @@
|
||||
},
|
||||
"props": {
|
||||
"style": {
|
||||
"classes": "PrimeControls/Text/Kpi"
|
||||
"classes": "PrimeControls/Text/Kpi",
|
||||
"lineHeight": "1.1"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.label"
|
||||
@@ -99,7 +99,8 @@
|
||||
},
|
||||
"props": {
|
||||
"style": {
|
||||
"classes": "PrimeControls/Text/Muted"
|
||||
"classes": "PrimeControls/Text/Muted",
|
||||
"lineHeight": "1.1"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.label"
|
||||
@@ -108,8 +109,12 @@
|
||||
"meta": {
|
||||
"name": "valueRow"
|
||||
},
|
||||
"position": {
|
||||
"grow": 1,
|
||||
"shrink": 1,
|
||||
"basis": "auto"
|
||||
},
|
||||
"props": {
|
||||
"direction": "row",
|
||||
"style": {
|
||||
"alignItems": "baseline",
|
||||
"gap": "4px"
|
||||
@@ -165,8 +170,16 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"props": {},
|
||||
"type": "ia.display.label"
|
||||
"props": {
|
||||
"style": {
|
||||
"alignSelf": "flex-start",
|
||||
"padding": "0 6px"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.label",
|
||||
"position": {
|
||||
"shrink": 0
|
||||
}
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
@@ -176,9 +189,11 @@
|
||||
"direction": "column",
|
||||
"style": {
|
||||
"classes": "PrimeControls/Card",
|
||||
"justifyContent": "space-between"
|
||||
"justifyContent": "space-between",
|
||||
"overflow": "hidden",
|
||||
"padding": "6px 12px"
|
||||
}
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,14 @@
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"view.json"
|
||||
"view.json",
|
||||
"thumbnail.png"
|
||||
],
|
||||
"attributes": {}
|
||||
}
|
||||
"attributes": {
|
||||
"lastModificationSignature": "04bdfb9c4eecc4f8cf35a85994e6790ef8d62a1d1aa00553e4dc4193e171a110",
|
||||
"lastModification": {
|
||||
"actor": "admin",
|
||||
"timestamp": "2026-07-16T20:31:35Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -64,7 +64,7 @@
|
||||
"name": "filterBar"
|
||||
},
|
||||
"position": {
|
||||
"basis": "56px",
|
||||
"basis": "auto",
|
||||
"shrink": 0
|
||||
},
|
||||
"propConfig": {
|
||||
@@ -75,10 +75,21 @@
|
||||
},
|
||||
"type": "property"
|
||||
}
|
||||
},
|
||||
"position.display": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"expression": "{session.custom.PrimeControls.ui.selectedTab} != 0"
|
||||
},
|
||||
"type": "expr"
|
||||
}
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"path": "PrimeControls/Shell/FilterBar"
|
||||
"path": "PrimeControls/Shell/FilterBar",
|
||||
"style": {
|
||||
"minHeight": "56px"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.view"
|
||||
},
|
||||
@@ -316,4 +327,4 @@
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,14 @@
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"view.json"
|
||||
"view.json",
|
||||
"thumbnail.png"
|
||||
],
|
||||
"attributes": {}
|
||||
}
|
||||
"attributes": {
|
||||
"lastModificationSignature": "1d6feda3a22e57c52a032bea5ed828b0b7836e249e46a68faa58af39207b9119",
|
||||
"lastModification": {
|
||||
"actor": "admin",
|
||||
"timestamp": "2026-07-16T20:41:00Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,20 +1,15 @@
|
||||
{
|
||||
"custom": {
|
||||
"detail": null
|
||||
},
|
||||
"params": {
|
||||
"label": null,
|
||||
"source": null
|
||||
},
|
||||
"custom": {},
|
||||
"params": {},
|
||||
"propConfig": {
|
||||
"custom.detail": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"expression": "{view.params.source} + '|' + {session.custom.PrimeControls.query.startMs} + '|' + {session.custom.PrimeControls.query.endMs}"
|
||||
"expression": "{view.params.source} + \u0027|\u0027 + {session.custom.PrimeControls.query.startMs} + \u0027|\u0027 + {session.custom.PrimeControls.query.endMs}"
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\tsrc = self.view.params.source\n\texcept:\n\t\tsrc = None\n\tif not src:\n\t\treturn None\n\ttry:\n\t\tq = self.session.custom.PrimeControls.query\n\t\treturn PrimeControls.alarms.getSourceDetail(src, q.startMs, q.endMs)\n\texcept:\n\t\treturn None",
|
||||
"code": "\ttry:\n\t\tsrc \u003d self.view.params.source\n\texcept:\n\t\tsrc \u003d None\n\tif not src:\n\t\treturn None\n\ttry:\n\t\tq \u003d self.session.custom.PrimeControls.query\n\t\treturn PrimeControls.alarms.getSourceDetail(src, q.startMs, q.endMs)\n\texcept:\n\t\treturn None",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -52,7 +47,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\tif value:\n\t\treturn value\n\ttry:\n\t\treturn self.view.params.source or 'Alarm Detail'\n\texcept:\n\t\treturn 'Alarm Detail'",
|
||||
"code": "\tif value:\n\t\treturn value\n\ttry:\n\t\treturn self.view.params.source or \u0027Alarm Detail\u0027\n\texcept:\n\t\treturn \u0027Alarm Detail\u0027",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -79,7 +74,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn value['area'] or ''\n\texcept:\n\t\treturn ''",
|
||||
"code": "\ttry:\n\t\treturn value[\u0027area\u0027] or \u0027\u0027\n\texcept:\n\t\treturn \u0027\u0027",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -126,7 +121,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn PrimeControls.fmt.num(value['stats']['count'])\n\texcept:\n\t\treturn '--'",
|
||||
"code": "\ttry:\n\t\treturn PrimeControls.fmt.num(value[\u0027stats\u0027][\u0027count\u0027])\n\texcept:\n\t\treturn \u0027--\u0027",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -158,7 +153,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn PrimeControls.fmt.dur(value['stats']['avg_tta_ms'])\n\texcept:\n\t\treturn '--'",
|
||||
"code": "\ttry:\n\t\treturn PrimeControls.fmt.dur(value[\u0027stats\u0027][\u0027avg_tta_ms\u0027])\n\texcept:\n\t\treturn \u0027--\u0027",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -190,7 +185,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn PrimeControls.fmt.dur(value['stats']['avg_active_ms'])\n\texcept:\n\t\treturn '--'",
|
||||
"code": "\ttry:\n\t\treturn PrimeControls.fmt.dur(value[\u0027stats\u0027][\u0027avg_active_ms\u0027])\n\texcept:\n\t\treturn \u0027--\u0027",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -222,7 +217,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn PrimeControls.fmt.num(value['stats']['fleeting_count'])\n\texcept:\n\t\treturn '--'",
|
||||
"code": "\ttry:\n\t\treturn PrimeControls.fmt.num(value[\u0027stats\u0027][\u0027fleeting_count\u0027])\n\texcept:\n\t\treturn \u0027--\u0027",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -247,7 +242,6 @@
|
||||
"shrink": 0
|
||||
},
|
||||
"props": {
|
||||
"alignItems": "stretch",
|
||||
"style": {
|
||||
"gap": "10px"
|
||||
}
|
||||
@@ -276,7 +270,7 @@
|
||||
"name": "repDaily"
|
||||
},
|
||||
"position": {
|
||||
"basis": "30px",
|
||||
"basis": "72px",
|
||||
"shrink": 0
|
||||
},
|
||||
"propConfig": {
|
||||
@@ -287,7 +281,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\tdaily = list(value['daily'] or [])\n\texcept:\n\t\tdaily = []\n\tcounts = []\n\tfor d in daily:\n\t\ttry:\n\t\t\tcounts.append(int(d['count']))\n\t\texcept:\n\t\t\tcounts.append(0)\n\tif not counts:\n\t\treturn []\n\tm = max(counts)\n\treturn [{'count': c, 'max': m} for c in counts]",
|
||||
"code": "\ttry:\n\t\tdaily \u003d list(value[\u0027daily\u0027] or [])\n\texcept:\n\t\tdaily \u003d []\n\tcounts \u003d []\n\tfor d in daily:\n\t\ttry:\n\t\t\tcounts.append(int(d[\u0027count\u0027]))\n\t\texcept:\n\t\t\tcounts.append(0)\n\tif not counts:\n\t\treturn []\n\tm \u003d max(counts)\n\treturn [{\u0027count\u0027: c, \u0027max\u0027: m} for c in counts]",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -296,13 +290,15 @@
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"direction": "row",
|
||||
"elementPosition": {
|
||||
"basis": "12px",
|
||||
"grow": 1,
|
||||
"shrink": 1
|
||||
"basis": "8px"
|
||||
},
|
||||
"path": "PrimeControls/Components/HeatmapCell"
|
||||
"path": "PrimeControls/Components/HeatmapCell",
|
||||
"style": {
|
||||
"gap": "2px"
|
||||
},
|
||||
"useDefaultViewHeight": false,
|
||||
"useDefaultViewWidth": false
|
||||
},
|
||||
"type": "ia.display.flex-repeater"
|
||||
},
|
||||
@@ -321,7 +317,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\tdaily = list(value['daily'] or [])\n\texcept:\n\t\tdaily = []\n\tif not daily:\n\t\treturn 'No activity in range'\n\ttry:\n\t\treturn 'Activations per day, %s - %s' % (PrimeControls.fmt.day_clock(daily[0]['t0']), PrimeControls.fmt.day_clock(daily[-1]['t0']))\n\texcept:\n\t\treturn 'Activations per day'",
|
||||
"code": "\ttry:\n\t\tdaily \u003d list(value[\u0027daily\u0027] or [])\n\texcept:\n\t\tdaily \u003d []\n\tif not daily:\n\t\treturn \u0027No activity in range\u0027\n\ttry:\n\t\treturn \u0027Activations per day, %s - %s\u0027 % (PrimeControls.fmt.day_clock(daily[0][\u0027t0\u0027]), PrimeControls.fmt.day_clock(daily[-1][\u0027t0\u0027]))\n\texcept:\n\t\treturn \u0027Activations per day\u0027",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -386,7 +382,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn len(value['stats']['top_ack_users']) > 0\n\texcept:\n\t\treturn False",
|
||||
"code": "\ttry:\n\t\treturn len(value[\u0027stats\u0027][\u0027top_ack_users\u0027]) \u003e 0\n\texcept:\n\t\treturn False",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -400,7 +396,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\tu = value['stats']['top_ack_users'][0]\n\t\treturn '%s (%d)' % (u['user'], u['count'])\n\texcept:\n\t\treturn ''",
|
||||
"code": "\ttry:\n\t\tu \u003d value[\u0027stats\u0027][\u0027top_ack_users\u0027][0]\n\t\treturn \u0027%s (%d)\u0027 % (u[\u0027user\u0027], u[\u0027count\u0027])\n\texcept:\n\t\treturn \u0027\u0027",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -432,7 +428,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn len(value['stats']['top_ack_users']) > 1\n\texcept:\n\t\treturn False",
|
||||
"code": "\ttry:\n\t\treturn len(value[\u0027stats\u0027][\u0027top_ack_users\u0027]) \u003e 1\n\texcept:\n\t\treturn False",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -446,7 +442,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\tu = value['stats']['top_ack_users'][1]\n\t\treturn '%s (%d)' % (u['user'], u['count'])\n\texcept:\n\t\treturn ''",
|
||||
"code": "\ttry:\n\t\tu \u003d value[\u0027stats\u0027][\u0027top_ack_users\u0027][1]\n\t\treturn \u0027%s (%d)\u0027 % (u[\u0027user\u0027], u[\u0027count\u0027])\n\texcept:\n\t\treturn \u0027\u0027",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -478,7 +474,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn len(value['stats']['top_ack_users']) > 2\n\texcept:\n\t\treturn False",
|
||||
"code": "\ttry:\n\t\treturn len(value[\u0027stats\u0027][\u0027top_ack_users\u0027]) \u003e 2\n\texcept:\n\t\treturn False",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -492,7 +488,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\tu = value['stats']['top_ack_users'][2]\n\t\treturn '%s (%d)' % (u['user'], u['count'])\n\texcept:\n\t\treturn ''",
|
||||
"code": "\ttry:\n\t\tu \u003d value[\u0027stats\u0027][\u0027top_ack_users\u0027][2]\n\t\treturn \u0027%s (%d)\u0027 % (u[\u0027user\u0027], u[\u0027count\u0027])\n\texcept:\n\t\treturn \u0027\u0027",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -524,7 +520,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn len(value['stats']['top_ack_users']) == 0\n\texcept:\n\t\treturn True",
|
||||
"code": "\ttry:\n\t\treturn len(value[\u0027stats\u0027][\u0027top_ack_users\u0027]) \u003d\u003d 0\n\texcept:\n\t\treturn True",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -604,7 +600,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\tout = []\n\ttry:\n\t\trows = list(value['events'] or [])\n\texcept:\n\t\trows = []\n\tfor r in rows[:25]:\n\t\ttry:\n\t\t\tout.append({'time_label': r['time_label'], 'state_label': r['state_label'], 'ack_user': r['ack_user'] or ''})\n\t\texcept:\n\t\t\tpass\n\treturn out",
|
||||
"code": "\tout \u003d []\n\ttry:\n\t\trows \u003d list(value[\u0027events\u0027] or [])\n\texcept:\n\t\trows \u003d []\n\tfor r in rows[:25]:\n\t\ttry:\n\t\t\tout.append({\u0027time_label\u0027: r[\u0027time_label\u0027], \u0027state_label\u0027: r[\u0027state_label\u0027], \u0027ack_user\u0027: r[\u0027ack_user\u0027] or \u0027\u0027})\n\t\texcept:\n\t\t\tpass\n\treturn out",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -613,6 +609,11 @@
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"cells": {
|
||||
"style": {
|
||||
"padding": "5px"
|
||||
}
|
||||
},
|
||||
"columns": [
|
||||
{
|
||||
"field": "time_label",
|
||||
@@ -649,8 +650,7 @@
|
||||
}
|
||||
},
|
||||
"pager": {
|
||||
"bottom": false,
|
||||
"top": false
|
||||
"bottom": false
|
||||
}
|
||||
},
|
||||
"type": "ia.display.table"
|
||||
@@ -686,7 +686,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\tif value is None:\n\t\treturn False\n\ttry:\n\t\treturn not value['error']\n\texcept:\n\t\treturn True",
|
||||
"code": "\tif value is None:\n\t\treturn False\n\ttry:\n\t\treturn not value[\u0027error\u0027]\n\texcept:\n\t\treturn True",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -717,7 +717,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\tif value is None:\n\t\treturn True\n\ttry:\n\t\treturn bool(value['error'])\n\texcept:\n\t\treturn False",
|
||||
"code": "\tif value is None:\n\t\treturn True\n\ttry:\n\t\treturn bool(value[\u0027error\u0027])\n\texcept:\n\t\treturn False",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -741,7 +741,7 @@
|
||||
"component": {
|
||||
"onActionPerformed": {
|
||||
"config": {
|
||||
"script": "\tsystem.perspective.closePopup('PC_AlarmDetail')"
|
||||
"script": "\tsystem.perspective.closePopup(\u0027PC_AlarmDetail\u0027)"
|
||||
},
|
||||
"scope": "G",
|
||||
"type": "script"
|
||||
@@ -756,7 +756,6 @@
|
||||
"shrink": 0
|
||||
},
|
||||
"props": {
|
||||
"primary": true,
|
||||
"text": "Close"
|
||||
},
|
||||
"type": "ia.input.button"
|
||||
@@ -775,7 +774,6 @@
|
||||
"type": "ia.container.flex"
|
||||
}
|
||||
],
|
||||
"custom": {},
|
||||
"meta": {
|
||||
"name": "root"
|
||||
},
|
||||
|
||||
@@ -519,6 +519,11 @@
|
||||
"pager": {
|
||||
"bottom": false,
|
||||
"top": false
|
||||
},
|
||||
"cells": {
|
||||
"style": {
|
||||
"padding": "5px"
|
||||
}
|
||||
}
|
||||
},
|
||||
"type": "ia.display.table"
|
||||
@@ -657,4 +662,4 @@
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,7 +187,9 @@
|
||||
"path": "PrimeControls/Components/ScoreBar",
|
||||
"style": {
|
||||
"overflowY": "auto"
|
||||
}
|
||||
},
|
||||
"useDefaultViewWidth": false,
|
||||
"useDefaultViewHeight": false
|
||||
},
|
||||
"type": "ia.display.flex-repeater"
|
||||
},
|
||||
@@ -313,4 +315,4 @@
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,6 +54,10 @@
|
||||
"multiSelect": true,
|
||||
"placeholder": {
|
||||
"text": "Priority"
|
||||
},
|
||||
"wrapMultiSelectValues": true,
|
||||
"style": {
|
||||
"maxWidth": "280px"
|
||||
}
|
||||
},
|
||||
"type": "ia.input.dropdown"
|
||||
@@ -95,6 +99,10 @@
|
||||
"multiSelect": true,
|
||||
"placeholder": {
|
||||
"text": "Area"
|
||||
},
|
||||
"wrapMultiSelectValues": true,
|
||||
"style": {
|
||||
"maxWidth": "280px"
|
||||
}
|
||||
},
|
||||
"type": "ia.input.dropdown"
|
||||
@@ -140,6 +148,10 @@
|
||||
],
|
||||
"placeholder": {
|
||||
"text": "State"
|
||||
},
|
||||
"wrapMultiSelectValues": true,
|
||||
"style": {
|
||||
"maxWidth": "280px"
|
||||
}
|
||||
},
|
||||
"type": "ia.input.dropdown"
|
||||
@@ -174,7 +186,7 @@
|
||||
"component": {
|
||||
"onActionPerformed": {
|
||||
"config": {
|
||||
"script": "\tq = self.session.custom.PrimeControls.query\n\tq.refreshToken = q.refreshToken + 1"
|
||||
"script": "\tq = self.session.custom.PrimeControls.query\n\ttry:\n\t\tq.priorities = list(self.getSibling('ddPriority').props.value or [])\n\t\tq.areas = list(self.getSibling('ddArea').props.value or [])\n\t\tq.states = list(self.getSibling('ddState').props.value or [])\n\t\tq.search = str(self.getSibling('txtSearch').props.text or '')\n\texcept:\n\t\tpass\n\tq.refreshToken = q.refreshToken + 1"
|
||||
},
|
||||
"scope": "G",
|
||||
"type": "script"
|
||||
@@ -199,7 +211,7 @@
|
||||
"component": {
|
||||
"onActionPerformed": {
|
||||
"config": {
|
||||
"script": "\tq = self.session.custom.PrimeControls.query\n\tq.priorities = []\n\tq.areas = []\n\tq.states = []\n\tq.search = ''\n\tq.refreshToken = q.refreshToken + 1"
|
||||
"script": "\tq = self.session.custom.PrimeControls.query\n\tq.priorities = []\n\tq.areas = []\n\tq.states = []\n\tq.search = ''\n\ttry:\n\t\tself.getSibling('ddPriority').props.value = []\n\t\tself.getSibling('ddArea').props.value = []\n\t\tself.getSibling('ddState').props.value = []\n\t\tself.getSibling('txtSearch').props.text = ''\n\texcept:\n\t\tpass\n\tq.refreshToken = q.refreshToken + 1"
|
||||
},
|
||||
"scope": "G",
|
||||
"type": "script"
|
||||
@@ -266,4 +278,4 @@
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,14 @@
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"view.json"
|
||||
"view.json",
|
||||
"thumbnail.png"
|
||||
],
|
||||
"attributes": {}
|
||||
}
|
||||
"attributes": {
|
||||
"lastModificationSignature": "ad9c36584854ed67b341f681e7992b6264caf658ed334102fa088a1cc84012fd",
|
||||
"lastModification": {
|
||||
"actor": "admin",
|
||||
"timestamp": "2026-07-16T20:47:54Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,6 @@
|
||||
{
|
||||
"custom": {},
|
||||
"params": {
|
||||
"bundle": null
|
||||
},
|
||||
"params": {},
|
||||
"propConfig": {
|
||||
"params.bundle": {
|
||||
"paramDirection": "input",
|
||||
@@ -11,7 +9,7 @@
|
||||
},
|
||||
"props": {
|
||||
"defaultSize": {
|
||||
"height": 150,
|
||||
"height": 165,
|
||||
"width": 1600
|
||||
}
|
||||
},
|
||||
@@ -19,6 +17,26 @@
|
||||
"children": [
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"meta": {
|
||||
"name": "imgLogo"
|
||||
},
|
||||
"position": {
|
||||
"basis": "148px",
|
||||
"shrink": 0
|
||||
},
|
||||
"props": {
|
||||
"altText": "Prime Controls",
|
||||
"fit": {
|
||||
"mode": "contain"
|
||||
},
|
||||
"source": "/system/images/PrimeControls/image%20(4).png",
|
||||
"style": {
|
||||
"marginRight": "12px"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.image"
|
||||
},
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
@@ -178,7 +196,6 @@
|
||||
"propConfig": {
|
||||
"props.value": {
|
||||
"binding": {
|
||||
"bidirectional": true,
|
||||
"config": {
|
||||
"path": "session.custom.PrimeControls.query.rangePreset"
|
||||
},
|
||||
@@ -231,6 +248,9 @@
|
||||
"shrink": 0
|
||||
},
|
||||
"props": {
|
||||
"image": {
|
||||
"height": 15
|
||||
},
|
||||
"primary": false,
|
||||
"text": "Refresh"
|
||||
},
|
||||
@@ -256,7 +276,9 @@
|
||||
"shrink": 0
|
||||
},
|
||||
"props": {
|
||||
"primary": true,
|
||||
"image": {
|
||||
"height": 15
|
||||
},
|
||||
"text": "Shift Report"
|
||||
},
|
||||
"type": "ia.input.button"
|
||||
@@ -281,8 +303,7 @@
|
||||
"name": "rowTop"
|
||||
},
|
||||
"position": {
|
||||
"basis": "52px",
|
||||
"grow": 0,
|
||||
"basis": "55px",
|
||||
"shrink": 0
|
||||
},
|
||||
"props": {
|
||||
@@ -315,8 +336,10 @@
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"params": {},
|
||||
"path": "PrimeControls/Components/HealthGauge"
|
||||
"path": "PrimeControls/Components/HealthGauge",
|
||||
"style": {
|
||||
"overflow": "hidden"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.view"
|
||||
},
|
||||
@@ -362,7 +385,10 @@
|
||||
"params": {
|
||||
"label": "Activations"
|
||||
},
|
||||
"path": "PrimeControls/Components/KpiCard"
|
||||
"path": "PrimeControls/Components/KpiCard",
|
||||
"style": {
|
||||
"overflow": "hidden"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.view"
|
||||
},
|
||||
@@ -409,7 +435,10 @@
|
||||
"label": "Rate",
|
||||
"unit": "/hr"
|
||||
},
|
||||
"path": "PrimeControls/Components/KpiCard"
|
||||
"path": "PrimeControls/Components/KpiCard",
|
||||
"style": {
|
||||
"overflow": "hidden"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.view"
|
||||
},
|
||||
@@ -455,7 +484,10 @@
|
||||
"params": {
|
||||
"label": "Active Now"
|
||||
},
|
||||
"path": "PrimeControls/Components/KpiCard"
|
||||
"path": "PrimeControls/Components/KpiCard",
|
||||
"style": {
|
||||
"overflow": "hidden"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.view"
|
||||
},
|
||||
@@ -501,7 +533,10 @@
|
||||
"params": {
|
||||
"label": "Unacked"
|
||||
},
|
||||
"path": "PrimeControls/Components/KpiCard"
|
||||
"path": "PrimeControls/Components/KpiCard",
|
||||
"style": {
|
||||
"overflow": "hidden"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.view"
|
||||
},
|
||||
@@ -547,7 +582,10 @@
|
||||
"params": {
|
||||
"label": "MTTA"
|
||||
},
|
||||
"path": "PrimeControls/Components/KpiCard"
|
||||
"path": "PrimeControls/Components/KpiCard",
|
||||
"style": {
|
||||
"overflow": "hidden"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.view"
|
||||
},
|
||||
@@ -593,7 +631,10 @@
|
||||
"params": {
|
||||
"label": "Flood Time"
|
||||
},
|
||||
"path": "PrimeControls/Components/KpiCard"
|
||||
"path": "PrimeControls/Components/KpiCard",
|
||||
"style": {
|
||||
"overflow": "hidden"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.view"
|
||||
},
|
||||
@@ -639,7 +680,10 @@
|
||||
"params": {
|
||||
"label": "Chattering"
|
||||
},
|
||||
"path": "PrimeControls/Components/KpiCard"
|
||||
"path": "PrimeControls/Components/KpiCard",
|
||||
"style": {
|
||||
"overflow": "hidden"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.view"
|
||||
}
|
||||
@@ -651,7 +695,6 @@
|
||||
"grow": 1
|
||||
},
|
||||
"props": {
|
||||
"alignItems": "stretch",
|
||||
"style": {
|
||||
"gap": "10px"
|
||||
}
|
||||
@@ -671,4 +714,4 @@
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2343,6 +2343,11 @@
|
||||
},
|
||||
"selection": {
|
||||
"enableRowSelection": false
|
||||
},
|
||||
"cells": {
|
||||
"style": {
|
||||
"padding": "5px"
|
||||
}
|
||||
}
|
||||
},
|
||||
"type": "ia.display.table"
|
||||
@@ -2455,4 +2460,4 @@
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,14 @@
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"view.json"
|
||||
"view.json",
|
||||
"thumbnail.png"
|
||||
],
|
||||
"attributes": {}
|
||||
}
|
||||
"attributes": {
|
||||
"lastModificationSignature": "7504c7695ab45f2fc1d0d6dc8071e96746ac068f99e878d3ca1dcf804c9eea76",
|
||||
"lastModification": {
|
||||
"actor": "admin",
|
||||
"timestamp": "2026-07-16T20:38:41Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,6 @@
|
||||
{
|
||||
"custom": {},
|
||||
"params": {
|
||||
"bundle": null
|
||||
},
|
||||
"params": {},
|
||||
"propConfig": {
|
||||
"params.bundle": {
|
||||
"paramDirection": "input",
|
||||
@@ -11,7 +9,6 @@
|
||||
},
|
||||
"props": {
|
||||
"defaultSize": {
|
||||
"height": 800,
|
||||
"width": 1600
|
||||
}
|
||||
},
|
||||
@@ -151,6 +148,11 @@
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"cells": {
|
||||
"style": {
|
||||
"padding": "5px"
|
||||
}
|
||||
},
|
||||
"columns": [
|
||||
{
|
||||
"field": "source",
|
||||
@@ -206,15 +208,15 @@
|
||||
"header": {
|
||||
"title": "Share of Total"
|
||||
},
|
||||
"render": "number",
|
||||
"number": "progress",
|
||||
"progressBar": {
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"bar": {
|
||||
"color": "#3B7DD8"
|
||||
}
|
||||
},
|
||||
"max": 100,
|
||||
"min": 0
|
||||
},
|
||||
"render": "number",
|
||||
"width": 2.4
|
||||
},
|
||||
{
|
||||
@@ -228,8 +230,7 @@
|
||||
}
|
||||
],
|
||||
"pager": {
|
||||
"bottom": false,
|
||||
"top": false
|
||||
"bottom": false
|
||||
},
|
||||
"rows": {
|
||||
"height": 34
|
||||
@@ -275,8 +276,7 @@
|
||||
},
|
||||
"position": {
|
||||
"basis": "320px",
|
||||
"grow": 1,
|
||||
"shrink": 1
|
||||
"grow": 1
|
||||
},
|
||||
"props": {
|
||||
"direction": "column",
|
||||
@@ -316,9 +316,16 @@
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"text": ""
|
||||
"style": {
|
||||
"whiteSpace": "nowrap"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.label"
|
||||
"type": "ia.display.label",
|
||||
"position": {
|
||||
"basis": "auto",
|
||||
"grow": 0,
|
||||
"shrink": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"events": {
|
||||
@@ -336,6 +343,7 @@
|
||||
"name": "icoClearFocus"
|
||||
},
|
||||
"position": {
|
||||
"basis": "20px",
|
||||
"shrink": 0
|
||||
},
|
||||
"props": {
|
||||
@@ -491,6 +499,11 @@
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"cells": {
|
||||
"style": {
|
||||
"padding": "5px"
|
||||
}
|
||||
},
|
||||
"columns": [
|
||||
{
|
||||
"field": "source",
|
||||
@@ -552,8 +565,7 @@
|
||||
}
|
||||
],
|
||||
"pager": {
|
||||
"bottom": false,
|
||||
"top": false
|
||||
"bottom": false
|
||||
},
|
||||
"rows": {
|
||||
"height": 34
|
||||
@@ -695,6 +707,11 @@
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"cells": {
|
||||
"style": {
|
||||
"padding": "5px"
|
||||
}
|
||||
},
|
||||
"columns": [
|
||||
{
|
||||
"field": "source",
|
||||
@@ -746,8 +763,7 @@
|
||||
}
|
||||
],
|
||||
"pager": {
|
||||
"bottom": false,
|
||||
"top": false
|
||||
"bottom": false
|
||||
},
|
||||
"rows": {
|
||||
"height": 34
|
||||
@@ -904,6 +920,11 @@
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"cells": {
|
||||
"style": {
|
||||
"padding": "5px"
|
||||
}
|
||||
},
|
||||
"columns": [
|
||||
{
|
||||
"field": "source",
|
||||
@@ -956,8 +977,7 @@
|
||||
}
|
||||
],
|
||||
"pager": {
|
||||
"bottom": false,
|
||||
"top": false
|
||||
"bottom": false
|
||||
},
|
||||
"rows": {
|
||||
"height": 34
|
||||
@@ -1020,11 +1040,9 @@
|
||||
},
|
||||
"position": {
|
||||
"basis": "280px",
|
||||
"grow": 1,
|
||||
"shrink": 1
|
||||
"grow": 1
|
||||
},
|
||||
"props": {
|
||||
"alignItems": "stretch",
|
||||
"style": {
|
||||
"gap": "12px"
|
||||
}
|
||||
@@ -1063,7 +1081,6 @@
|
||||
"type": "ia.container.flex"
|
||||
}
|
||||
],
|
||||
"custom": {},
|
||||
"meta": {
|
||||
"name": "root"
|
||||
},
|
||||
@@ -1075,4 +1092,4 @@
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -408,6 +408,11 @@
|
||||
"pager": {
|
||||
"bottom": false,
|
||||
"top": false
|
||||
},
|
||||
"cells": {
|
||||
"style": {
|
||||
"padding": "5px"
|
||||
}
|
||||
}
|
||||
},
|
||||
"type": "ia.display.table"
|
||||
@@ -471,4 +476,4 @@
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn not (int(value['meta']['event_count']) > 0)\n\texcept:\n\t\treturn True",
|
||||
"code": "\ttry:\n\t\tif value['overview']:\n\t\t\tvalue = value['overview']\n\texcept:\n\t\tpass\n\ttry:\n\t\treturn not (int(value['meta']['event_count']) > 0)\n\texcept:\n\t\treturn True",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -67,7 +67,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\trows = []\n\ttry:\n\t\tfor r in (value['priority']['raw'] or []):\n\t\t\ttry:\n\t\t\t\trows.append({'name': r['name'], 'level': int(r['level']), 'count': int(r['count'])})\n\t\t\texcept:\n\t\t\t\tpass\n\texcept:\n\t\trows = []\n\trows.sort(key=lambda r: -r['level'])\n\ttotal = 0\n\tfor r in rows:\n\t\ttotal = total + r['count']\n\tout = []\n\tfor r in rows:\n\t\tif total > 0:\n\t\t\tp = 100.0 * r['count'] / total\n\t\telse:\n\t\t\tp = 0.0\n\t\tout.append({'priority_name': r['name'], 'count': r['count'], 'pct': p})\n\treturn out",
|
||||
"code": "\ttry:\n\t\tif value['overview']:\n\t\t\tvalue = value['overview']\n\texcept:\n\t\tpass\n\trows = []\n\ttry:\n\t\tfor r in (value['priority']['raw'] or []):\n\t\t\ttry:\n\t\t\t\trows.append({'name': r['name'], 'level': int(r['level']), 'count': int(r['count'])})\n\t\t\texcept:\n\t\t\t\tpass\n\texcept:\n\t\trows = []\n\trows.sort(key=lambda r: -r['level'])\n\ttotal = 0\n\tfor r in rows:\n\t\ttotal = total + r['count']\n\tout = []\n\tfor r in rows:\n\t\tif total > 0:\n\t\t\tp = 100.0 * r['count'] / total\n\t\telse:\n\t\t\tp = 0.0\n\t\tout.append({'priority_name': r['name'], 'count': r['count'], 'pct': p})\n\treturn out",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -110,7 +110,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn value['kpis']['active_now']\n\texcept:\n\t\treturn None",
|
||||
"code": "\ttry:\n\t\tif value['overview']:\n\t\t\tvalue = value['overview']\n\texcept:\n\t\tpass\n\ttry:\n\t\treturn value['kpis']['active_now']\n\texcept:\n\t\treturn None",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -124,7 +124,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn PrimeControls.fmt.num(value['kpis']['active_now']['value'])\n\texcept:\n\t\treturn '--'",
|
||||
"code": "\ttry:\n\t\tif value['overview']:\n\t\t\tvalue = value['overview']\n\texcept:\n\t\tpass\n\ttry:\n\t\treturn PrimeControls.fmt.num(value['kpis']['active_now']['value'])\n\texcept:\n\t\treturn '--'",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -156,7 +156,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn value['kpis']['unacked_now']\n\texcept:\n\t\treturn None",
|
||||
"code": "\ttry:\n\t\tif value['overview']:\n\t\t\tvalue = value['overview']\n\texcept:\n\t\tpass\n\ttry:\n\t\treturn value['kpis']['unacked_now']\n\texcept:\n\t\treturn None",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -170,7 +170,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn PrimeControls.fmt.num(value['kpis']['unacked_now']['value'])\n\texcept:\n\t\treturn '--'",
|
||||
"code": "\ttry:\n\t\tif value['overview']:\n\t\t\tvalue = value['overview']\n\texcept:\n\t\tpass\n\ttry:\n\t\treturn PrimeControls.fmt.num(value['kpis']['unacked_now']['value'])\n\texcept:\n\t\treturn '--'",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -202,7 +202,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn value['kpis']['shelved_now']\n\texcept:\n\t\treturn None",
|
||||
"code": "\ttry:\n\t\tif value['overview']:\n\t\t\tvalue = value['overview']\n\texcept:\n\t\tpass\n\ttry:\n\t\treturn value['kpis']['shelved_now']\n\texcept:\n\t\treturn None",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -216,7 +216,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn PrimeControls.fmt.num(value['kpis']['shelved_now']['value'])\n\texcept:\n\t\treturn '--'",
|
||||
"code": "\ttry:\n\t\tif value['overview']:\n\t\t\tvalue = value['overview']\n\texcept:\n\t\tpass\n\ttry:\n\t\treturn PrimeControls.fmt.num(value['kpis']['shelved_now']['value'])\n\texcept:\n\t\treturn '--'",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -248,7 +248,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn value['kpis']['standing_count']\n\texcept:\n\t\treturn None",
|
||||
"code": "\ttry:\n\t\tif value['overview']:\n\t\t\tvalue = value['overview']\n\texcept:\n\t\tpass\n\ttry:\n\t\treturn value['kpis']['standing_count']\n\texcept:\n\t\treturn None",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -262,7 +262,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn PrimeControls.fmt.num(value['kpis']['standing_count']['value'])\n\texcept:\n\t\treturn '--'",
|
||||
"code": "\ttry:\n\t\tif value['overview']:\n\t\t\tvalue = value['overview']\n\texcept:\n\t\tpass\n\ttry:\n\t\treturn PrimeControls.fmt.num(value['kpis']['standing_count']['value'])\n\texcept:\n\t\treturn '--'",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -361,7 +361,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn len(value['rate']['bins']) > 0\n\texcept:\n\t\treturn False",
|
||||
"code": "\ttry:\n\t\tif value['overview']:\n\t\t\tvalue = value['overview']\n\texcept:\n\t\tpass\n\ttry:\n\t\treturn len(value['rate']['bins']) > 0\n\texcept:\n\t\treturn False",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -375,7 +375,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\trate = value['rate']\n\t\tbins = rate['bins'] or []\n\texcept:\n\t\treturn []\n\ttry:\n\t\ttarget = float(rate['target_per_bin'])\n\texcept:\n\t\ttarget = None\n\ttry:\n\t\tuse_day = float(value['meta']['window_hours']) > 24\n\texcept:\n\t\tuse_day = False\n\tout = []\n\tfor b in bins:\n\t\ttry:\n\t\t\tt0 = b['t0']\n\t\t\tc = int(b['count'])\n\t\texcept:\n\t\t\tcontinue\n\t\ttry:\n\t\t\tflood = bool(b['flood'])\n\t\texcept:\n\t\t\tflood = False\n\t\tif use_day:\n\t\t\tlbl = PrimeControls.fmt.day_clock(t0)\n\t\telse:\n\t\t\tlbl = PrimeControls.fmt.clock(t0)\n\t\trow = {'t': lbl, 'count_base': (0 if flood else c), 'count_flood': (c if flood else 0)}\n\t\tif target is not None:\n\t\t\trow['target'] = target\n\t\tout.append(row)\n\treturn out",
|
||||
"code": "\ttry:\n\t\tif value['overview']:\n\t\t\tvalue = value['overview']\n\texcept:\n\t\tpass\n\ttry:\n\t\trate = value['rate']\n\t\tbins = rate['bins'] or []\n\texcept:\n\t\treturn []\n\ttry:\n\t\ttarget = float(rate['target_per_bin'])\n\texcept:\n\t\ttarget = None\n\ttry:\n\t\tuse_day = float(value['meta']['window_hours']) > 24\n\texcept:\n\t\tuse_day = False\n\tout = []\n\tfor b in bins:\n\t\ttry:\n\t\t\tt0 = b['t0']\n\t\t\tc = int(b['count'])\n\t\texcept:\n\t\t\tcontinue\n\t\ttry:\n\t\t\tflood = bool(b['flood'])\n\t\texcept:\n\t\t\tflood = False\n\t\tif use_day:\n\t\t\tlbl = PrimeControls.fmt.day_clock(t0)\n\t\telse:\n\t\t\tlbl = PrimeControls.fmt.clock(t0)\n\t\trow = {'t': lbl, 'count_base': (0 if flood else c), 'count_flood': (c if flood else 0)}\n\t\tif target is not None:\n\t\t\trow['target'] = target\n\t\tout.append(row)\n\treturn out",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -426,7 +426,7 @@
|
||||
"labels": {
|
||||
"font": {
|
||||
"color": "",
|
||||
"size": 16,
|
||||
"size": 12,
|
||||
"weight": 400
|
||||
},
|
||||
"text": "[bold]{name}[/]"
|
||||
@@ -439,14 +439,14 @@
|
||||
"topRight": 0
|
||||
},
|
||||
"enabled": true,
|
||||
"height": 20,
|
||||
"height": 12,
|
||||
"icon": {
|
||||
"color": "",
|
||||
"height": 20,
|
||||
"height": 12,
|
||||
"horizontalCenter": "left",
|
||||
"path": "",
|
||||
"verticalCenter": "top",
|
||||
"width": 20
|
||||
"width": 12
|
||||
},
|
||||
"mirrorLookOfSeries": true,
|
||||
"stroke": {
|
||||
@@ -454,7 +454,7 @@
|
||||
"opacity": 0,
|
||||
"width": 1
|
||||
},
|
||||
"width": 20
|
||||
"width": 12
|
||||
},
|
||||
"position": "bottom"
|
||||
},
|
||||
@@ -1301,13 +1301,13 @@
|
||||
{
|
||||
"appearance": {
|
||||
"font": {
|
||||
"size": "",
|
||||
"size": 11,
|
||||
"weight": 500
|
||||
},
|
||||
"grid": {
|
||||
"color": "",
|
||||
"dashArray": "",
|
||||
"minDistance": 60,
|
||||
"minDistance": 140,
|
||||
"opacity": 0,
|
||||
"position": 0.5
|
||||
},
|
||||
@@ -1317,7 +1317,7 @@
|
||||
"horizontalCenter": "middle",
|
||||
"opacity": 1,
|
||||
"rotation": 0,
|
||||
"verticalCenter": "middle"
|
||||
"verticalCenter": "top"
|
||||
},
|
||||
"opposite": false
|
||||
},
|
||||
@@ -1390,7 +1390,7 @@
|
||||
{
|
||||
"appearance": {
|
||||
"font": {
|
||||
"size": "",
|
||||
"size": 11,
|
||||
"weight": 500
|
||||
},
|
||||
"grid": {
|
||||
@@ -1496,7 +1496,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn len(value['rate']['bins']) == 0\n\texcept:\n\t\treturn True",
|
||||
"code": "\ttry:\n\t\tif value['overview']:\n\t\t\tvalue = value['overview']\n\texcept:\n\t\tpass\n\ttry:\n\t\treturn len(value['rate']['bins']) == 0\n\texcept:\n\t\treturn True",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -1565,7 +1565,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\tout = []\n\ttry:\n\t\trows = value['insights'] or []\n\texcept:\n\t\trows = []\n\tfor r in rows:\n\t\ttry:\n\t\t\tout.append({'severity': int(r['severity']), 'icon': r['icon'], 'text': r['text'], 'tab': r['tab']})\n\t\texcept:\n\t\t\tpass\n\treturn out",
|
||||
"code": "\ttry:\n\t\tif value['overview']:\n\t\t\tvalue = value['overview']\n\texcept:\n\t\tpass\n\tout = []\n\ttry:\n\t\trows = value['insights'] or []\n\texcept:\n\t\trows = []\n\tfor r in rows:\n\t\ttry:\n\t\t\tout.append({'severity': int(r['severity']), 'icon': r['icon'], 'text': r['text'], 'tab': r['tab']})\n\t\texcept:\n\t\t\tpass\n\treturn out",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -1605,7 +1605,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn len(value['insights']) == 0\n\texcept:\n\t\treturn True",
|
||||
"code": "\ttry:\n\t\tif value['overview']:\n\t\t\tvalue = value['overview']\n\texcept:\n\t\tpass\n\ttry:\n\t\treturn len(value['insights']) == 0\n\texcept:\n\t\treturn True",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -1671,7 +1671,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\tout = []\n\ttry:\n\t\trows = value['top_sources'] or []\n\texcept:\n\t\trows = []\n\tfor r in rows:\n\t\ttry:\n\t\t\tout.append({'rank': int(r['rank']), 'source': r['source'], 'label': r['label'], 'count': int(r['count']), 'pct': float(r['pct'])})\n\t\texcept:\n\t\t\tpass\n\treturn out",
|
||||
"code": "\ttry:\n\t\tif value['overview']:\n\t\t\tvalue = value['overview']\n\texcept:\n\t\tpass\n\tout = []\n\ttry:\n\t\trows = value['top_sources'] or []\n\texcept:\n\t\trows = []\n\tfor r in rows:\n\t\ttry:\n\t\t\tout.append({'rank': int(r['rank']), 'source': r['source'], 'label': r['label'], 'count': int(r['count']), 'pct': float(r['pct'])})\n\t\texcept:\n\t\t\tpass\n\treturn out",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -1711,7 +1711,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn len(value['top_sources']) == 0\n\texcept:\n\t\treturn True",
|
||||
"code": "\ttry:\n\t\tif value['overview']:\n\t\t\tvalue = value['overview']\n\texcept:\n\t\tpass\n\ttry:\n\t\treturn len(value['top_sources']) == 0\n\texcept:\n\t\treturn True",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -1776,7 +1776,7 @@
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\ttry:\n\t\treturn int(value['meta']['event_count']) > 0\n\texcept:\n\t\treturn False",
|
||||
"code": "\ttry:\n\t\tif value['overview']:\n\t\t\tvalue = value['overview']\n\texcept:\n\t\tpass\n\ttry:\n\t\treturn int(value['meta']['event_count']) > 0\n\texcept:\n\t\treturn False",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
@@ -1804,4 +1804,4 @@
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user