Add Opensearch dashboards backup script; add dashboards objects
The OpenSearch dashboards objects like index-pattern, visualizations and dashboards should be versioned. This commit just provide a tool to make a backup of OpenSearch dashboards objects and verify in simple deployment, if the objects have been restored correctly. The whole mechanism to replace visualizations and dashboards that currently are available in OpenSearch Dashboards will be done in next patch set. Change-Id: I4f14d9309ae0a943dbaafd220c88c76dba793f91
This commit is contained in:
parent
a369aa0159
commit
368e56c00a
@ -22,6 +22,11 @@ Elasticsearch service.
|
||||
NOTE: build directories that does not provide files `buildinfo`
|
||||
and `inventory.yaml` file are skipped.
|
||||
|
||||
Opensearch Dashboards Backup
|
||||
----------------------------
|
||||
|
||||
The OpenSearch Dashboards Backup script helps to create OpenSearch
|
||||
Dashboards objects versioning.
|
||||
|
||||
Available workflows
|
||||
-------------------
|
||||
|
@ -25,3 +25,8 @@
|
||||
include_role:
|
||||
name: check-services
|
||||
tasks_from: download.yml
|
||||
|
||||
- name: Run backup and restore test
|
||||
include_role:
|
||||
name: backup-dashboards-objects
|
||||
tasks_from: main.yml
|
||||
|
@ -31,3 +31,4 @@
|
||||
state: latest
|
||||
roles:
|
||||
- check-services
|
||||
- backup-dashboards-objects
|
||||
|
@ -0,0 +1,2 @@
|
||||
---
|
||||
backup_dir: /mnt/dashboards-objects
|
160
ansible/roles/backup-dashboards-objects/tasks/main.yml
Normal file
160
ansible/roles/backup-dashboards-objects/tasks/main.yml
Normal file
@ -0,0 +1,160 @@
|
||||
---
|
||||
# Opensearch Dashboards
|
||||
- name: Setup Opensearch Dashboards
|
||||
shell: >
|
||||
podman run -d --name opensearch-dashboards
|
||||
--network host
|
||||
-e "OPENSEARCH_HOST=https://127.0.0.1:9200"
|
||||
quay.io/software-factory/opensearch-dashboards:1.1.0
|
||||
|
||||
- name: Wait for Opensearch Dashboards to be up
|
||||
wait_for:
|
||||
host: 127.0.0.1
|
||||
port: 5601
|
||||
delay: 10
|
||||
timeout: 300
|
||||
|
||||
- name: Ensure Opensearch Dashboards to be up
|
||||
uri:
|
||||
url: "http://0.0.0.0:5601/app/login"
|
||||
user: "admin"
|
||||
password: "admin"
|
||||
force_basic_auth: true
|
||||
method: GET
|
||||
status_code: "200"
|
||||
register: result
|
||||
until: result.status == 200
|
||||
retries: 30
|
||||
delay: 10
|
||||
|
||||
# Restore Openstack Opensearch Dashboards Objects
|
||||
- name: Set Dashboards backup directory
|
||||
set_fact:
|
||||
original_backup_dir: "{{ ansible_user_dir + '/' + zuul.project.src_dir | default('~/ci-log-processing') }}/opensearch-dashboards-objects"
|
||||
|
||||
- name: Get backup files to restore
|
||||
shell: |
|
||||
ls {{ original_backup_dir }}
|
||||
register: _backup_files
|
||||
|
||||
- name: Run restore backup files as privileged user
|
||||
shell: >
|
||||
podman run --rm -v {{ original_backup_dir }}:{{ original_backup_dir }}:z
|
||||
--network host
|
||||
{{ container_images.logscraper | default('quay.io/logscraper:dev') }}
|
||||
opensearch_dashboards_backup
|
||||
restore
|
||||
--dashboard-api-url http://127.0.0.1:5601
|
||||
--tenant global
|
||||
--user 'admin' --password 'admin'
|
||||
--file {{ original_backup_dir }}/{{ item }}
|
||||
--host 127.0.0.1 --port 9200
|
||||
--insecure
|
||||
loop: "{{ _backup_files.stdout_lines }}"
|
||||
|
||||
- name: Run restore backup files as non privileged user
|
||||
shell: >
|
||||
podman run --rm -v {{ original_backup_dir }}:{{ original_backup_dir }}:z
|
||||
--network host
|
||||
{{ container_images.logscraper | default('quay.io/logscraper:dev') }}
|
||||
opensearch_dashboards_backup
|
||||
restore
|
||||
--dashboard-api-url http://127.0.0.1:5601
|
||||
--tenant global
|
||||
--user 'kibanaro' --password 'kibanaro'
|
||||
--file {{ original_backup_dir }}/{{ item }}
|
||||
--host 127.0.0.1 --port 9200
|
||||
--insecure
|
||||
loop: "{{ _backup_files.stdout_lines }}"
|
||||
register: _ro_user_restore
|
||||
failed_when: _ro_user_restore.rc == 0
|
||||
|
||||
# Backup
|
||||
# NOTE: Set owner and group like it is set in the container image.
|
||||
- name: Create backup directory
|
||||
become: true
|
||||
file:
|
||||
path: "{{ backup_dir }}"
|
||||
state: directory
|
||||
owner: "1000"
|
||||
group: "1000"
|
||||
|
||||
- name: Create backup as readonly user
|
||||
shell: >
|
||||
podman run --rm -v {{ backup_dir }}:{{ backup_dir }}:z
|
||||
--network host
|
||||
{{ container_images.logscraper | default('quay.io/logscraper:dev') }}
|
||||
opensearch_dashboards_backup
|
||||
backup
|
||||
--dashboard-api-url http://127.0.0.1:5601
|
||||
--tenant global
|
||||
--user 'kibanaro' --password 'kibanaro'
|
||||
--backup-dir {{ backup_dir }}
|
||||
--insecure
|
||||
|
||||
# Check new backup files
|
||||
- name: Get content of new backup - index pattern
|
||||
command: |
|
||||
cat {{ backup_dir }}/index-pattern-global.yaml
|
||||
register: index_pattern_new
|
||||
|
||||
- name: Get content of new backup - dashboard
|
||||
command: |
|
||||
cat {{ backup_dir }}/dashboard-global.yaml
|
||||
register: dashboard_new
|
||||
|
||||
- name: Get content of new backup - visualization
|
||||
command: |
|
||||
cat {{ backup_dir }}/visualization-global.yaml
|
||||
register: visualization_new
|
||||
|
||||
- name: Fail if there are not required words in new backup
|
||||
fail:
|
||||
msg: "New backup file can be broken!"
|
||||
when:
|
||||
- "'dashboard' not in dashboard_new.stdout"
|
||||
- "'visualization' not in visualization_new.stdout"
|
||||
- "'index' not in index_pattern_new.stdout"
|
||||
|
||||
# Ensure that new backup files can be restored
|
||||
# TODO: remove old objects before restore
|
||||
- name: Set Dashboards backup directory
|
||||
set_fact:
|
||||
original_backup_dir: "{{ backup_dir }}"
|
||||
|
||||
- name: Get backup files to restore
|
||||
shell: |
|
||||
ls {{ original_backup_dir }}
|
||||
register: _backup_files
|
||||
|
||||
- name: Run restore backup files as privileged user
|
||||
shell: >
|
||||
podman run --rm -v {{ original_backup_dir }}:{{ original_backup_dir }}:z
|
||||
--network host
|
||||
{{ container_images.logscraper | default('quay.io/logscraper:dev') }}
|
||||
opensearch_dashboards_backup
|
||||
restore
|
||||
--dashboard-api-url http://127.0.0.1:5601
|
||||
--tenant global
|
||||
--user 'admin' --password 'admin'
|
||||
--file {{ original_backup_dir }}/{{ item }}
|
||||
--host 127.0.0.1 --port 9200
|
||||
--insecure
|
||||
loop: "{{ _backup_files.stdout_lines }}"
|
||||
|
||||
- name: Run restore backup files as non privileged user
|
||||
shell: >
|
||||
podman run --rm -v {{ original_backup_dir }}:{{ original_backup_dir }}:z
|
||||
--network host
|
||||
{{ container_images.logscraper | default('quay.io/logscraper:dev') }}
|
||||
opensearch_dashboards_backup
|
||||
restore
|
||||
--dashboard-api-url http://127.0.0.1:5601
|
||||
--tenant global
|
||||
--user 'kibanaro' --password 'kibanaro'
|
||||
--file {{ original_backup_dir }}/{{ item }}
|
||||
--host 127.0.0.1 --port 9200
|
||||
--insecure
|
||||
loop: "{{ _backup_files.stdout_lines }}"
|
||||
register: _ro_user_restore
|
||||
failed_when: _ro_user_restore.rc == 0
|
485
logscraper/opensearch_dashboards_backup.py
Executable file
485
logscraper/opensearch_dashboards_backup.py
Executable file
@ -0,0 +1,485 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import argparse
|
||||
import datetime
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import requests
|
||||
import sys
|
||||
import time
|
||||
import yaml
|
||||
|
||||
try:
|
||||
from logsender import get_es_client
|
||||
except ImportError:
|
||||
from logscraper.logsender import get_es_client
|
||||
|
||||
from urllib.parse import urlparse
|
||||
|
||||
saved_objects_types = ('index-pattern', 'visualization', 'dashboard')
|
||||
|
||||
to_remove_keys = ['updated_at', 'version', 'migrationVersion']
|
||||
|
||||
|
||||
def get_arguments():
|
||||
args_parser = argparse.ArgumentParser(
|
||||
description='Backup, restore or convert OpenSearch Dashboards '
|
||||
'saved objects.')
|
||||
args_parser.add_argument('action',
|
||||
choices=['backup', 'restore', 'convert'],
|
||||
metavar='N')
|
||||
args_parser.add_argument('--dashboard-api-url',
|
||||
default='http://127.0.0.1:5601',
|
||||
help='URL to access Opensearch Dashboards API. '
|
||||
'NOTE: if the instance is AWS Opensearch service,'
|
||||
' url should end with /_dashboards.')
|
||||
args_parser.add_argument('--file', help='File to restore or convert from '
|
||||
'ndjson to yaml')
|
||||
args_parser.add_argument('--username', default='',
|
||||
help='Opensearch dashboards username')
|
||||
args_parser.add_argument('--password', default='', help='Opensearch '
|
||||
'dasboards password')
|
||||
args_parser.add_argument('--backup-dir',
|
||||
help='Dir where backups will be stored',
|
||||
default=os.path.dirname(
|
||||
os.path.realpath(__file__)))
|
||||
args_parser.add_argument('--no-resolve-conflicts',
|
||||
default=False,
|
||||
help='Resolve conflicts by removing index '
|
||||
'id reference in backup file')
|
||||
args_parser.add_argument('--overwrite-index-pattern',
|
||||
action='store_true',
|
||||
help='WARNING: Use that option if you want'
|
||||
'to restart also index pattern')
|
||||
args_parser.add_argument('--insecure',
|
||||
action='store_false',
|
||||
help='Use that option to ignore if SSL cert '
|
||||
'has been verified by root CA')
|
||||
args_parser.add_argument('--tenant',
|
||||
help='Specify tenant for getting data.'
|
||||
'NOTE: if none is set, it will take Global')
|
||||
args_parser.add_argument('--all-tenants',
|
||||
action='store_true',
|
||||
help='Bakup all objects in all '
|
||||
'tenants. Works only with backup.'
|
||||
'NOTE: requires param: --opensearch-api-url')
|
||||
args_parser.add_argument('--skip-verify-index',
|
||||
action='store_true',
|
||||
help='Skip checking that if object reference to '
|
||||
'index pattern exists in the Opensearch '
|
||||
'Dashboards.')
|
||||
args_parser.add_argument('--host',
|
||||
help='Opensearch host. Need to ensure that '
|
||||
'index pattern exists before restore')
|
||||
args_parser.add_argument('--port',
|
||||
help='Opensearch port. Need to ensure that '
|
||||
'index pattern exists before restore')
|
||||
args_parser.add_argument('--ca-file',
|
||||
help='Custom CA certificate file')
|
||||
args_parser.add_argument("--debug", help="Print more information",
|
||||
type=bool,
|
||||
default=False)
|
||||
return args_parser.parse_args()
|
||||
|
||||
|
||||
def convert_to_yaml(text, remove_references):
|
||||
# reparse text
|
||||
text_lines = []
|
||||
try:
|
||||
for line in text:
|
||||
if isinstance(line, dict):
|
||||
text_lines.append(line)
|
||||
else:
|
||||
text_lines.append(json.loads(line))
|
||||
except Exception as e:
|
||||
logging.critical(e)
|
||||
|
||||
if remove_references:
|
||||
text_lines = remove_reference(text_lines)
|
||||
# Disable aliases/anchors
|
||||
yaml.Dumper.ignore_aliases = lambda *args: True
|
||||
return yaml.dump(text_lines)
|
||||
|
||||
|
||||
def save_content_to_file(text, backup_file, remove_references=True):
|
||||
if isinstance(text, dict):
|
||||
text = str(text)
|
||||
text = convert_to_yaml(text, remove_references)
|
||||
with open(backup_file, 'a') as f:
|
||||
f.write(text)
|
||||
|
||||
|
||||
def parse_dashboards_output(text):
|
||||
new_text = []
|
||||
try:
|
||||
text = [json.loads(text)]
|
||||
except json.decoder.JSONDecodeError:
|
||||
for text_obj in text.rsplit('\n'):
|
||||
n_text = json.loads(text_obj)
|
||||
new_text.append(n_text)
|
||||
return new_text if new_text else text
|
||||
|
||||
|
||||
def check_if_empty(text):
|
||||
text = json.loads(text)
|
||||
if 'exportedCount' in text and text['exportedCount'] == 0:
|
||||
return True
|
||||
|
||||
|
||||
def remove_obj_keys(ref):
|
||||
for k in to_remove_keys:
|
||||
ref.pop(k, None)
|
||||
return ref
|
||||
|
||||
|
||||
def check_kibana_api(dashboard_api_url):
|
||||
"""Check if OpenSearch Dashboards API is available"""
|
||||
r = requests.get(dashboard_api_url)
|
||||
if r.status_code != 404:
|
||||
return True
|
||||
|
||||
|
||||
def remove_reference(text):
|
||||
new_text = []
|
||||
new_references = []
|
||||
for text_obj in text:
|
||||
if 'references' not in text_obj:
|
||||
new_text.append(text_obj)
|
||||
continue
|
||||
for ref in text_obj['references']:
|
||||
if (not ref.get('id').startswith('AX')
|
||||
and len(ref.get('id')) != 20 and
|
||||
remove_obj_keys(ref) not in new_references):
|
||||
new_references.append(remove_obj_keys(ref))
|
||||
text_obj['references'] = new_references
|
||||
new_text.append(text_obj)
|
||||
return new_text if new_text else text
|
||||
|
||||
|
||||
def _ensure_index_exists(index_id, es_client):
|
||||
'''Ensure that index_id exists in the Opensearch dashboards'''
|
||||
body = {
|
||||
"_source": ["index-pattern.title"],
|
||||
"query": {
|
||||
"term": {
|
||||
"type": "index-pattern"
|
||||
}
|
||||
}
|
||||
}
|
||||
index_patterns = es_client.search(body=body)
|
||||
if 'hits' not in index_patterns:
|
||||
logging.critical("Can not get any index pattern list. "
|
||||
"Check permissions!")
|
||||
return
|
||||
|
||||
if not index_patterns['hits']['total']['value']:
|
||||
logging.info("Index pattern with id %s does not exists" % index_id)
|
||||
return
|
||||
|
||||
for index in index_patterns['hits']['hits']:
|
||||
if index['_id'] == "index-pattern:%s" % index_id:
|
||||
index_name = index['_source']['index-pattern']['title']
|
||||
logging.info("Found index pattern. It belongs to %s" % index_name)
|
||||
# Ensure once again that the index pattern exists
|
||||
return es_client.indices.exists(index=index_name)
|
||||
|
||||
|
||||
def filter_dashboards_object(dash_obj, overwrite_index, es_client,
|
||||
skip_verify_index):
|
||||
"""Filter OpenSearch Dasjboards object
|
||||
|
||||
Filter objects that got index-pattern or have reference to unexisting
|
||||
index pattern
|
||||
"""
|
||||
if not isinstance(dash_obj, dict):
|
||||
dash_obj = json.loads(dash_obj)
|
||||
|
||||
# Restore index pattern when it does not exists. Otherwise restore it.
|
||||
if dash_obj.get('type') == 'index-pattern' and not skip_verify_index:
|
||||
is_index = _ensure_index_exists(dash_obj.get('id'), es_client)
|
||||
if is_index and not overwrite_index:
|
||||
return
|
||||
|
||||
if 'references' in dash_obj and dash_obj.get('references', []):
|
||||
for ref in dash_obj['references']:
|
||||
if skip_verify_index:
|
||||
continue
|
||||
if ref.get('type') == 'index-pattern' and not skip_verify_index:
|
||||
is_index = _ensure_index_exists(ref.get('id'), es_client)
|
||||
if not is_index:
|
||||
logging.critical("Can not restore that object due index "
|
||||
"pattern %s does not exists!" %
|
||||
ref.get('id'))
|
||||
return
|
||||
return dash_obj
|
||||
|
||||
|
||||
def make_request(url, username, password, text, tenant, cookies,
|
||||
insecure=False, retry=True):
|
||||
r = None
|
||||
headers = {'osd-xsrf': 'true'}
|
||||
if tenant:
|
||||
headers['securitytenant'] = tenant
|
||||
|
||||
try:
|
||||
r = requests.post(url,
|
||||
auth=(username, password),
|
||||
headers=headers,
|
||||
files={'file': ('backup.ndjson', text)},
|
||||
timeout=10,
|
||||
verify=insecure)
|
||||
except requests.exceptions.ReadTimeout:
|
||||
if not retry:
|
||||
logging.warning("Importing failed. Retrying...")
|
||||
time.sleep(10)
|
||||
make_request(url, username, password, text, tenant, cookies,
|
||||
insecure)
|
||||
|
||||
if r is None:
|
||||
logging.critical("Can not reach Opensearch Dashboards service.")
|
||||
sys.exit(1)
|
||||
|
||||
if r and "Please enter your credentials" in r.text:
|
||||
logging.warning("Please provide correct username and password")
|
||||
sys.exit(1)
|
||||
|
||||
if r.status_code == 401:
|
||||
logging.warning("Unauthorized. Please provide username and password")
|
||||
|
||||
return r
|
||||
|
||||
|
||||
def _get_file_content(backup_file):
|
||||
if (backup_file.endswith('yml') or backup_file.endswith('yaml')):
|
||||
with open(backup_file) as f:
|
||||
text = yaml.safe_load(f)
|
||||
else:
|
||||
with open(backup_file) as f:
|
||||
text = f.readlines()
|
||||
return text
|
||||
|
||||
|
||||
def _get_cookies(base_url, tenant, user, password):
|
||||
# NOTE: Helpful link:
|
||||
# https://github.com/Petes77/AWS-Native-SIEM/blob/main/source/lambda/deploy_es/index.py
|
||||
headers = {'Content-Type': 'application/json', 'osd-xsrf': 'true'}
|
||||
url = '%s/auth/login?security_tenant=%s' % (base_url, tenant)
|
||||
auth = {'username': user, 'password': password}
|
||||
response = requests.post(url, headers=headers, json=json.dumps(auth))
|
||||
return response.cookies
|
||||
|
||||
|
||||
def setup_logging(debug):
|
||||
if debug:
|
||||
logging.basicConfig(format="%(asctime)s %(message)s",
|
||||
level=logging.DEBUG)
|
||||
else:
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
||||
|
||||
def backup(dashboard_api_url, username, password, backup_dir, insecure,
|
||||
tenant):
|
||||
"""Return string with newline-delimitered json """
|
||||
|
||||
saved_objects = {}
|
||||
if not backup_dir:
|
||||
backup_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
# Set the same time for all backups if previous exists
|
||||
b_time = datetime.datetime.now().strftime("%Y-%m-%d-%H:%M")
|
||||
|
||||
cookies = _get_cookies(dashboard_api_url, tenant, username, password)
|
||||
|
||||
url = dashboard_api_url + '/api/saved_objects/_export'
|
||||
for obj_type in saved_objects_types:
|
||||
logging.debug("Working on %s" % obj_type)
|
||||
|
||||
headers = {'Content-Type': 'application/json',
|
||||
'osd-xsrf': 'true'}
|
||||
|
||||
if tenant:
|
||||
headers['securitytenant'] = tenant
|
||||
|
||||
payload = {'type': [obj_type], 'excludeExportDetails': True}
|
||||
|
||||
r = requests.post(url,
|
||||
auth=(username, password),
|
||||
cookies=cookies,
|
||||
headers=headers,
|
||||
json=json.dumps(payload),
|
||||
verify=insecure)
|
||||
|
||||
if r.status_code == 400:
|
||||
# Print warning on missing object, but continue
|
||||
logging.warning("Can not backup object %s" % obj_type)
|
||||
continue
|
||||
else:
|
||||
r.raise_for_status()
|
||||
|
||||
if not r.text:
|
||||
continue
|
||||
|
||||
if tenant:
|
||||
backup_file = "%s/%s-%s.yaml" % (backup_dir, obj_type, tenant)
|
||||
else:
|
||||
backup_file = "%s/%s.yaml" % (backup_dir, obj_type)
|
||||
|
||||
if os.path.exists(backup_file):
|
||||
backup_file = "%s-%s" % (backup_file, b_time)
|
||||
|
||||
text = parse_dashboards_output(r.text)
|
||||
saved_objects[obj_type] = text
|
||||
save_content_to_file(text, backup_file)
|
||||
|
||||
|
||||
def restore(dashboard_api_url, username, password, text, resolve_conflicts,
|
||||
insecure, tenant, overwrite_index, es_client, skip_verify_index):
|
||||
"""Restore object to OpenSearch Dashboards."""
|
||||
|
||||
cookies = _get_cookies(dashboard_api_url, tenant, username, password)
|
||||
url = dashboard_api_url + '/api/saved_objects/_import?overwrite=true'
|
||||
|
||||
if not isinstance(text, list):
|
||||
text = [text]
|
||||
|
||||
for dash_obj in text:
|
||||
logging.debug("Working on %s" % dash_obj)
|
||||
|
||||
dash_obj = filter_dashboards_object(dash_obj, overwrite_index,
|
||||
es_client, skip_verify_index)
|
||||
if not dash_obj:
|
||||
continue
|
||||
|
||||
if not isinstance(dash_obj, dict):
|
||||
# Ensure that the dash_obj is one-time converted json object
|
||||
dash_obj = json.dumps(json.loads(dash_obj))
|
||||
else:
|
||||
dash_obj = json.dumps(dash_obj)
|
||||
|
||||
if check_if_empty(dash_obj):
|
||||
logging.info("Spotted empty object. Continue...")
|
||||
continue
|
||||
|
||||
r = make_request(url, username, password, dash_obj, tenant, cookies,
|
||||
insecure)
|
||||
|
||||
try:
|
||||
response_error = json.loads(r.text)
|
||||
if response_error.get('errors'):
|
||||
logging.warning("\n\nSome problem on restoring %s: %s\n\n" %
|
||||
(dash_obj, response_error['errors']))
|
||||
except Exception as e:
|
||||
logging.critical("The object to restore does not "
|
||||
"look correct: %s" % e)
|
||||
|
||||
if not r:
|
||||
logging.warning("Can not import %s into OpenSearch "
|
||||
"Dashboards. Skipping..." % dash_obj)
|
||||
continue
|
||||
|
||||
response_text = json.loads(r.text)
|
||||
if not response_text['success'] and resolve_conflicts:
|
||||
text = remove_reference(dash_obj)
|
||||
r = make_request(url, username, password, text, tenant, cookies,
|
||||
insecure)
|
||||
|
||||
logging.info("Restore status: %s with details %s" % (r.reason, r.text))
|
||||
r.raise_for_status()
|
||||
|
||||
|
||||
def convert(text, convert_file):
|
||||
convert_file = "%s-converted.yaml" % convert_file
|
||||
save_content_to_file(text, convert_file, False)
|
||||
logging.info("File converted. You can check %s" % convert_file)
|
||||
|
||||
|
||||
def get_all_tenants(opensearch_api_url, username, password, insecure):
|
||||
url = "%s/_opendistro/_security/api/tenants/" % opensearch_api_url
|
||||
r = requests.get(url, auth=(username, password), verify=insecure)
|
||||
if r.status_code != 200:
|
||||
r.raise_for_status()
|
||||
sys.exit(1)
|
||||
return list(json.loads(r.text))
|
||||
|
||||
|
||||
def main():
|
||||
args = get_arguments()
|
||||
dashboard_api_url = args.dashboard_api_url
|
||||
setup_logging(args.debug)
|
||||
|
||||
if (not args.dashboard_api_url.startswith('http')
|
||||
and not args.dashboard_api_url.startswith('https')):
|
||||
dashboard_api_url = "https://%s" % args.dashboard_api_url
|
||||
|
||||
if (not dashboard_api_url.endswith('_dashboards') and
|
||||
not urlparse(dashboard_api_url).port == 5601 and
|
||||
not check_kibana_api(dashboard_api_url)):
|
||||
# NOTE: The url should look like:
|
||||
# https://opensearch.logs.openstack.org/_dashboards
|
||||
# Old OpenSearch might not contain the _dashboards in the url.
|
||||
dashboard_api_url = "%s/_dashboards" % dashboard_api_url
|
||||
|
||||
if args.action == 'backup':
|
||||
if args.all_tenants and args.tenant:
|
||||
logging.critical("Can not use --all-tenants with --tenant option")
|
||||
sys.exit(1)
|
||||
|
||||
if args.all_tenants:
|
||||
if not args.opensearch_api_url:
|
||||
logging.critical('Please provide --opensearch-api-url to list '
|
||||
'all tenants available in Elasticsearch.')
|
||||
sys.exit(1)
|
||||
all_tenants = get_all_tenants(args.opensearch_api_url,
|
||||
args.username, args.password,
|
||||
args.insecure)
|
||||
|
||||
for tenant in all_tenants:
|
||||
backup(dashboard_api_url, args.username, args.password,
|
||||
args.backup_dir, args.insecure, tenant)
|
||||
else:
|
||||
backup(dashboard_api_url, args.username, args.password,
|
||||
args.backup_dir, args.insecure, args.tenant)
|
||||
elif args.action == 'restore':
|
||||
if not args.file:
|
||||
logging.critical("Please provide --file to restore!")
|
||||
sys.exit(1)
|
||||
|
||||
es_client = None
|
||||
if not args.skip_verify_index and (not args.host and not args.port):
|
||||
logging.critical("Can not continue. Please provide --host and "
|
||||
"--port params")
|
||||
sys.exit(1)
|
||||
|
||||
if args.host and args.port:
|
||||
es_client = get_es_client(args)
|
||||
|
||||
text = _get_file_content(args.file)
|
||||
restore(dashboard_api_url, args.username, args.password,
|
||||
text, args.no_resolve_conflicts, args.insecure, args.tenant,
|
||||
args.overwrite_index_pattern, es_client,
|
||||
args.skip_verify_index)
|
||||
|
||||
elif args.action == 'convert':
|
||||
if not args.file:
|
||||
logging.critical("Please provide --file to convert!")
|
||||
sys.exit(1)
|
||||
|
||||
text = _get_file_content(args.file)
|
||||
convert(text, args.file)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
266
opensearch-dashboards-objects/dashboard-global.yaml
Normal file
266
opensearch-dashboards-objects/dashboard-global.yaml
Normal file
@ -0,0 +1,266 @@
|
||||
- attributes:
|
||||
description: ''
|
||||
hits: 0
|
||||
kibanaSavedObjectMeta:
|
||||
searchSourceJSON: '{"query":{"query":"","language":"kuery"},"filter":[]}'
|
||||
optionsJSON: '{"hidePanelTitles":false,"useMargins":true}'
|
||||
panelsJSON: '[{"version":"2.3.0","gridData":{"h":20,"i":"ba34ecbe-c58f-4ffd-ab15-09bc9b1c7bb8","w":24,"x":0,"y":0},"panelIndex":"ba34ecbe-c58f-4ffd-ab15-09bc9b1c7bb8","embeddableConfig":{"vis":{"params":{"sort":{"columnIndex":1,"direction":"desc"}}},"table":null},"panelRefName":"panel_0"},{"version":"2.3.0","gridData":{"h":20,"i":"d3ec09db-1f70-4b7a-8176-04be98599f1f","w":24,"x":24,"y":0},"panelIndex":"d3ec09db-1f70-4b7a-8176-04be98599f1f","embeddableConfig":{},"panelRefName":"panel_1"},{"version":"2.3.0","gridData":{"h":20,"i":"97de7c5f-f99a-4c26-92a3-006a540341ec","w":24,"x":0,"y":20},"panelIndex":"97de7c5f-f99a-4c26-92a3-006a540341ec","embeddableConfig":{},"panelRefName":"panel_2"},{"version":"2.3.0","gridData":{"h":20,"i":"75227adc-78b1-46ac-8ad6-c8c3631feb48","w":24,"x":24,"y":20},"panelIndex":"75227adc-78b1-46ac-8ad6-c8c3631feb48","embeddableConfig":{"vis":{"params":{"sort":{"columnIndex":0,"direction":null}}},"table":null},"panelRefName":"panel_3"}]'
|
||||
timeRestore: false
|
||||
title: Subunit - Test Results
|
||||
version: 1
|
||||
id: a2282980-4327-11ed-8b28-cdde0c7cf02f
|
||||
migrationVersion:
|
||||
dashboard: 7.9.3
|
||||
references:
|
||||
- id: 0622de00-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_0
|
||||
type: visualization
|
||||
- id: 0faeb700-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_1
|
||||
type: visualization
|
||||
- id: 3aef4150-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_2
|
||||
type: visualization
|
||||
- id: 60963b70-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_3
|
||||
type: visualization
|
||||
- id: f265f480-ab89-11ec-91e6-db9fe3b6eb30
|
||||
name: panel_0
|
||||
type: visualization
|
||||
- id: 82acec10-ab8a-11ec-8d45-61a12b5378d4
|
||||
name: panel_1
|
||||
type: visualization
|
||||
- id: c913a8d0-ab8d-11ec-bc63-0df653d5ab54
|
||||
name: panel_2
|
||||
type: visualization
|
||||
type: dashboard
|
||||
updated_at: '2022-10-03T15:09:04.276Z'
|
||||
version: WzQ0MDAsMV0=
|
||||
- attributes:
|
||||
description: ''
|
||||
hits: 0
|
||||
kibanaSavedObjectMeta:
|
||||
searchSourceJSON: '{"query":{"query":"","language":"kuery"},"filter":[]}'
|
||||
optionsJSON: '{"hidePanelTitles":false,"useMargins":true}'
|
||||
panelsJSON: '[{"version":"2.3.0","gridData":{"h":20,"i":"ba34ecbe-c58f-4ffd-ab15-09bc9b1c7bb8","w":24,"x":0,"y":0},"panelIndex":"ba34ecbe-c58f-4ffd-ab15-09bc9b1c7bb8","embeddableConfig":{"vis":{"params":{"sort":{"columnIndex":1,"direction":"desc"}}},"table":null},"panelRefName":"panel_0"},{"version":"2.3.0","gridData":{"h":20,"i":"d3ec09db-1f70-4b7a-8176-04be98599f1f","w":24,"x":24,"y":0},"panelIndex":"d3ec09db-1f70-4b7a-8176-04be98599f1f","embeddableConfig":{},"panelRefName":"panel_1"},{"version":"2.3.0","gridData":{"h":20,"i":"97de7c5f-f99a-4c26-92a3-006a540341ec","w":24,"x":0,"y":20},"panelIndex":"97de7c5f-f99a-4c26-92a3-006a540341ec","embeddableConfig":{},"panelRefName":"panel_2"},{"version":"2.3.0","gridData":{"h":20,"i":"75227adc-78b1-46ac-8ad6-c8c3631feb48","w":24,"x":24,"y":20},"panelIndex":"75227adc-78b1-46ac-8ad6-c8c3631feb48","embeddableConfig":{"vis":{"params":{"sort":{"columnIndex":0,"direction":null}}},"table":null},"panelRefName":"panel_3"}]'
|
||||
timeRestore: false
|
||||
title: Subunit - Test Results
|
||||
version: 1
|
||||
id: a2282980-4327-11ed-8b28-cdde0c7cf02f
|
||||
migrationVersion:
|
||||
dashboard: 7.9.3
|
||||
references:
|
||||
- id: 0622de00-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_0
|
||||
type: visualization
|
||||
- id: 0faeb700-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_1
|
||||
type: visualization
|
||||
- id: 3aef4150-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_2
|
||||
type: visualization
|
||||
- id: 60963b70-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_3
|
||||
type: visualization
|
||||
- id: f265f480-ab89-11ec-91e6-db9fe3b6eb30
|
||||
name: panel_0
|
||||
type: visualization
|
||||
- id: 82acec10-ab8a-11ec-8d45-61a12b5378d4
|
||||
name: panel_1
|
||||
type: visualization
|
||||
- id: c913a8d0-ab8d-11ec-bc63-0df653d5ab54
|
||||
name: panel_2
|
||||
type: visualization
|
||||
type: dashboard
|
||||
updated_at: '2022-10-03T15:09:04.276Z'
|
||||
version: WzQ0MDAsMV0=
|
||||
- attributes:
|
||||
description: ''
|
||||
hits: 0
|
||||
kibanaSavedObjectMeta:
|
||||
searchSourceJSON: '{"query":{"query":"","language":"kuery"},"filter":[]}'
|
||||
optionsJSON: '{"hidePanelTitles":false,"useMargins":true}'
|
||||
panelsJSON: '[{"version":"2.3.0","gridData":{"h":20,"i":"ba34ecbe-c58f-4ffd-ab15-09bc9b1c7bb8","w":24,"x":0,"y":0},"panelIndex":"ba34ecbe-c58f-4ffd-ab15-09bc9b1c7bb8","embeddableConfig":{"vis":{"params":{"sort":{"columnIndex":1,"direction":"desc"}}},"table":null},"panelRefName":"panel_0"},{"version":"2.3.0","gridData":{"h":20,"i":"d3ec09db-1f70-4b7a-8176-04be98599f1f","w":24,"x":24,"y":0},"panelIndex":"d3ec09db-1f70-4b7a-8176-04be98599f1f","embeddableConfig":{},"panelRefName":"panel_1"},{"version":"2.3.0","gridData":{"h":20,"i":"97de7c5f-f99a-4c26-92a3-006a540341ec","w":24,"x":0,"y":20},"panelIndex":"97de7c5f-f99a-4c26-92a3-006a540341ec","embeddableConfig":{},"panelRefName":"panel_2"},{"version":"2.3.0","gridData":{"h":20,"i":"75227adc-78b1-46ac-8ad6-c8c3631feb48","w":24,"x":24,"y":20},"panelIndex":"75227adc-78b1-46ac-8ad6-c8c3631feb48","embeddableConfig":{"vis":{"params":{"sort":{"columnIndex":0,"direction":null}}},"table":null},"panelRefName":"panel_3"}]'
|
||||
timeRestore: false
|
||||
title: Subunit - Test Results
|
||||
version: 1
|
||||
id: a2282980-4327-11ed-8b28-cdde0c7cf02f
|
||||
migrationVersion:
|
||||
dashboard: 7.9.3
|
||||
references:
|
||||
- id: 0622de00-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_0
|
||||
type: visualization
|
||||
- id: 0faeb700-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_1
|
||||
type: visualization
|
||||
- id: 3aef4150-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_2
|
||||
type: visualization
|
||||
- id: 60963b70-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_3
|
||||
type: visualization
|
||||
- id: f265f480-ab89-11ec-91e6-db9fe3b6eb30
|
||||
name: panel_0
|
||||
type: visualization
|
||||
- id: 82acec10-ab8a-11ec-8d45-61a12b5378d4
|
||||
name: panel_1
|
||||
type: visualization
|
||||
- id: c913a8d0-ab8d-11ec-bc63-0df653d5ab54
|
||||
name: panel_2
|
||||
type: visualization
|
||||
type: dashboard
|
||||
updated_at: '2022-10-03T15:09:04.276Z'
|
||||
version: WzQ0MDAsMV0=
|
||||
- attributes:
|
||||
description: ''
|
||||
hits: 0
|
||||
kibanaSavedObjectMeta:
|
||||
searchSourceJSON: '{"query":{"query":"","language":"kuery"},"filter":[]}'
|
||||
optionsJSON: '{"hidePanelTitles":false,"useMargins":true}'
|
||||
panelsJSON: '[{"version":"2.3.0","gridData":{"h":20,"i":"ba34ecbe-c58f-4ffd-ab15-09bc9b1c7bb8","w":24,"x":0,"y":0},"panelIndex":"ba34ecbe-c58f-4ffd-ab15-09bc9b1c7bb8","embeddableConfig":{"vis":{"params":{"sort":{"columnIndex":1,"direction":"desc"}}},"table":null},"panelRefName":"panel_0"},{"version":"2.3.0","gridData":{"h":20,"i":"d3ec09db-1f70-4b7a-8176-04be98599f1f","w":24,"x":24,"y":0},"panelIndex":"d3ec09db-1f70-4b7a-8176-04be98599f1f","embeddableConfig":{},"panelRefName":"panel_1"},{"version":"2.3.0","gridData":{"h":20,"i":"97de7c5f-f99a-4c26-92a3-006a540341ec","w":24,"x":0,"y":20},"panelIndex":"97de7c5f-f99a-4c26-92a3-006a540341ec","embeddableConfig":{},"panelRefName":"panel_2"},{"version":"2.3.0","gridData":{"h":20,"i":"75227adc-78b1-46ac-8ad6-c8c3631feb48","w":24,"x":24,"y":20},"panelIndex":"75227adc-78b1-46ac-8ad6-c8c3631feb48","embeddableConfig":{"vis":{"params":{"sort":{"columnIndex":0,"direction":null}}},"table":null},"panelRefName":"panel_3"}]'
|
||||
timeRestore: false
|
||||
title: Subunit - Test Results
|
||||
version: 1
|
||||
id: a2282980-4327-11ed-8b28-cdde0c7cf02f
|
||||
migrationVersion:
|
||||
dashboard: 7.9.3
|
||||
references:
|
||||
- id: 0622de00-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_0
|
||||
type: visualization
|
||||
- id: 0faeb700-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_1
|
||||
type: visualization
|
||||
- id: 3aef4150-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_2
|
||||
type: visualization
|
||||
- id: 60963b70-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_3
|
||||
type: visualization
|
||||
- id: f265f480-ab89-11ec-91e6-db9fe3b6eb30
|
||||
name: panel_0
|
||||
type: visualization
|
||||
- id: 82acec10-ab8a-11ec-8d45-61a12b5378d4
|
||||
name: panel_1
|
||||
type: visualization
|
||||
- id: c913a8d0-ab8d-11ec-bc63-0df653d5ab54
|
||||
name: panel_2
|
||||
type: visualization
|
||||
type: dashboard
|
||||
updated_at: '2022-10-03T15:09:04.276Z'
|
||||
version: WzQ0MDAsMV0=
|
||||
- attributes:
|
||||
description: ''
|
||||
hits: 0
|
||||
kibanaSavedObjectMeta:
|
||||
searchSourceJSON: '{"query":{"language":"kuery","query":""},"filter":[]}'
|
||||
optionsJSON: '{"hidePanelTitles":false,"useMargins":true}'
|
||||
panelsJSON: '[{"version":"1.1.0","gridData":{"x":0,"y":0,"w":24,"h":19,"i":"e0d6a1ea-fbcd-4363-9486-f05394bc6187"},"panelIndex":"e0d6a1ea-fbcd-4363-9486-f05394bc6187","embeddableConfig":{},"panelRefName":"panel_0"},{"version":"1.1.0","gridData":{"x":24,"y":0,"w":24,"h":19,"i":"b10b9ed7-b68b-45c6-8d2c-d47494fbe4d6"},"panelIndex":"b10b9ed7-b68b-45c6-8d2c-d47494fbe4d6","embeddableConfig":{},"panelRefName":"panel_1"},{"version":"1.1.0","gridData":{"x":0,"y":19,"w":48,"h":17,"i":"14e572d9-3b20-42e9-8a97-296f00d37494"},"panelIndex":"14e572d9-3b20-42e9-8a97-296f00d37494","embeddableConfig":{},"panelRefName":"panel_2"}]'
|
||||
timeRestore: false
|
||||
title: Openstack build status
|
||||
version: 1
|
||||
id: c00d5ae0-ab8a-11ec-a871-17bd3b1fcb34
|
||||
migrationVersion:
|
||||
dashboard: 7.9.3
|
||||
references:
|
||||
- id: 0622de00-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_0
|
||||
type: visualization
|
||||
- id: 0faeb700-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_1
|
||||
type: visualization
|
||||
- id: 3aef4150-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_2
|
||||
type: visualization
|
||||
- id: 60963b70-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_3
|
||||
type: visualization
|
||||
- id: f265f480-ab89-11ec-91e6-db9fe3b6eb30
|
||||
name: panel_0
|
||||
type: visualization
|
||||
- id: 82acec10-ab8a-11ec-8d45-61a12b5378d4
|
||||
name: panel_1
|
||||
type: visualization
|
||||
- id: c913a8d0-ab8d-11ec-bc63-0df653d5ab54
|
||||
name: panel_2
|
||||
type: visualization
|
||||
type: dashboard
|
||||
updated_at: '2022-03-24T16:17:42.713Z'
|
||||
version: WzU4NCwxXQ==
|
||||
- attributes:
|
||||
description: ''
|
||||
hits: 0
|
||||
kibanaSavedObjectMeta:
|
||||
searchSourceJSON: '{"query":{"language":"kuery","query":""},"filter":[]}'
|
||||
optionsJSON: '{"hidePanelTitles":false,"useMargins":true}'
|
||||
panelsJSON: '[{"version":"1.1.0","gridData":{"x":0,"y":0,"w":24,"h":19,"i":"e0d6a1ea-fbcd-4363-9486-f05394bc6187"},"panelIndex":"e0d6a1ea-fbcd-4363-9486-f05394bc6187","embeddableConfig":{},"panelRefName":"panel_0"},{"version":"1.1.0","gridData":{"x":24,"y":0,"w":24,"h":19,"i":"b10b9ed7-b68b-45c6-8d2c-d47494fbe4d6"},"panelIndex":"b10b9ed7-b68b-45c6-8d2c-d47494fbe4d6","embeddableConfig":{},"panelRefName":"panel_1"},{"version":"1.1.0","gridData":{"x":0,"y":19,"w":48,"h":17,"i":"14e572d9-3b20-42e9-8a97-296f00d37494"},"panelIndex":"14e572d9-3b20-42e9-8a97-296f00d37494","embeddableConfig":{},"panelRefName":"panel_2"}]'
|
||||
timeRestore: false
|
||||
title: Openstack build status
|
||||
version: 1
|
||||
id: c00d5ae0-ab8a-11ec-a871-17bd3b1fcb34
|
||||
migrationVersion:
|
||||
dashboard: 7.9.3
|
||||
references:
|
||||
- id: 0622de00-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_0
|
||||
type: visualization
|
||||
- id: 0faeb700-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_1
|
||||
type: visualization
|
||||
- id: 3aef4150-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_2
|
||||
type: visualization
|
||||
- id: 60963b70-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_3
|
||||
type: visualization
|
||||
- id: f265f480-ab89-11ec-91e6-db9fe3b6eb30
|
||||
name: panel_0
|
||||
type: visualization
|
||||
- id: 82acec10-ab8a-11ec-8d45-61a12b5378d4
|
||||
name: panel_1
|
||||
type: visualization
|
||||
- id: c913a8d0-ab8d-11ec-bc63-0df653d5ab54
|
||||
name: panel_2
|
||||
type: visualization
|
||||
type: dashboard
|
||||
updated_at: '2022-03-24T16:17:42.713Z'
|
||||
version: WzU4NCwxXQ==
|
||||
- attributes:
|
||||
description: ''
|
||||
hits: 0
|
||||
kibanaSavedObjectMeta:
|
||||
searchSourceJSON: '{"query":{"language":"kuery","query":""},"filter":[]}'
|
||||
optionsJSON: '{"hidePanelTitles":false,"useMargins":true}'
|
||||
panelsJSON: '[{"version":"1.1.0","gridData":{"x":0,"y":0,"w":24,"h":19,"i":"e0d6a1ea-fbcd-4363-9486-f05394bc6187"},"panelIndex":"e0d6a1ea-fbcd-4363-9486-f05394bc6187","embeddableConfig":{},"panelRefName":"panel_0"},{"version":"1.1.0","gridData":{"x":24,"y":0,"w":24,"h":19,"i":"b10b9ed7-b68b-45c6-8d2c-d47494fbe4d6"},"panelIndex":"b10b9ed7-b68b-45c6-8d2c-d47494fbe4d6","embeddableConfig":{},"panelRefName":"panel_1"},{"version":"1.1.0","gridData":{"x":0,"y":19,"w":48,"h":17,"i":"14e572d9-3b20-42e9-8a97-296f00d37494"},"panelIndex":"14e572d9-3b20-42e9-8a97-296f00d37494","embeddableConfig":{},"panelRefName":"panel_2"}]'
|
||||
timeRestore: false
|
||||
title: Openstack build status
|
||||
version: 1
|
||||
id: c00d5ae0-ab8a-11ec-a871-17bd3b1fcb34
|
||||
migrationVersion:
|
||||
dashboard: 7.9.3
|
||||
references:
|
||||
- id: 0622de00-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_0
|
||||
type: visualization
|
||||
- id: 0faeb700-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_1
|
||||
type: visualization
|
||||
- id: 3aef4150-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_2
|
||||
type: visualization
|
||||
- id: 60963b70-4326-11ed-8b28-cdde0c7cf02f
|
||||
name: panel_3
|
||||
type: visualization
|
||||
- id: f265f480-ab89-11ec-91e6-db9fe3b6eb30
|
||||
name: panel_0
|
||||
type: visualization
|
||||
- id: 82acec10-ab8a-11ec-8d45-61a12b5378d4
|
||||
name: panel_1
|
||||
type: visualization
|
||||
- id: c913a8d0-ab8d-11ec-bc63-0df653d5ab54
|
||||
name: panel_2
|
||||
type: visualization
|
||||
type: dashboard
|
||||
updated_at: '2022-03-24T16:17:42.713Z'
|
||||
version: WzU4NCwxXQ==
|
35
opensearch-dashboards-objects/index-pattern-global.yaml
Normal file
35
opensearch-dashboards-objects/index-pattern-global.yaml
Normal file
File diff suppressed because one or more lines are too long
383
opensearch-dashboards-objects/visualization-global.yaml
Normal file
383
opensearch-dashboards-objects/visualization-global.yaml
Normal file
@ -0,0 +1,383 @@
|
||||
- attributes:
|
||||
description: ''
|
||||
kibanaSavedObjectMeta:
|
||||
searchSourceJSON: '{"query":{"query":"","language":"kuery"},"filter":[],"indexRefName":"kibanaSavedObjectMeta.searchSourceJSON.index"}'
|
||||
title: Subunit - Test Results - Success
|
||||
uiStateJSON: '{"vis":{"params":{"sort":{"columnIndex":null,"direction":null}}}}'
|
||||
version: 1
|
||||
visState: '{"title":"Subunit - Test Results - Success","type":"table","aggs":[{"id":"1","enabled":true,"type":"count","params":{},"schema":"metric"},{"id":"2","enabled":true,"type":"terms","params":{"field":"test_name.keyword","orderBy":"1","order":"desc","size":1000,"otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing"},"schema":"bucket"},{"id":"3","enabled":true,"type":"filters","params":{"filters":[{"input":{"query":"test_status.keyword
|
||||
: \"success\"","language":"kuery"},"label":""}]},"schema":"split"}],"params":{"perPage":10,"showPartialRows":false,"showMetricsAtAllLevels":false,"sort":{"columnIndex":null,"direction":null},"showTotal":false,"totalFunc":"sum","percentageCol":"","row":true}}'
|
||||
id: 0622de00-4326-11ed-8b28-cdde0c7cf02f
|
||||
migrationVersion:
|
||||
visualization: 7.10.0
|
||||
references:
|
||||
- id: cd744dd0-3d9b-11ed-b73f-c5b7928a4140
|
||||
name: kibanaSavedObjectMeta.searchSourceJSON.index
|
||||
type: index-pattern
|
||||
- id: 94869730-aea8-11ec-9e6a-83741af3fdcd
|
||||
name: kibanaSavedObjectMeta.searchSourceJSON.index
|
||||
type: index-pattern
|
||||
type: visualization
|
||||
updated_at: '2022-10-03T15:09:04.276Z'
|
||||
version: WzQzOTYsMV0=
|
||||
- attributes:
|
||||
description: ''
|
||||
kibanaSavedObjectMeta:
|
||||
searchSourceJSON: "{\n \"query\": {\n \"query\": \"\",\n \"language\"\
|
||||
: \"kuery\"\n },\n \"filter\": [],\n \"indexRefName\": \"kibanaSavedObjectMeta.searchSourceJSON.index\"\
|
||||
\n}"
|
||||
title: Build status
|
||||
uiStateJSON: '{}'
|
||||
version: 1
|
||||
visState: "{\n \"title\": \"Build status\",\n \"type\": \"pie\",\n \"aggs\"\
|
||||
: [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\":\
|
||||
\ \"cardinality\",\n \"params\": {\n \"field\": \"build_uuid.keyword\"\
|
||||
\n },\n \"schema\": \"metric\"\n },\n {\n \"id\": \"2\"\
|
||||
,\n \"enabled\": true,\n \"type\": \"terms\",\n \"params\": {\n\
|
||||
\ \"field\": \"build_status.keyword\",\n \"orderBy\": \"1\",\n\
|
||||
\ \"order\": \"desc\",\n \"size\": 5,\n \"otherBucket\"\
|
||||
: false,\n \"otherBucketLabel\": \"Other\",\n \"missingBucket\"\
|
||||
: false,\n \"missingBucketLabel\": \"Missing\",\n \"customLabel\"\
|
||||
: \"Build status\"\n },\n \"schema\": \"segment\"\n }\n ],\n \
|
||||
\ \"params\": {\n \"type\": \"pie\",\n \"addTooltip\": true,\n \"addLegend\"\
|
||||
: true,\n \"legendPosition\": \"right\",\n \"isDonut\": true,\n \"\
|
||||
labels\": {\n \"show\": false,\n \"values\": true,\n \"last_level\"\
|
||||
: true,\n \"truncate\": 100\n }\n }\n}"
|
||||
id: 0a602da0-ab88-11ec-a51d-47e50a820c7c
|
||||
migrationVersion:
|
||||
visualization: 7.10.0
|
||||
references:
|
||||
- id: cd744dd0-3d9b-11ed-b73f-c5b7928a4140
|
||||
name: kibanaSavedObjectMeta.searchSourceJSON.index
|
||||
type: index-pattern
|
||||
- id: 94869730-aea8-11ec-9e6a-83741af3fdcd
|
||||
name: kibanaSavedObjectMeta.searchSourceJSON.index
|
||||
type: index-pattern
|
||||
type: visualization
|
||||
updated_at: '2022-03-28T15:09:59.819Z'
|
||||
version: WzkzNSwxXQ==
|
||||
- attributes:
|
||||
description: ''
|
||||
kibanaSavedObjectMeta:
|
||||
searchSourceJSON: "{\n \"query\": {\n \"query\": \"\",\n \"language\"\
|
||||
: \"kuery\"\n },\n \"filter\": [],\n \"indexRefName\": \"kibanaSavedObjectMeta.searchSourceJSON.index\"\
|
||||
\n}"
|
||||
title: Subunit - Test Results - Skip
|
||||
uiStateJSON: "{\n \"vis\": {\n \"params\": {\n \"sort\": {\n \"\
|
||||
columnIndex\": null,\n \"direction\": null\n }\n }\n }\n}"
|
||||
version: 1
|
||||
visState: "{\n \"title\": \"Subunit - Test Results - Success (copy)\",\n \"\
|
||||
type\": \"table\",\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\"\
|
||||
: true,\n \"type\": \"count\",\n \"params\": {},\n \"schema\"\
|
||||
: \"metric\"\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n\
|
||||
\ \"type\": \"terms\",\n \"params\": {\n \"field\": \"test_name.keyword\"\
|
||||
,\n \"orderBy\": \"1\",\n \"order\": \"desc\",\n \"size\"\
|
||||
: 1000,\n \"otherBucket\": false,\n \"otherBucketLabel\": \"Other\"\
|
||||
,\n \"missingBucket\": false,\n \"missingBucketLabel\": \"Missing\"\
|
||||
\n },\n \"schema\": \"bucket\"\n },\n {\n \"id\": \"3\"\
|
||||
,\n \"enabled\": true,\n \"type\": \"filters\",\n \"params\"\
|
||||
: {\n \"filters\": [\n {\n \"input\": {\n \
|
||||
\ \"query\": \"test_status.keyword : \\\"skip\\\"\",\n \"\
|
||||
language\": \"kuery\"\n },\n \"label\": \"\"\n \
|
||||
\ }\n ]\n },\n \"schema\": \"split\"\n }\n ],\n \"params\"\
|
||||
: {\n \"perPage\": 10,\n \"showPartialRows\": false,\n \"showMetricsAtAllLevels\"\
|
||||
: false,\n \"sort\": {\n \"columnIndex\": null,\n \"direction\"\
|
||||
: null\n },\n \"showTotal\": false,\n \"totalFunc\": \"sum\",\n \
|
||||
\ \"percentageCol\": \"\",\n \"row\": true\n }\n}"
|
||||
id: 0faeb700-4326-11ed-8b28-cdde0c7cf02f
|
||||
migrationVersion:
|
||||
visualization: 7.10.0
|
||||
references:
|
||||
- id: cd744dd0-3d9b-11ed-b73f-c5b7928a4140
|
||||
name: kibanaSavedObjectMeta.searchSourceJSON.index
|
||||
type: index-pattern
|
||||
- id: 94869730-aea8-11ec-9e6a-83741af3fdcd
|
||||
name: kibanaSavedObjectMeta.searchSourceJSON.index
|
||||
type: index-pattern
|
||||
type: visualization
|
||||
updated_at: '2022-10-03T15:09:04.276Z'
|
||||
version: WzQzOTcsMV0=
|
||||
- attributes:
|
||||
description: ''
|
||||
kibanaSavedObjectMeta:
|
||||
searchSourceJSON: "{\n \"query\": {\n \"query\": \"\",\n \"language\"\
|
||||
: \"kuery\"\n },\n \"filter\": [],\n \"indexRefName\": \"kibanaSavedObjectMeta.searchSourceJSON.index\"\
|
||||
\n}"
|
||||
title: Subunit - Test Results - Fail
|
||||
uiStateJSON: "{\n \"vis\": {\n \"params\": {\n \"sort\": {\n \"\
|
||||
columnIndex\": null,\n \"direction\": null\n }\n }\n }\n}"
|
||||
version: 1
|
||||
visState: "{\n \"title\": \"Subunit - Test Results - Success (copy)\",\n \"\
|
||||
type\": \"table\",\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\"\
|
||||
: true,\n \"type\": \"count\",\n \"params\": {},\n \"schema\"\
|
||||
: \"metric\"\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n\
|
||||
\ \"type\": \"terms\",\n \"params\": {\n \"field\": \"test_name.keyword\"\
|
||||
,\n \"orderBy\": \"1\",\n \"order\": \"desc\",\n \"size\"\
|
||||
: 1000,\n \"otherBucket\": false,\n \"otherBucketLabel\": \"Other\"\
|
||||
,\n \"missingBucket\": false,\n \"missingBucketLabel\": \"Missing\"\
|
||||
\n },\n \"schema\": \"bucket\"\n },\n {\n \"id\": \"3\"\
|
||||
,\n \"enabled\": true,\n \"type\": \"filters\",\n \"params\"\
|
||||
: {\n \"filters\": [\n {\n \"input\": {\n \
|
||||
\ \"query\": \"test_status.keyword : \\\"fail\\\"\",\n \"\
|
||||
language\": \"kuery\"\n },\n \"label\": \"\"\n \
|
||||
\ }\n ]\n },\n \"schema\": \"split\"\n }\n ],\n \"params\"\
|
||||
: {\n \"perPage\": 10,\n \"showPartialRows\": false,\n \"showMetricsAtAllLevels\"\
|
||||
: false,\n \"sort\": {\n \"columnIndex\": null,\n \"direction\"\
|
||||
: null\n },\n \"showTotal\": false,\n \"totalFunc\": \"sum\",\n \
|
||||
\ \"percentageCol\": \"\",\n \"row\": true\n }\n}"
|
||||
id: 3aef4150-4326-11ed-8b28-cdde0c7cf02f
|
||||
migrationVersion:
|
||||
visualization: 7.10.0
|
||||
references:
|
||||
- id: cd744dd0-3d9b-11ed-b73f-c5b7928a4140
|
||||
name: kibanaSavedObjectMeta.searchSourceJSON.index
|
||||
type: index-pattern
|
||||
- id: 94869730-aea8-11ec-9e6a-83741af3fdcd
|
||||
name: kibanaSavedObjectMeta.searchSourceJSON.index
|
||||
type: index-pattern
|
||||
type: visualization
|
||||
updated_at: '2022-10-03T15:09:04.276Z'
|
||||
version: WzQzOTgsMV0=
|
||||
- attributes:
|
||||
description: ''
|
||||
kibanaSavedObjectMeta:
|
||||
searchSourceJSON: '{"query":{"query":"","language":"kuery"},"filter":[],"indexRefName":"kibanaSavedObjectMeta.searchSourceJSON.index"}'
|
||||
title: Subunit - Test Results - Build Name
|
||||
uiStateJSON: '{"vis":{"params":{"sort":{"columnIndex":null,"direction":null}}}}'
|
||||
version: 1
|
||||
visState: '{"title":"Subunit - Test Results - Build Name","type":"table","aggs":[{"id":"1","enabled":true,"type":"count","params":{},"schema":"metric"},{"id":"2","enabled":true,"type":"terms","params":{"field":"test_name.keyword","orderBy":"1","order":"desc","size":100,"otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing"},"schema":"bucket"},{"id":"3","enabled":true,"type":"terms","params":{"field":"build_name.keyword","orderBy":"1","order":"desc","size":100,"otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing"},"schema":"bucket"}],"params":{"perPage":10,"showPartialRows":false,"showMetricsAtAllLevels":false,"sort":{"columnIndex":null,"direction":null},"showTotal":false,"totalFunc":"sum","percentageCol":"","row":false}}'
|
||||
id: 60963b70-4326-11ed-8b28-cdde0c7cf02f
|
||||
migrationVersion:
|
||||
visualization: 7.10.0
|
||||
references:
|
||||
- id: cd744dd0-3d9b-11ed-b73f-c5b7928a4140
|
||||
name: kibanaSavedObjectMeta.searchSourceJSON.index
|
||||
type: index-pattern
|
||||
- id: 94869730-aea8-11ec-9e6a-83741af3fdcd
|
||||
name: kibanaSavedObjectMeta.searchSourceJSON.index
|
||||
type: index-pattern
|
||||
type: visualization
|
||||
updated_at: '2022-10-10T15:06:48.497Z'
|
||||
version: WzQ3NjMsMV0=
|
||||
- attributes:
|
||||
description: ''
|
||||
kibanaSavedObjectMeta:
|
||||
searchSourceJSON: '{"query":{"query":"","language":"kuery"},"filter":[],"indexRefName":"kibanaSavedObjectMeta.searchSourceJSON.index"}'
|
||||
title: Build status in time
|
||||
uiStateJSON: '{}'
|
||||
version: 1
|
||||
visState: '{"title":"Build status in time","type":"histogram","aggs":[{"id":"1","enabled":true,"type":"cardinality","params":{"field":"build_uuid.keyword","customLabel":"Counted
|
||||
builds"},"schema":"metric"},{"id":"3","enabled":true,"type":"date_histogram","params":{"field":"@timestamp","timeRange":{"from":"now-30m","to":"now"},"useNormalizedOpenSearchInterval":true,"scaleMetricValues":false,"interval":"auto","drop_partials":false,"min_doc_count":1,"extended_bounds":{},"customLabel":"Time"},"schema":"segment"},{"id":"4","enabled":true,"type":"terms","params":{"field":"build_status.keyword","orderBy":"1","order":"asc","size":5,"otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing"},"schema":"group"}],"params":{"type":"histogram","grid":{"categoryLines":false},"categoryAxes":[{"id":"CategoryAxis-1","type":"category","position":"bottom","show":true,"style":{},"scale":{"type":"linear"},"labels":{"show":true,"filter":true,"truncate":100},"title":{}}],"valueAxes":[{"id":"ValueAxis-1","name":"LeftAxis-1","type":"value","position":"left","show":true,"style":{},"scale":{"type":"linear","mode":"normal"},"labels":{"show":true,"rotate":0,"filter":false,"truncate":100},"title":{"text":"Counted
|
||||
builds"}}],"seriesParams":[{"show":true,"type":"histogram","mode":"stacked","data":{"label":"Counted
|
||||
builds","id":"1"},"valueAxis":"ValueAxis-1","drawLinesBetweenPoints":true,"lineWidth":2,"showCircles":true}],"addTooltip":true,"addLegend":true,"legendPosition":"right","times":[],"addTimeMarker":false,"labels":{"show":false},"thresholdLine":{"show":false,"value":10,"width":1,"style":"full","color":"#E7664C"},"row":true}}'
|
||||
id: 82acec10-ab8a-11ec-8d45-61a12b5378d4
|
||||
migrationVersion:
|
||||
visualization: 7.10.0
|
||||
references:
|
||||
- id: cd744dd0-3d9b-11ed-b73f-c5b7928a4140
|
||||
name: kibanaSavedObjectMeta.searchSourceJSON.index
|
||||
type: index-pattern
|
||||
- id: 94869730-aea8-11ec-9e6a-83741af3fdcd
|
||||
name: kibanaSavedObjectMeta.searchSourceJSON.index
|
||||
type: index-pattern
|
||||
type: visualization
|
||||
updated_at: '2022-09-22T15:25:41.420Z'
|
||||
version: WzM1ODIsMV0=
|
||||
- attributes:
|
||||
description: ''
|
||||
kibanaSavedObjectMeta:
|
||||
searchSourceJSON: "{\n \"query\": {\n \"query\": \"\",\n \"language\"\
|
||||
: \"kuery\"\n },\n \"filter\": [],\n \"indexRefName\": \"kibanaSavedObjectMeta.searchSourceJSON.index\"\
|
||||
\n}"
|
||||
title: Host ID and build status
|
||||
uiStateJSON: '{}'
|
||||
version: 1
|
||||
visState: "{\n \"title\": \"Host ID and build status\",\n \"type\": \"histogram\"\
|
||||
,\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \
|
||||
\ \"type\": \"cardinality\",\n \"params\": {\n \"field\": \"\
|
||||
build_uuid.keyword\"\n },\n \"schema\": \"metric\"\n },\n {\n\
|
||||
\ \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n\
|
||||
\ \"params\": {\n \"field\": \"build_status.keyword\",\n \
|
||||
\ \"orderBy\": \"1\",\n \"order\": \"desc\",\n \"size\": 5,\n\
|
||||
\ \"otherBucket\": false,\n \"otherBucketLabel\": \"Other\",\n\
|
||||
\ \"missingBucket\": false,\n \"missingBucketLabel\": \"Missing\"\
|
||||
\n },\n \"schema\": \"segment\"\n },\n {\n \"id\": \"3\"\
|
||||
,\n \"enabled\": true,\n \"type\": \"terms\",\n \"params\": {\n\
|
||||
\ \"field\": \"hosts_id.keyword\",\n \"orderBy\": \"1\",\n \
|
||||
\ \"order\": \"desc\",\n \"size\": 5,\n \"otherBucket\": false,\n\
|
||||
\ \"otherBucketLabel\": \"Other\",\n \"missingBucket\": false,\n\
|
||||
\ \"missingBucketLabel\": \"Missing\"\n },\n \"schema\": \"\
|
||||
group\"\n }\n ],\n \"params\": {\n \"type\": \"histogram\",\n \"\
|
||||
grid\": {\n \"categoryLines\": false\n },\n \"categoryAxes\": [\n\
|
||||
\ {\n \"id\": \"CategoryAxis-1\",\n \"type\": \"category\"\
|
||||
,\n \"position\": \"bottom\",\n \"show\": true,\n \"style\"\
|
||||
: {},\n \"scale\": {\n \"type\": \"linear\"\n },\n \
|
||||
\ \"labels\": {\n \"show\": true,\n \"filter\": true,\n\
|
||||
\ \"truncate\": 100\n },\n \"title\": {}\n }\n \
|
||||
\ ],\n \"valueAxes\": [\n {\n \"id\": \"ValueAxis-1\",\n \
|
||||
\ \"name\": \"LeftAxis-1\",\n \"type\": \"value\",\n \"position\"\
|
||||
: \"left\",\n \"show\": true,\n \"style\": {},\n \"scale\"\
|
||||
: {\n \"type\": \"linear\",\n \"mode\": \"normal\"\n \
|
||||
\ },\n \"labels\": {\n \"show\": true,\n \"rotate\"\
|
||||
: 0,\n \"filter\": false,\n \"truncate\": 100\n },\n\
|
||||
\ \"title\": {\n \"text\": \"Unique count of build_uuid.keyword\"\
|
||||
\n }\n }\n ],\n \"seriesParams\": [\n {\n \"show\"\
|
||||
: true,\n \"type\": \"histogram\",\n \"mode\": \"normal\",\n \
|
||||
\ \"data\": {\n \"label\": \"Unique count of build_uuid.keyword\"\
|
||||
,\n \"id\": \"1\"\n },\n \"valueAxis\": \"ValueAxis-1\"\
|
||||
,\n \"drawLinesBetweenPoints\": true,\n \"lineWidth\": 2,\n \
|
||||
\ \"showCircles\": true\n }\n ],\n \"addTooltip\": true,\n \
|
||||
\ \"addLegend\": true,\n \"legendPosition\": \"right\",\n \"times\"\
|
||||
: [],\n \"addTimeMarker\": false,\n \"labels\": {\n \"show\": false\n\
|
||||
\ },\n \"thresholdLine\": {\n \"show\": false,\n \"value\":\
|
||||
\ 10,\n \"width\": 1,\n \"style\": \"full\",\n \"color\": \"\
|
||||
#E7664C\"\n },\n \"row\": true\n }\n}"
|
||||
id: b774b750-ab91-11ec-89c0-4182c1328935
|
||||
migrationVersion:
|
||||
visualization: 7.10.0
|
||||
references:
|
||||
- id: cd744dd0-3d9b-11ed-b73f-c5b7928a4140
|
||||
name: kibanaSavedObjectMeta.searchSourceJSON.index
|
||||
type: index-pattern
|
||||
- id: 94869730-aea8-11ec-9e6a-83741af3fdcd
|
||||
name: kibanaSavedObjectMeta.searchSourceJSON.index
|
||||
type: index-pattern
|
||||
type: visualization
|
||||
updated_at: '2022-03-28T15:10:31.671Z'
|
||||
version: Wzk0MiwxXQ==
|
||||
- attributes:
|
||||
description: ''
|
||||
kibanaSavedObjectMeta:
|
||||
searchSourceJSON: "{\n \"query\": {\n \"query\": \"\",\n \"language\"\
|
||||
: \"kuery\"\n },\n \"filter\": [],\n \"indexRefName\": \"kibanaSavedObjectMeta.searchSourceJSON.index\"\
|
||||
\n}"
|
||||
title: Common errors per build status
|
||||
uiStateJSON: '{}'
|
||||
version: 1
|
||||
visState: "{\n \"title\": \"Common errors per build status\",\n \"type\": \"\
|
||||
histogram\",\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\"\
|
||||
: true,\n \"type\": \"cardinality\",\n \"params\": {\n \"field\"\
|
||||
: \"build_uuid.keyword\",\n \"customLabel\": \"Counted builds\"\n \
|
||||
\ },\n \"schema\": \"metric\"\n },\n {\n \"id\": \"2\",\n\
|
||||
\ \"enabled\": true,\n \"type\": \"date_histogram\",\n \"params\"\
|
||||
: {\n \"field\": \"@timestamp\",\n \"timeRange\": {\n \
|
||||
\ \"from\": \"now-12h\",\n \"to\": \"now\"\n },\n \"\
|
||||
useNormalizedOpenSearchInterval\": true,\n \"scaleMetricValues\": false,\n\
|
||||
\ \"interval\": \"auto\",\n \"drop_partials\": true,\n \
|
||||
\ \"min_doc_count\": 1,\n \"extended_bounds\": {}\n },\n \"\
|
||||
schema\": \"segment\"\n },\n {\n \"id\": \"3\",\n \"enabled\"\
|
||||
: true,\n \"type\": \"filters\",\n \"params\": {\n \"filters\"\
|
||||
: [\n {\n \"input\": {\n \"query\": \"message:\\\
|
||||
\"could not install deps\\\"\",\n \"language\": \"kuery\"\n \
|
||||
\ },\n \"label\": \"\"\n },\n {\n \
|
||||
\ \"input\": {\n \"query\": \"message: \\\"error\\\"\",\n\
|
||||
\ \"language\": \"kuery\"\n },\n \"label\"\
|
||||
: \"\"\n },\n {\n \"input\": {\n \"\
|
||||
query\": \"message:\\\"... FAILED\\\" AND NOT message:\\\"ignoring\\\"\",\n\
|
||||
\ \"language\": \"kuery\"\n },\n \"label\"\
|
||||
: \"\"\n },\n {\n \"input\": {\n \"\
|
||||
query\": \"message:\\\"MessagingTimeout\\\"\",\n \"language\":\
|
||||
\ \"kuery\"\n },\n \"label\": \"\"\n },\n \
|
||||
\ {\n \"input\": {\n \"query\": \"message:\\\"\
|
||||
Timed out waiting\\\"\",\n \"language\": \"kuery\"\n \
|
||||
\ },\n \"label\": \"\"\n },\n {\n \"\
|
||||
input\": {\n \"query\": \"message:\\\"Ansible failed\\\"\",\n \
|
||||
\ \"language\": \"kuery\"\n },\n \"label\"\
|
||||
: \"\"\n },\n {\n \"input\": {\n \"\
|
||||
query\": \"message:\\\"Failed to download packages: Cannot download\\\" OR message:\\\
|
||||
\"Cannot download repodata/repomd.xml: All mirrors were tried\\\"\",\n \
|
||||
\ \"language\": \"kuery\"\n },\n \"label\": \"\
|
||||
\"\n },\n {\n \"input\": {\n \"query\"\
|
||||
: \"message:\\\"conflicts with file from package\\\"\",\n \"language\"\
|
||||
: \"kuery\"\n },\n \"label\": \"\"\n },\n \
|
||||
\ {\n \"input\": {\n \"query\": \"message:\\\"\
|
||||
UNAUTHORIZED\\\" OR message: \\\"authentication required\\\"\",\n \
|
||||
\ \"language\": \"kuery\"\n },\n \"label\": \"\"\n\
|
||||
\ }\n ]\n },\n \"schema\": \"group\"\n },\n \
|
||||
\ {\n \"id\": \"4\",\n \"enabled\": true,\n \"type\": \"terms\"\
|
||||
,\n \"params\": {\n \"field\": \"build_status.keyword\",\n \
|
||||
\ \"orderBy\": \"1\",\n \"order\": \"desc\",\n \"size\": 5,\n\
|
||||
\ \"otherBucket\": false,\n \"otherBucketLabel\": \"Other\",\n\
|
||||
\ \"missingBucket\": false,\n \"missingBucketLabel\": \"Missing\"\
|
||||
\n },\n \"schema\": \"split\"\n }\n ],\n \"params\": {\n \"\
|
||||
type\": \"histogram\",\n \"grid\": {\n \"categoryLines\": false\n \
|
||||
\ },\n \"categoryAxes\": [\n {\n \"id\": \"CategoryAxis-1\"\
|
||||
,\n \"type\": \"category\",\n \"position\": \"bottom\",\n \
|
||||
\ \"show\": true,\n \"style\": {},\n \"scale\": {\n \
|
||||
\ \"type\": \"linear\"\n },\n \"labels\": {\n \"show\"\
|
||||
: true,\n \"filter\": true,\n \"truncate\": 100\n },\n\
|
||||
\ \"title\": {}\n }\n ],\n \"valueAxes\": [\n {\n \
|
||||
\ \"id\": \"ValueAxis-1\",\n \"name\": \"LeftAxis-1\",\n \"\
|
||||
type\": \"value\",\n \"position\": \"left\",\n \"show\": true,\n\
|
||||
\ \"style\": {},\n \"scale\": {\n \"type\": \"linear\"\
|
||||
,\n \"mode\": \"normal\"\n },\n \"labels\": {\n \
|
||||
\ \"show\": true,\n \"rotate\": 0,\n \"filter\": false,\n\
|
||||
\ \"truncate\": 100\n },\n \"title\": {\n \"\
|
||||
text\": \"Counted builds\"\n }\n }\n ],\n \"seriesParams\"\
|
||||
: [\n {\n \"show\": true,\n \"type\": \"histogram\",\n \
|
||||
\ \"mode\": \"stacked\",\n \"data\": {\n \"label\": \"\
|
||||
Counted builds\",\n \"id\": \"1\"\n },\n \"valueAxis\"\
|
||||
: \"ValueAxis-1\",\n \"drawLinesBetweenPoints\": true,\n \"lineWidth\"\
|
||||
: 2,\n \"showCircles\": true\n }\n ],\n \"addTooltip\": true,\n\
|
||||
\ \"addLegend\": true,\n \"legendPosition\": \"right\",\n \"times\"\
|
||||
: [],\n \"addTimeMarker\": false,\n \"labels\": {\n \"show\": false\n\
|
||||
\ },\n \"thresholdLine\": {\n \"show\": false,\n \"value\":\
|
||||
\ 10,\n \"width\": 1,\n \"style\": \"full\",\n \"color\": \"\
|
||||
#E7664C\"\n },\n \"row\": true\n }\n}"
|
||||
id: c913a8d0-ab8d-11ec-bc63-0df653d5ab54
|
||||
migrationVersion:
|
||||
visualization: 7.10.0
|
||||
references:
|
||||
- id: cd744dd0-3d9b-11ed-b73f-c5b7928a4140
|
||||
name: kibanaSavedObjectMeta.searchSourceJSON.index
|
||||
type: index-pattern
|
||||
- id: 94869730-aea8-11ec-9e6a-83741af3fdcd
|
||||
name: kibanaSavedObjectMeta.searchSourceJSON.index
|
||||
type: index-pattern
|
||||
type: visualization
|
||||
updated_at: '2022-03-28T15:10:15.208Z'
|
||||
version: WzkzNywxXQ==
|
||||
- attributes:
|
||||
description: ''
|
||||
kibanaSavedObjectMeta:
|
||||
searchSourceJSON: "{\n \"query\": {\n \"query\": \"\",\n \"language\"\
|
||||
: \"kuery\"\n },\n \"filter\": [],\n \"indexRefName\": \"kibanaSavedObjectMeta.searchSourceJSON.index\"\
|
||||
\n}"
|
||||
title: Build name status
|
||||
uiStateJSON: "{\n \"vis\": {\n \"params\": {\n \"sort\": {\n \"\
|
||||
columnIndex\": null,\n \"direction\": null\n }\n }\n }\n}"
|
||||
version: 1
|
||||
visState: "{\n \"title\": \"Build name status\",\n \"type\": \"table\",\n \"\
|
||||
aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\"\
|
||||
: \"cardinality\",\n \"params\": {\n \"field\": \"build_uuid.keyword\"\
|
||||
\n },\n \"schema\": \"metric\"\n },\n {\n \"id\": \"2\"\
|
||||
,\n \"enabled\": true,\n \"type\": \"terms\",\n \"params\": {\n\
|
||||
\ \"field\": \"build_name.keyword\",\n \"orderBy\": \"1\",\n \
|
||||
\ \"order\": \"desc\",\n \"size\": 10,\n \"otherBucket\"\
|
||||
: false,\n \"otherBucketLabel\": \"Other\",\n \"missingBucket\"\
|
||||
: false,\n \"missingBucketLabel\": \"Missing\",\n \"customLabel\"\
|
||||
: \"Build name\"\n },\n \"schema\": \"bucket\"\n },\n {\n \
|
||||
\ \"id\": \"3\",\n \"enabled\": true,\n \"type\": \"terms\",\n\
|
||||
\ \"params\": {\n \"field\": \"build_status.keyword\",\n \
|
||||
\ \"orderBy\": \"1\",\n \"order\": \"desc\",\n \"size\": 5,\n\
|
||||
\ \"otherBucket\": false,\n \"otherBucketLabel\": \"Other\",\n\
|
||||
\ \"missingBucket\": false,\n \"missingBucketLabel\": \"Missing\"\
|
||||
,\n \"customLabel\": \"Build status\"\n },\n \"schema\": \"\
|
||||
split\"\n }\n ],\n \"params\": {\n \"perPage\": 10,\n \"showPartialRows\"\
|
||||
: false,\n \"showMetricsAtAllLevels\": false,\n \"sort\": {\n \"\
|
||||
columnIndex\": null,\n \"direction\": null\n },\n \"showTotal\":\
|
||||
\ false,\n \"totalFunc\": \"sum\",\n \"percentageCol\": \"\",\n \"\
|
||||
row\": false\n }\n}"
|
||||
id: f265f480-ab89-11ec-91e6-db9fe3b6eb30
|
||||
migrationVersion:
|
||||
visualization: 7.10.0
|
||||
references:
|
||||
- id: cd744dd0-3d9b-11ed-b73f-c5b7928a4140
|
||||
name: kibanaSavedObjectMeta.searchSourceJSON.index
|
||||
type: index-pattern
|
||||
- id: 94869730-aea8-11ec-9e6a-83741af3fdcd
|
||||
name: kibanaSavedObjectMeta.searchSourceJSON.index
|
||||
type: index-pattern
|
||||
type: visualization
|
||||
updated_at: '2022-03-28T15:09:46.652Z'
|
||||
version: WzkzNCwxXQ==
|
Loading…
x
Reference in New Issue
Block a user