Both only checked title existence, so editing a stream's rules or a
dashboard's widgets under the same title silently skipped the update
forever. step_dashboard() now diffs the search's queries content
(delete+recreate view+search on change - no subscribers/history to lose,
unlike alerts or streams); step_streams() diffs rules individually by
(field,type,value,inverted) and PUT-updates metadata in place, since
delete+recreating a stream would briefly break live message routing.
Confirmed live on a local test deployment: a false "changed" positive
from search_types list-reordering and from search_servers.json's own
query-format inconsistency (bare string vs the {query_string,type} object
Graylog actually stores) had to be fixed before step_dashboard() settled
into a stable no-op; step_streams() was verified with a full inert
rule-add/remove and a metadata-change round-trip against the live API.
78 lines
3.1 KiB
JSON
78 lines
3.1 KiB
JSON
{
|
|
"queries": [
|
|
{
|
|
"id": "a3000000-0000-0000-0000-000000000001",
|
|
"timerange": {"type": "relative", "range": 604800},
|
|
"filter": null,
|
|
"filters": [],
|
|
"query": {"type": "elasticsearch", "query_string": ""},
|
|
"search_types": [
|
|
{
|
|
"id": "a3000000-0000-0000-0000-000000000011",
|
|
"type": "pivot",
|
|
"name": "chart",
|
|
"timerange": {"type": "relative", "range": 604800},
|
|
"query": null,
|
|
"streams": ["__SERVERS_STREAM_ID__"],
|
|
"stream_categories": [],
|
|
"series": [{"type": "count", "id": "Message count", "field": null}],
|
|
"sort": [],
|
|
"rollup": false,
|
|
"row_groups": [{"type": "time", "fields": ["timestamp"], "interval": {"type": "auto", "scaling": 1.0}}],
|
|
"column_groups": [{"type": "values", "fields": ["event_type"], "limit": 10, "skip_empty_values": false}],
|
|
"filter": null,
|
|
"filters": []
|
|
},
|
|
{
|
|
"id": "a3000000-0000-0000-0000-000000000012",
|
|
"type": "pivot",
|
|
"name": "chart",
|
|
"timerange": {"type": "relative", "range": 604800},
|
|
"query": null,
|
|
"streams": ["__SERVERS_STREAM_ID__"],
|
|
"stream_categories": [],
|
|
"series": [{"type": "count", "id": "Message count", "field": null}],
|
|
"sort": [{"type": "series", "field": "count()", "direction": "Descending"}],
|
|
"rollup": true,
|
|
"row_groups": [{"type": "values", "fields": ["event_type"], "limit": 15, "skip_empty_values": true}],
|
|
"column_groups": [],
|
|
"filter": null,
|
|
"filters": []
|
|
},
|
|
{
|
|
"id": "a3000000-0000-0000-0000-000000000013",
|
|
"type": "pivot",
|
|
"name": "chart",
|
|
"timerange": {"type": "relative", "range": 604800},
|
|
"query": null,
|
|
"streams": ["__SERVERS_STREAM_ID__"],
|
|
"stream_categories": [],
|
|
"series": [{"type": "count", "id": "Message count", "field": null}],
|
|
"sort": [{"type": "series", "field": "count()", "direction": "Descending"}],
|
|
"rollup": true,
|
|
"row_groups": [{"type": "values", "fields": ["source"], "limit": 15, "skip_empty_values": true}],
|
|
"column_groups": [],
|
|
"filter": null,
|
|
"filters": []
|
|
},
|
|
{
|
|
"id": "a3000000-0000-0000-0000-000000000014",
|
|
"type": "pivot",
|
|
"name": "chart",
|
|
"timerange": {"type": "relative", "range": 604800},
|
|
"query": {"type": "elasticsearch", "query_string": "event_type:radius_accounting"},
|
|
"streams": ["__SERVERS_STREAM_ID__"],
|
|
"stream_categories": [],
|
|
"series": [{"type": "count", "id": "Message count", "field": null}],
|
|
"sort": [{"type": "series", "field": "count()", "direction": "Descending"}],
|
|
"rollup": true,
|
|
"row_groups": [{"type": "values", "fields": ["acct_status_type"], "limit": 10, "skip_empty_values": true}],
|
|
"column_groups": [],
|
|
"filter": null,
|
|
"filters": []
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"parameters": []
|
|
}
|