From f906e28f261eb597bb5404c6f04a8ae9c6965b94 Mon Sep 17 00:00:00 2001 From: Catalina A <94133018+catalinaadam@users.noreply.github.com> Date: Fri, 23 Aug 2024 16:08:53 +0300 Subject: [PATCH 01/35] Improved security section (#3173) --- docs/release-notes/2.43.0.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/release-notes/2.43.0.md b/docs/release-notes/2.43.0.md index a140854d62..ae7f70d2ab 100644 --- a/docs/release-notes/2.43.0.md +++ b/docs/release-notes/2.43.0.md @@ -86,6 +86,12 @@ New PMM client docker images now include essential troubleshooting tools: - `tar` enables easier file transfer in and out of containers using the `kubectl cp` command. - `curl` allows direct checking of exporters to verify their proper functioning. +### Improved security + +This update addresses several security issues related to the GNU C Library (Glibc), specifically affecting the Name Service Cache Daemon (nscd). Additionally, it resolves multiple security vulnerabilities by upgrading various third-party packages. + +These enhancements strengthen the overall security of the PMM Server environment, although they do not directly impact PMM's core functionality. + ### Official ARM support for PMM Client With the growing adoption of ARM in data centers and cloud environments, we are excited to announce official support for ARM architecture in PMM Clients. This enables you to seamlessly monitor ARM-based infrastructure, including popular cloud instances and emerging ARM-powered servers. @@ -122,6 +128,7 @@ However, with this change, QAN will no longer be able to list PostgreSQL databas If you're looking to upgrade, you can easily [install the latest version of Percona Distribution for PostgreSQL](https://docs.percona.com/postgresql/16/installing.html). + ## Improvements - [PMM-13257](https://perconadev.atlassian.net/browse/PMM-13257): [Dashboards] - PMM 2.43 delivers refined MongoDB dashboards with standardized layouts, improved visual consistency, and enhanced usability across Replica Set, Cluster, Collections, and Oplog views, ensuring a more intuitive and efficient monitoring experience. @@ -157,6 +164,9 @@ If you're looking to upgrade, you can easily [install the latest version of Perc ### Fixed issues + +- [PMM-13246](https://perconadev.atlassian.net/browse/PMM-13246) - Addressed four security vulnerabilities (CVEs) related to the GNU C Library (Glibc), specifically affecting the Name Service Cache Daemon (nscd):[CVE-2024-33599](https://nvd.nist.gov/vuln/detail/CVE-2024-33599), [CVE-2024-33600](https://nvd.nist.gov/vuln/detail/CVE-2024-33600), [CVE-2024-33601](https://nvd.nist.gov/vuln/detail/CVE-2024-33601), [CVE-2024-33602](https://nvd.nist.gov/vuln/detail/CVE-2024-33602). + - [PMM-13277](https://perconadev.atlassian.net/browse/PMM-13277) - PMM 2.43 is now available on the AWS Marketplace, resolving the previous temporary unavailability issue of PMM 2.42.0. Users can directly install or upgrade to PMM 2.43.0 through AWS Marketplace or the PMM UI for access to the latest features and improvements. - [PMM-13246](https://perconadev.atlassian.net/browse/PMM-13246) - Addressed four security vulnerabilities (CVEs) related to the GNU C Library (Glibc), specifically affecting the Name Service Cache Daemon (nscd): @@ -167,7 +177,7 @@ If you're looking to upgrade, you can easily [install the latest version of Perc - [CVE-2024-33602](https://nvd.nist.gov/vuln/detail/CVE-2024-33602) - While these vulnerabilities did not directly impact PMM's core functionality, fixing them enhanced the overall security of the PMM Server environment. + - [PMM-13002](https://perconadev.atlassian.net/browse/PMM-13246): [Dashboards] - Fixed a bug in the **MongoDB ReplSet Summary** dashboard where the **Node Summary** section only displayed information for one node. It now correctly shows data for all nodes in a replica set when **All** is selected, providing a comprehensive view of multi-node deployments. From 1c36efe6f8f85d612ccfb5a73c1c913bd50a24d0 Mon Sep 17 00:00:00 2001 From: Talha Bin Rizwan Date: Mon, 26 Aug 2024 12:31:28 +0500 Subject: [PATCH 02/35] PMM-13244 Drop amazon linux 2. (#3169) * PMM-13244 Drop amazon linux 2. * PMM-13244 Drop amazon linux 2. * PMM-13244 Drop amazon linux 2. * PMM-13244 Drop amazon linux 2. * PMM-13244 Drop amazon linux 2. * PMM-13244 Drop amazon linux 2. * PMM-13244 Drop amazon linux 2. * Update .gitignore Co-authored-by: Alex Demidoff * Update build/ansible/pmm2/post-build-actions.yml Co-authored-by: Alex Demidoff * Update build/ansible/roles/pmm2-images/tasks/main.yml Co-authored-by: Alex Demidoff * Update build/docker/server/Dockerfile.el9 Co-authored-by: Alex Demidoff * PMM-13244 Update build/ansible/roles/supervisord-init/tasks/main.yml * PMM-13244 Use Ansible var instead of Docker env var. * Update build/packer/aws.pkr.hcl Co-authored-by: Alex Demidoff * Update build/packer/aws.pkr.hcl Co-authored-by: Alex Demidoff --------- Co-authored-by: Alex Demidoff --- .gitignore | 2 + build/ansible/pmm2/post-build-actions.yml | 24 ++++---- .../ansible/roles/pmm2-images/tasks/main.yml | 12 ++-- build/ansible/roles/pmm2-images/vars/main.yml | 2 + .../roles/supervisord-init/tasks/main.yml | 6 +- build/docker/server/Dockerfile.el9 | 6 +- build/packer/ansible/agent-aws.yml | 57 ++++++++++++------- build/packer/aws.pkr.hcl | 8 +-- 8 files changed, 69 insertions(+), 48 deletions(-) diff --git a/.gitignore b/.gitignore index 449b577734..f17fdd9d00 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,5 @@ cli-tests/playwright-report/ api-tests/pmm-api-tests-output.txt api-tests/pmm-api-tests-junit-report.xml + +packer.log diff --git a/build/ansible/pmm2/post-build-actions.yml b/build/ansible/pmm2/post-build-actions.yml index c9b61c24dc..18d160884a 100644 --- a/build/ansible/pmm2/post-build-actions.yml +++ b/build/ansible/pmm2/post-build-actions.yml @@ -7,11 +7,12 @@ vars: pmm_client_repos: "pmm2-client testing" pmm_client_repos_final: "pmm2-client release" + pmm_running_in_docker: false # Set a default value tasks: # pmm-managed checks that if /srv/pmm-distribution exist, it contains "docker", "ovf", or "ami" (all lowercase) - name: Detect distribution | Create '/srv/pmm-distribution' file for Docker - when: ansible_virtualization_type == "docker" + when: pmm_running_in_docker copy: content: "docker" dest: /srv/pmm-distribution @@ -28,6 +29,7 @@ ( ansible_virtualization_type == "xen" or ansible_virtualization_type == "kvm" ) and ansible_system_vendor != "DigitalOcean" + and not pmm_running_in_docker copy: content: "ami" dest: /srv/pmm-distribution @@ -50,14 +52,14 @@ state: present update_cache: yes when: - - ansible_virtualization_type != "docker" + - not pmm_running_in_docker - ansible_distribution == 'OracleLinux' or ansible_distribution == 'AlmaLinux' - ansible_distribution_major_version == '9' - name: Set locale to en_US.utf8 | EL9 command: localectl set-locale LANG=en_US.utf8 when: - - ansible_virtualization_type != "docker" + - not pmm_running_in_docker - ansible_distribution == 'OracleLinux' or ansible_distribution == 'AlmaLinux' - ansible_distribution_major_version == '9' @@ -102,11 +104,11 @@ # ignore_errors: True - name: Supervisord stop | Stop supervisord service for AMI/OVF - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker service: name=supervisord state=stopped enabled=yes - name: Supervisord stop | Stop supervisord service for docker - when: ansible_virtualization_type == "docker" + when: pmm_running_in_docker shell: supervisorctl shutdown # PMM-11336 - The previous steps failed to start PostgreSQL using supervisord, @@ -118,14 +120,14 @@ become: yes become_user: postgres ignore_errors: yes - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker - name: Start PostgreSQL database without supervisord command: /usr/pgsql-14/bin/pg_ctl start -D /srv/postgres14 become: yes become_user: postgres ignore_errors: yes - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker - name: Remove pmm-managed database EL7 when: ansible_distribution == 'CentOS' and ansible_distribution_major_version == '7' @@ -160,18 +162,18 @@ become: yes become_user: postgres ignore_errors: yes - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker - name: Supervisord stop | Stop supervisord service for AMI/OVF - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker service: name=supervisord state=stopped enabled=yes - name: Supervisord stop EL7 | Stop supervisord service for docker - when: ansible_virtualization_type == "docker" and ansible_distribution == 'CentOS' and ansible_distribution_major_version == '7' + when: pmm_running_in_docker and ansible_distribution == 'CentOS' and ansible_distribution_major_version == '7' shell: supervisorctl shutdown - name: Supervisord stop EL9 | Stop supervisord service for docker - when: ansible_virtualization_type == "docker" and (ansible_distribution == 'OracleLinux' or ansible_distribution == 'AlmaLinux') and ansible_distribution_major_version == '9' + when: pmm_running_in_docker and (ansible_distribution == 'OracleLinux' or ansible_distribution == 'AlmaLinux') and ansible_distribution_major_version == '9' shell: /usr/local/bin/supervisorctl shutdown - name: Cleanup yum cache | Cleanup yum cache diff --git a/build/ansible/roles/pmm2-images/tasks/main.yml b/build/ansible/roles/pmm2-images/tasks/main.yml index 3ab716ba59..2a7c28ee66 100644 --- a/build/ansible/roles/pmm2-images/tasks/main.yml +++ b/build/ansible/roles/pmm2-images/tasks/main.yml @@ -29,7 +29,7 @@ # local yum repo for building of pmm server docker image in autobuild jobs - name: PMM | Add local YUM repository - when: ansible_virtualization_type == "docker" + when: pmm_running_in_docker yum_repository: name: local description: Local YUM repository - x86_64 @@ -89,7 +89,7 @@ - name: Create users for non-docker images | Create users user: name: "pmm" - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker - name: Create users and groups in docker container block: @@ -120,7 +120,7 @@ - { name: grafana, uid: 998, comment: "Grafana Dashboard", shell: "/sbin/nologin", home: "/etc/grafana", group: grafana, } - { name: clickhouse, uid: 997, comment: "Clickhouse server", shell: "/sbin/nologin", home: "/var/lib/clickhouse", group: clickhouse, } - { name: pmm-agent, uid: 996, comment: "pmm-agent", shell: "/bin/false", home: "/usr/local/percona/", group: pmm-agent, } - when: ansible_virtualization_type == "docker" + when: pmm_running_in_docker - name: Create directories | Create dirs file: path={{ item }} state=directory owner=pmm group=pmm @@ -138,7 +138,7 @@ mode: "0775" - name: Create dirs | Create dirs - when: ansible_virtualization_type == "docker" + when: pmm_running_in_docker file: path={{ item }} state=directory with_items: - /var/lib/cloud/scripts/per-once @@ -178,11 +178,11 @@ enablerepo: "{{ pmm_client_repo_name }}" - name: Disable pmm-agent service | Disable pmm-agent - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker service: name=pmm-agent state=stopped enabled=no - name: Create tmp dirs | Create tmp dirs - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker command: /usr/bin/systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev - name: Copy grafana.ini file for the first run diff --git a/build/ansible/roles/pmm2-images/vars/main.yml b/build/ansible/roles/pmm2-images/vars/main.yml index 7410e4a875..4469094387 100644 --- a/build/ansible/roles/pmm2-images/vars/main.yml +++ b/build/ansible/roles/pmm2-images/vars/main.yml @@ -4,3 +4,5 @@ pmm_client_repos: "pmm2-client testing" # line below is sed'ed by build-server-docker script pmm_client_repo_name: "pmm2-client-testing-x86_64" + +pmm_running_in_docker: false # Set a default value diff --git a/build/ansible/roles/supervisord-init/tasks/main.yml b/build/ansible/roles/supervisord-init/tasks/main.yml index 72d87df658..2001ddd5f4 100644 --- a/build/ansible/roles/supervisord-init/tasks/main.yml +++ b/build/ansible/roles/supervisord-init/tasks/main.yml @@ -69,7 +69,7 @@ state: directory - name: Configure supervisor | Add /etc/tmpfiles.d/supervisor.conf config - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker copy: content: | D /var/run/supervisor 0775 root root - @@ -91,7 +91,7 @@ value: dummy - name: Configure supervisor | Increase number of open files for jobs - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker ini_file: dest: /etc/supervisord.conf section: supervisord @@ -99,7 +99,7 @@ value: "800000" - name: Configure supervisor | Add supervisord.service - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker copy: src: supervisord.service dest: /usr/lib/systemd/system/ diff --git a/build/docker/server/Dockerfile.el9 b/build/docker/server/Dockerfile.el9 index 4fb9001f98..b8b295b671 100644 --- a/build/docker/server/Dockerfile.el9 +++ b/build/docker/server/Dockerfile.el9 @@ -33,9 +33,9 @@ COPY gitCommit /tmp/gitCommit COPY ansible /opt/ansible # NOTE: this needs to be refactored, since some of the playbooks are duplicates RUN cp -r /opt/ansible/roles /opt/ansible/pmm2-docker/roles -RUN ansible-playbook -vvv -i 'localhost,' -c local /opt/ansible/pmm2-docker/main.yml \ - && ansible-playbook -vvv -i 'localhost,' -c local /usr/share/pmm-update/ansible/playbook/tasks/update.yml \ - && ansible-playbook -vvv -i 'localhost,' -c local /opt/ansible/pmm2/post-build-actions.yml +RUN ansible-playbook -vvv -i 'localhost,' -c local /opt/ansible/pmm2-docker/main.yml -e "pmm_running_in_docker=true" \ + && ansible-playbook -vvv -i 'localhost,' -c local /usr/share/pmm-update/ansible/playbook/tasks/update.yml -e "pmm_running_in_docker=true" \ + && ansible-playbook -vvv -i 'localhost,' -c local /opt/ansible/pmm2/post-build-actions.yml -e "pmm_running_in_docker=true" COPY entrypoint.sh /opt/entrypoint.sh HEALTHCHECK --interval=3s --timeout=2s --start-period=10s --retries=3 CMD curl -f http://127.0.0.1/v1/readyz || exit 1 diff --git a/build/packer/ansible/agent-aws.yml b/build/packer/ansible/agent-aws.yml index f5d8c84ef9..63075ed46e 100644 --- a/build/packer/ansible/agent-aws.yml +++ b/build/packer/ansible/agent-aws.yml @@ -22,10 +22,36 @@ - name: Add a repository for NodeJS shell: "curl -fsSL https://rpm.nodesource.com/setup_{{ node_version }} | bash -" + - name: Install Oracle EPEL Repo + yum: + name: oracle-epel-release-el9 + state: latest + + - name: Install yum-utils + yum: + name: yum-utils + state: latest + + - name: Add Docker repository + command: yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo + + - name: Install Docker packages + yum: + name: + - docker-ce + - docker-ce-cli + - containerd.io + state: latest + + - name: Enable Docker service + systemd: + name: docker + enabled: yes + state: started + - name: Install packages - package: + yum: name: - - docker - git - jq - gettext @@ -41,22 +67,22 @@ - gcc - make - perl - # - p7zip + #- p7zip - nodejs - state: present + state: latest - name: Install Java17 - package: - name: jdk-17-headless - state: present + yum: + name: java-17-openjdk-headless + state: latest - name: Install pip3 and ansible - package: + yum: name: - python3-pip - ansible-core - glibc-langpack-en - state: present + state: latest - name: Install ansible collections shell: "ansible-galaxy collection install {{ item }}" @@ -110,8 +136,7 @@ mode: "555" - name: Install Python's virtualenv - pip: - name: virtualenv + command: python3 -m venv /home/ec2-user/venv - name: Install Python modules pip: @@ -276,16 +301,6 @@ name: fs.inotify.max_user_watches value: 1048576 - - name: Get disk UUID - command: blkid -s UUID -o value /dev/nvme0n1p1 - register: disk_uuid - - - name: Replace fstab entities with new mount options - lineinfile: - path: /etc/fstab - regexp: "^UUID={{ disk_uuid.stdout }}" - line: "UUID={{ disk_uuid.stdout }} / xfs defaults,noatime,nobarrier,discard 1 1" - - name: Add repo.ci.percona.com to /etc/hosts lineinfile: dest: /etc/hosts diff --git a/build/packer/aws.pkr.hcl b/build/packer/aws.pkr.hcl index d3bd6cd7cf..67e713959c 100644 --- a/build/packer/aws.pkr.hcl +++ b/build/packer/aws.pkr.hcl @@ -39,9 +39,9 @@ source "amazon-ebs" "agent" { iit-billing-tag = "pmm-worker" } launch_block_device_mappings { - device_name = "/dev/xvda" - volume_size = 50 - volume_type = "gp3" + device_name = "/dev/sda1" + volume_size = 50 + volume_type = "gp3" delete_on_termination = true } vpc_filter { @@ -114,7 +114,7 @@ build { user = "ec2-user" ansible_env_vars = ["ANSIBLE_NOCOLOR=True"] extra_arguments = [ - "--ssh-extra-args", "-o HostKeyAlgorithms=+ssh-rsa -o StrictHostKeyChecking=no -o ForwardAgent=yes -o UserKnownHostsFile=/dev/null", "-v" + "--ssh-extra-args", "-o HostKeyAlgorithms=+ssh-rsa -o StrictHostKeyChecking=no -o ForwardAgent=yes -o UserKnownHostsFile=/dev/null", "-vvv" ] playbook_file = "./ansible/agent-aws.yml" } From 01b41dfff769d910d7c01506bc98b87023a6a5fc Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Mon, 26 Aug 2024 13:39:33 +0300 Subject: [PATCH 03/35] PMM-13317 Remove clickhouse exporter, update the guide (#3168) --- CONTRIBUTING.md | 79 ++++++++++++++++------------- build/scripts/build-client-binary | 1 - build/scripts/build-client-packages | 2 - build/scripts/build-client-source | 1 - managed/models/database.go | 9 ---- 5 files changed, 43 insertions(+), 49 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b629c4234c..5e7c7fa367 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -33,7 +33,7 @@ This project is built from several repositories: #### Frontends * [percona/grafana-dashboards](https://github.com/percona/grafana-dashboards) PMM dashboards for database monitoring -* [percona-platform/grafana](https://github.com/percona-platform/grafana) user interface for PMM +* [percona/grafana](https://github.com/percona/grafana) user interface for PMM ### PMM Client @@ -46,7 +46,6 @@ This project is built from several repositories: * [percona/proxysql_exporter](https://github.com/percona/proxysql_exporter) exports ProxySQL server's metrics * [percona/rds_exporter](https://github.com/percona/rds_exporter) exports metrics from RDS * [percona/azure_exporter](https://github.com/percona/azure_metrics_exporter) exports metrics from Azure -* [Percona-Lab/clickhouse_exporter](https://github.com/Percona-Lab/clickhouse_exporter) exports metrics from ClickHouse * [percona/percona-toolkit](https://github.com/percona/percona-toolkit) is a collection of advanced command-line tools to perform a variety of MySQL and system tasks that are too difficult or complex to perform manually @@ -119,8 +118,8 @@ Since PMM has a lot of components, we will mention only three big parts of it. ### PMM Server * Clone [pmm repository](https://github.com/percona/pmm) -* Run `make env-up` to start development container. This will be slow on first run, all consequent calls will be order of magnitude faster, because development container will be reused. From time to time it is recommended to perform container rebuild to pull the latest changes, for that run `make env-up-rebuild`. -* To run pmm-managed with a new changes just run `make env TARGET="run-managed"`, it updates `pmm-managed` running in container. +* Run `make env-up` to start development container. This will be slow on first run, all subsequent runs will be order of magnitude faster, because development container will be reused. From time to time it is recommended to rebuild the container to pull the latest changes by running `make env-up-rebuild`. +* To run pmm-managed with your code changes, just run `make run-managed`. It updates `pmm-managed` running in the container. ### PMM Client @@ -129,11 +128,11 @@ Since PMM has a lot of components, we will mention only three big parts of it. * Run `make setup-dev` to connect pmm-agent to PMM Server. * This command will register local pmm-agent to PMM Server and generate config file `pmm-agent-dev.yaml` * Once it's connected just use `make run` to run pmm-agent. -* To work correctly pmm-agent needs vmagent and exporters installed on the system. - * First option is just install pmm-client using this instrucion https://docs.percona.com/percona-monitoring-and-management/setting-up/client/index.html#install. It will install all exporters as well. +* To work correctly, pmm-agent needs vmagent and exporters installed on the system. + * The first option is to install pmm-client using this instrucion https://docs.percona.com/percona-monitoring-and-management/setting-up/client/index.html#install. It will install all exporters as well. * Another option is to do it manually - * vmagent and exporters can be installed by building each of them or by downloading the pmm-client tarball from [percona.com](https://www.percona.com/downloads/pmm2/) and copying binaries to the exporters_base directory configured in a `pmm-agent-dev.yaml` file. - * All paths to exporters binaries are configured in `pmm-agent-dev.yaml`, so they can be changed manually + * vmagent and exporters can be installed by building each of them or by downloading the pmm-client tarball from [percona.com](https://www.percona.com/downloads/pmm2/) and copying binaries to the exporters_base directory configured in `pmm-agent-dev.yaml` file. + * All paths to exporter binaries are configured in `pmm-agent-dev.yaml`, so they can be changed manually if necessary. ### Exporters @@ -145,20 +144,24 @@ See [Grafana Dashboards Contribution Guide](https://github.com/percona/grafana-d ## Tests -In a PMM we have 3 kind of tests. +In PMM we have 3 kinds of tests: + + - unit tests + - API tests + - end-to-end, or e2e, tests ### Unit tests -The first one is a Unit testing, so we have unit tests in each repository mentioned above. each of repositories has it's own instruction how to run unit tests. +Each repository mentioned above has its own set of unit tests, as well as its own instruction on how to run unit tests. ### API tests -API tests are included into pmm repository and located in [api-tests directory](https://github.com/percona/pmm/tree/main/api-tests). API tests runs against running PMM Server container. +API tests are part of the PMM repository and can be found in [api-tests directory](https://github.com/percona/pmm/tree/main/api-tests). API tests run inside of an active PMM Server container. -### End to End (E2E) tests +### End-to-end (E2E) tests -End to End tests are located in [pmm-qa repository](https://github.com/percona/pmm-qa). They includes UI tests and CLI tests. -Please see [readme](https://github.com/percona/pmm-qa#readme) for details on how to run these. +End-to-end tests are located in [pmm-qa repository](https://github.com/percona/pmm-qa). They include UI tests and CLI tests. +Please refer to [readme](https://github.com/percona/pmm-qa#readme) for details on how to run these. ## Submitting a Pull Request @@ -167,49 +170,53 @@ Before proceeding with your first pull request, we highly recommend you to read - [Tech stack](docs/process/tech_stack.md) - [Best practices](docs/process/best_practices.md) -As a PR created you are responsible to: -* make sure PR is ready (linted, tested and etc) -* make sure it is reviewed (ask for review, ping reviewers and etc) -* make sure it is merged - * merge when it is reviewed and tested - * ask code owners/admins to merge it if merging is blocked for some reason +Once your PR is created, please do the following: +* prepare your PR for review + * run code syntax checks, or linters + * run tests and make sure they all pass +* pass the review (ask for review, ping reviewers) +* then merge it + * ask code owners or admins to merge it if merging is blocked for some reason ## Feature Build -PMM is quite complex project, it consists from many different repos descibed above. Feature Build (FB) is a way to get changes all together, build them all together, run tests and get client and server containers. +PMM is quite a complex project, it consists of many different repos described above. A Feature Build (FB) is a way to put everything together, build all components, run tests and, finally, build client and server containers. Please see: [How to create a feature build](https://github.com/Percona-Lab/pmm-submodules/blob/PMM-2.0/README.md#how-to-create-a-feature-build) -### The Goals of the Feature Builds +### The Goals of Feature Builds -1. Provide an easy way to test/accept functionality for PO/PM and QA -2. Inform the Developer about Automation Tests results before the code is merged -3. (Future) Let the Developers add/modify e2e tests when they change functionality +1. Provide a way to have the functionality tested by the developer and QA (or other PMM team members) +2. Inform the Developer about Automation Test results before the code is merged +3. Let the Developers add or modify e2e tests whenever there are functional changes ### The Rules -1. Start Feature Build for every feature/improvement you are working on. -2. Start PullRequest to percona-lab/pmm-submodules as DRAFT. -3. Change the status of Pull Request from Draft to Open ONLY if your changes must be merged to pmm-submodules. -4. Include a short explanation in the Long Description field of the Feature in PR for feature build and checkboxes to all related Pull Requests. Check other [PRs](https://github.com/Percona-Lab/pmm-submodules/pulls) as examples. +1. Create a Feature Build for every feature/improvement/bugfix you are working on. +2. Create a draft Pull Request in https://percona-lab/pmm-submodules. +3. Change the status of the Pull Request from Draft to Open ONLY if you are contributing code changes to pmm-submodules (very rare). +4. Provide a short explanation in the Description field of you feature build PR and checkboxes to all related Pull Requests. If you need examples, check out [PRs](https://github.com/Percona-Lab/pmm-submodules/pulls) made by others. 5. After all related PRs in feature build are merged you should: a. either close the PR and delete the branch (this is the default option) or - b. merge the PR to pmm-submodules repository (please note, this rarely needs to be merged, for example infrastructure changes do) + b. merge the PR to pmm-submodules repository (please note, this rarely needs to be merged, for example infrastructure changes) ## Code Reviews -There are number of approaches for the code review and ownership: Code Ownership (CODEOWNERS), [github auto review](https://docs.github.com/en/github/setting-up-and-managing-organizations-and-teams/managing-code-review-assignment-for-your-team), PR owner assign ppl that are better fit for the particular code/job. +There is a number of approaches we use for the code review and ownership: + +- code ownership, which is enforced via github's CODEOWNERS file +- github [code review assignment](https://docs.github.com/en/github/setting-up-and-managing-organizations-and-teams/managing-code-review-assignment-for-your-team) +- finally, a PR owner can manually assign reviewers (usually one or more PMM team members). -For more efficient review process we use a mixed approach: -* repos that have CODEOWNERS +To make the review process effective, we use a mixed approach: +* for repos that have CODEOWNERS * github will assign reviewers automatically -* repos that don't have CODEOWNERS +* for repos that don't have CODEOWNERS * add reviewers as follows: * add `pmm-review-fe` for UI/UX reviews * add `pmm-review-exporters` for exporter reviews [see PMM Client](#PMM-Client) * add `pmm-review-be` for backend reviews -* if you know exactly who should review your code - * add them to the review +* if you know exactly who should review your code, add them to the review | Team | Description | Members | diff --git a/build/scripts/build-client-binary b/build/scripts/build-client-binary index 27e1c2ae86..6deb8390b4 100755 --- a/build/scripts/build-client-binary +++ b/build/scripts/build-client-binary @@ -103,7 +103,6 @@ main() { gobuild_component "proxysql_exporter" gobuild_component "rds_exporter" gobuild_component "azure_metrics_exporter" - gobuild_component "clickhouse_exporter" "" "github.com/Percona-Lab/clickhouse_exporter" gobuild_component "pmm-admin" "pmm" "" "admin" gobuild_component "pmm-agent" "pmm" "" "agent" diff --git a/build/scripts/build-client-packages b/build/scripts/build-client-packages index 68c2d03bda..1d6f89c704 100755 --- a/build/scripts/build-client-packages +++ b/build/scripts/build-client-packages @@ -475,8 +475,6 @@ if [ "$TARBALL" = '1' -o "$SOURCE" = '1' ]; then ProxysqlExp_REPO=$(get_repos "proxysql_exporter") NodeExp_BRANCH_NAME=$(get_branches "node_exporter") NodeExp_REPO=$(get_repos "node_exporter") - ClickhouseExp_BRANCH_NAME=$(get_branches "clickhouse_exporter") - ClickhouseExp_REPO=$(get_repos "clickhouse_exporter") AzureExp_BRANCH_NAME=$(get_branches "azure_metrics_exporter") AzureExp_REPO=$(get_repos "azure_metrics_exporter") fi diff --git a/build/scripts/build-client-source b/build/scripts/build-client-source index b9867f764b..df923cbee8 100755 --- a/build/scripts/build-client-source +++ b/build/scripts/build-client-source @@ -69,7 +69,6 @@ main() { prepare_tarball postgres_exporter prepare_tarball proxysql_exporter prepare_tarball node_exporter - prepare_tarball clickhouse_exporter prepare_tarball rds_exporter prepare_tarball azure_metrics_exporter diff --git a/managed/models/database.go b/managed/models/database.go index 01d3be9dd4..b6566a6776 100644 --- a/managed/models/database.go +++ b/managed/models/database.go @@ -1163,9 +1163,6 @@ func migrateDB(db *reform.DB, params SetupDBParams) error { if err = setupFixture1(tx.Querier, params); err != nil { return err } - if err = setupFixture2(tx.Querier, params.Username, params.Password); err != nil { - return err - } return nil }) } @@ -1253,12 +1250,6 @@ func setupFixture1(q *reform.Querier, params SetupDBParams) error { return nil } -func setupFixture2(q *reform.Querier, username, password string) error { //nolint:revive - // TODO add clickhouse_exporter - - return nil -} - // parsePGAddress parses PostgreSQL address into address:port; if no port specified returns default port number. func parsePGAddress(address string) (string, uint16, error) { if !strings.Contains(address, ":") { From def848fb4988960604c29ddd590749e6ab4cc037 Mon Sep 17 00:00:00 2001 From: Talha Bin Rizwan Date: Mon, 26 Aug 2024 20:08:36 +0500 Subject: [PATCH 04/35] PMM-13244 Drop centos-7 ovf agent (#3179) --- build/packer/ansible/agent-do.yml | 108 +++++++++++++++++++++++++----- build/packer/do.pkr.hcl | 6 +- 2 files changed, 96 insertions(+), 18 deletions(-) diff --git a/build/packer/ansible/agent-do.yml b/build/packer/ansible/agent-do.yml index 44ae5485fa..40a968c163 100644 --- a/build/packer/ansible/agent-do.yml +++ b/build/packer/ansible/agent-do.yml @@ -14,6 +14,11 @@ # Alternative architecture name just because we never can have only one name in computers ansible_architecture_alt: "{% if ansible_architecture == 'x86_64' %}amd64{% elif ansible_architecture == 'aarch64' %}arm64{% else %}none{% endif %}" + - name: Add hashicorp repository + get_url: + url: https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo + dest: /etc/yum.repos.d/hashicorp.repo + - name: Enable epel repo yum: name: epel-release @@ -27,10 +32,26 @@ - name: Add a repository for NodeJS shell: "curl -fsSL https://rpm.nodesource.com/setup_{{ node_version }} | bash -" + - name: Install docker + block: + - name: Add docker repository + get_url: + url: https://download.docker.com/linux/centos/docker-ce.repo + dest: /etc/yum.repos.d/docker-ce.repo + + - name: Install docker packages + package: + name: + - docker-ce + - docker-ce-cli + - containerd.io + - docker-buildx-plugin + - docker-compose-plugin + state: present + - name: Install packages package: name: - - docker - git - jq - gettext @@ -49,12 +70,14 @@ - perl - p7zip - nodejs + - packer # - xmlstarlet state: present + - name: Install Java17 package: - name: jdk-17-headless + name: java-17-openjdk-headless state: present - name: Install docker-compose @@ -105,6 +128,11 @@ group: "root" owner: "root" + - name: Install pip3 + package: + name: python3-pip + state: present + - name: Install Python modules pip: name: "{{ item }}" @@ -124,16 +152,26 @@ description: VirtualBox baseurl: "http://download.virtualbox.org/virtualbox/rpm/el/$releasever/$basearch" gpgcheck: true - gpgkey: https://www.virtualbox.org/download/oracle_vbox.asc + gpgkey: https://www.virtualbox.org/download/oracle_vbox_2016.asc enabled: true state: present + ##- name: Add base repository for Hashicorp + ## yum_repository: + ## name: hashicorp + ## description: HashiCorp Repository + ## baseurl: "https://rpm.releases.hashicorp.com/RHEL/$releasever/$basearch/stable" + ## gpgcheck: true + ## gpgkey: https://rpm.releases.hashicorp.com/gpg + ## enabled: true + ## state: present + - name: Install packages for virtualization yum: state: present name: "{{ item }}" loop: - - VirtualBox-6.1 + - VirtualBox-7.0 - vagrant - name: Reboot to the latest kernel @@ -142,6 +180,47 @@ - name: Recompile kernel command: /sbin/vboxconfig + - name: Install Packer Plugins + block: + - name: Create Packer plugins directory + file: + path: ~/.packer.d/plugins/github.com + state: directory + mode: '0755' + recurse: yes + + - name: Install packer virtualbox plugin + command: > + /usr/bin/packer plugins install github.com/hashicorp/virtualbox + register: packer_plugin_install + changed_when: "'Installed plugin successfully' in packer_plugin_install.stdout" + + - name: Install packer ansible plugin + command: > + /usr/bin/packer plugins install github.com/hashicorp/ansible + register: packer_ansible_plugin_install + changed_when: "'Installing' in packer_ansible_plugin_install.stdout" + + - name: Verify packer virtualbox plugin installation + stat: + path: ~/.packer.d/plugins/github.com/hashicorp/virtualbox + register: packer_virtualbox_plugin + + - name: Verify packer ansible plugin installation + stat: + path: ~/.packer.d/plugins/github.com/hashicorp/ansible + register: packer_ansible_plugin + + - name: Output virtualbox plugin installation status + debug: + msg: "Packer VirtualBox plugin is installed" + when: packer_virtualbox_plugin.stat.exists + + - name: Output ansible plugin installation status + debug: + msg: "Packer Ansible plugin is installed" + when: packer_ansible_plugin.stat.exists + - name: Copy docker daemon config copy: src: daemon.json @@ -153,19 +232,14 @@ state: started enabled: yes - - name: Pull and cache docker images - docker_image: - name: "{{ item }}" - source: pull - loop: - - debian:buster - - debian:stretch - - debian:bullseye - - ubuntu:jammy - - ubuntu:bionic - - ubuntu:focal - - rockylinux:8 - - oraclelinux:9 + - name: Download and unarchive AWS installer + unarchive: + src: https://awscli.amazonaws.com/awscli-exe-linux-{{ ansible_architecture }}.zip + dest: /tmp + remote_src: yes + + - name: Run awscli installer + shell: /tmp/aws/install - name: Turn off swap sysctl: diff --git a/build/packer/do.pkr.hcl b/build/packer/do.pkr.hcl index 3b1cba00a1..20733b2b2b 100644 --- a/build/packer/do.pkr.hcl +++ b/build/packer/do.pkr.hcl @@ -1,9 +1,13 @@ packer { required_plugins { digitalocean = { - version = "=1.0.4" + version = "=1.4.0" source = "github.com/digitalocean/digitalocean" } + ansible = { + version = "~> 1" + source = "github.com/hashicorp/ansible" + } } } From 3d20f7d54e1cc6a99d226452523571fe50329fb0 Mon Sep 17 00:00:00 2001 From: Nurlan Moldomurov Date: Mon, 26 Aug 2024 23:16:20 +0600 Subject: [PATCH 05/35] PMM-13111 disable new postgresql collectors. (#3111) * PMM-13111 disable new postgresql collectors. (cherry picked from commit f7326cd3106618547d13b035fde69d7f8753ce6a) * PMM-13111 Fix linters. * PMM-13111 Add license header. * PMM-13111 Add comments. * PMM-13111 Add comments. * PMM-13111 Fix comments. * PMM-13111 release notes. * Update docs/release-notes/2.43.0.md Co-authored-by: Catalina A <94133018+catalinaadam@users.noreply.github.com> * PMM-13111 fix a typo --------- Co-authored-by: Catalina A <94133018+catalinaadam@users.noreply.github.com> Co-authored-by: Alex Demidoff --- docs/release-notes/2.43.0.md | 8 +-- managed/services/agents/postgresql.go | 22 +++++- managed/services/agents/postgresql_test.go | 12 ++-- managed/utils/collectors/collectors_test.go | 78 +++++++++++++++++++++ 4 files changed, 109 insertions(+), 11 deletions(-) create mode 100644 managed/utils/collectors/collectors_test.go diff --git a/docs/release-notes/2.43.0.md b/docs/release-notes/2.43.0.md index ae7f70d2ab..7e92a19232 100644 --- a/docs/release-notes/2.43.0.md +++ b/docs/release-notes/2.43.0.md @@ -1,6 +1,6 @@ # Percona Monitoring and Management 2.43.0 -| **Release date** | July , 2024 | +| **Release date** | August , 2024 | | -----------------| ----------------------------------------------------------------------------------------------- | | **Installation** | [Installing Percona Monitoring and Management](../quickstart/index.md) | @@ -164,8 +164,7 @@ If you're looking to upgrade, you can easily [install the latest version of Perc ### Fixed issues - -- [PMM-13246](https://perconadev.atlassian.net/browse/PMM-13246) - Addressed four security vulnerabilities (CVEs) related to the GNU C Library (Glibc), specifically affecting the Name Service Cache Daemon (nscd):[CVE-2024-33599](https://nvd.nist.gov/vuln/detail/CVE-2024-33599), [CVE-2024-33600](https://nvd.nist.gov/vuln/detail/CVE-2024-33600), [CVE-2024-33601](https://nvd.nist.gov/vuln/detail/CVE-2024-33601), [CVE-2024-33602](https://nvd.nist.gov/vuln/detail/CVE-2024-33602). +- [PMM-13111](https://perconadev.atlassian.net/browse/PMM-13111) - Fixed an issue with `--disable-collectors` flag not supporting new collectors introduced in the recent `postgres_exporter` upgrade. - [PMM-13277](https://perconadev.atlassian.net/browse/PMM-13277) - PMM 2.43 is now available on the AWS Marketplace, resolving the previous temporary unavailability issue of PMM 2.42.0. Users can directly install or upgrade to PMM 2.43.0 through AWS Marketplace or the PMM UI for access to the latest features and improvements. @@ -176,9 +175,6 @@ If you're looking to upgrade, you can easily [install the latest version of Perc - [CVE-2024-33601](https://nvd.nist.gov/vuln/detail/CVE-2024-33601) - [CVE-2024-33602](https://nvd.nist.gov/vuln/detail/CVE-2024-33602) - - - - [PMM-13002](https://perconadev.atlassian.net/browse/PMM-13246): [Dashboards] - Fixed a bug in the **MongoDB ReplSet Summary** dashboard where the **Node Summary** section only displayed information for one node. It now correctly shows data for all nodes in a replica set when **All** is selected, providing a comprehensive view of multi-node deployments. - [PMM-13255](https://perconadev.atlassian.net/browse/PMM-13255) - Resolved two issues with the MongoDB Replication Lag Alert: one where an error occurred during the import of the alert rule template, and another where the alert description displayed an incorrect current value for the replication lag. diff --git a/managed/services/agents/postgresql.go b/managed/services/agents/postgresql.go index 73575eafed..69510b0016 100644 --- a/managed/services/agents/postgresql.go +++ b/managed/services/agents/postgresql.go @@ -34,10 +34,25 @@ import ( var ( postgresExporterAutodiscoveryVersion = version.MustParse("2.15.99") postgresExporterWebConfigVersion = version.MustParse("2.30.99") - postgresSSLSniVersion = version.MustParse("2.40.99") + postgresSSLSniVersion = version.MustParse("2.41.0-0") + postgresExporterCollectorsVersion = version.MustParse("2.41.0-0") postgresMaxExporterConnsVersion = version.MustParse("2.41.2-0") ) +var defaultPostgresExporterCollectors = []string{ + "database", + "database_wraparound", + "extensions", + "locks", + "replication", + "replication_slot", + "stat_bgwriter", + "stat_database", + "stat_user_tables", + "statio_user_tables", + "wal", +} + const defaultAutoDiscoveryDatabaseLimit = 50 func postgresExcludedDatabases() []string { @@ -101,6 +116,11 @@ func postgresExporterConfig(node *models.Node, service *models.Service, exporter args = collectors.FilterOutCollectors("--collect.", args, exporter.DisabledCollectors) + if !pmmAgentVersion.Less(postgresExporterCollectorsVersion) { + disableCollectorArgs := collectors.DisableDefaultEnabledCollectors("--no-collector.", defaultPostgresExporterCollectors, exporter.DisabledCollectors) + args = append(args, disableCollectorArgs...) + } + args = withLogLevel(args, exporter.LogLevel, pmmAgentVersion, false) sort.Strings(args) diff --git a/managed/services/agents/postgresql_test.go b/managed/services/agents/postgresql_test.go index 661d99974b..f69d5c6aa6 100644 --- a/managed/services/agents/postgresql_test.go +++ b/managed/services/agents/postgresql_test.go @@ -150,11 +150,11 @@ func (s *PostgresExporterConfigTestSuite) TestSocket() { } func (s *PostgresExporterConfigTestSuite) TestDisabledCollectors() { - s.pmmAgentVersion = &version.Parsed{} + s.pmmAgentVersion = version.MustParse("2.42.0") s.postgresql.Address = nil s.postgresql.Port = nil s.postgresql.Socket = pointer.ToString("/var/run/postgres") - s.exporter.DisabledCollectors = []string{"custom_query.hr", "custom_query.hr.directory"} + s.exporter.DisabledCollectors = []string{"custom_query.hr", "custom_query.hr.directory", "locks"} actual, err := postgresExporterConfig(s.node, s.postgresql, s.exporter, exposeSecrets, s.pmmAgentVersion) s.NoError(err, "Failed to create exporter config") @@ -164,11 +164,15 @@ func (s *PostgresExporterConfigTestSuite) TestDisabledCollectors() { TemplateLeftDelim: "{{", TemplateRightDelim: "}}", Args: []string{ + "--auto-discover-databases", "--collect.custom_query.lr", - "--collect.custom_query.lr.directory=" + pathsBase(s.pmmAgentVersion, "{{", "}}") + "/collectors/custom-queries/postgresql/low-resolution", + "--collect.custom_query.lr.directory={{ .paths_base }}/collectors/custom-queries/postgresql/low-resolution", "--collect.custom_query.mr", - "--collect.custom_query.mr.directory=" + pathsBase(s.pmmAgentVersion, "{{", "}}") + "/collectors/custom-queries/postgresql/medium-resolution", + "--collect.custom_query.mr.directory={{ .paths_base }}/collectors/custom-queries/postgresql/medium-resolution", + "--exclude-databases=template0,template1,postgres,cloudsqladmin,pmm-managed-dev,azure_maintenance,rdsadmin", + "--no-collector.locks", "--web.listen-address=0.0.0.0:{{ .listen_port }}", + "--web.config={{ .TextFiles.webConfigPlaceholder }}", }, } requireNoDuplicateFlags(s.T(), actual.Args) diff --git a/managed/utils/collectors/collectors_test.go b/managed/utils/collectors/collectors_test.go new file mode 100644 index 0000000000..1f5788b22f --- /dev/null +++ b/managed/utils/collectors/collectors_test.go @@ -0,0 +1,78 @@ +// Copyright (C) 2023 Percona LLC +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package collectors + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestDisableDefaultEnabledCollectors(t *testing.T) { + type args struct { + prefix string + defaultCollectors []string + disabledCollectors []string + } + tests := []struct { + name string + args args + want []string + }{ + { + name: "Disable single default enabled collectors", + args: args{ + prefix: "--no-collector.", + defaultCollectors: []string{"a", "b", "c", "d", "e"}, + disabledCollectors: []string{"b"}, + }, + want: []string{"--no-collector.b"}, + }, + { + name: "Disable multiple default enabled collectors", + args: args{ + prefix: "--no-collector.", + defaultCollectors: []string{"a", "b", "c", "d", "e", "f"}, + disabledCollectors: []string{"a", "c"}, + }, + want: []string{"--no-collector.a", "--no-collector.c"}, + }, + { + name: "Disable all default enabled collectors", + args: args{ + prefix: "--no-collector.", + defaultCollectors: []string{"a", "b", "c"}, + disabledCollectors: []string{"a", "b", "c"}, + }, + want: []string{"--no-collector.a", "--no-collector.b", "--no-collector.c"}, + }, + { + name: "Disable non-default enabled collectors", + args: args{ + prefix: "--no-collector.", + defaultCollectors: []string{"a", "b", "c"}, + disabledCollectors: []string{"d", "e", "f"}, + }, + want: []string{}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + actual := DisableDefaultEnabledCollectors(tt.args.prefix, tt.args.defaultCollectors, tt.args.disabledCollectors) + require.Equal(t, tt.want, actual, "DisableDefaultEnabledCollectors() = %v, want %v", actual, tt.want) + }) + } +} From d9d956c93abdfc46bdc6f9d559ae2b7aa0e013bb Mon Sep 17 00:00:00 2001 From: Michael Okoko <10512379+idoqo@users.noreply.github.com> Date: Mon, 26 Aug 2024 22:20:21 +0100 Subject: [PATCH 06/35] PMM-10680 enable pbm collector (#3162) * PMM-12848 Enable currentopmetrics collector in mongodb_exporter. * PMM-7 fix golint. * PMM-12848 Add currentopmetrics to scrape config. * PMM-12848 collect currentopmetrics in low resolution. * PMM-12848 Fix tests. * PMM-13141 Enable fcv collector. * enable pbm exporter by default * enable pbm collector in 2.42 * move pbm collector to 2.43 * update scrape configs * revert makefile changes * drop fcv collector until it is recognized by mongodb exporter * add release note highlight for PMM-10680 * merge both new mongodb exporter collectors * enable pbm collector by default * add new note for pbm collector * apply suggestion * fix tests * fix typo --------- Co-authored-by: Nurlan Moldomurov Co-authored-by: Nurlan Moldomurov --- docs/release-notes/2.43.0.md | 24 +++++- managed/services/agents/mongodb.go | 4 + managed/services/agents/mongodb_test.go | 78 +++++++++++++++++++ .../victoriametrics/scrape_configs.go | 3 + 4 files changed, 108 insertions(+), 1 deletion(-) diff --git a/docs/release-notes/2.43.0.md b/docs/release-notes/2.43.0.md index 7e92a19232..b57b98e1c8 100644 --- a/docs/release-notes/2.43.0.md +++ b/docs/release-notes/2.43.0.md @@ -113,10 +113,32 @@ pmm-admin add mongodb --enable-all-collectors ... Specifying a limit with `--max-collections` for this collector is not necessary. !!! note "Operation collection limitation" - To minimize impact on disk usage, the CurrentOp collector is designed to collect only operations that have been running for longer than 1 minute. This limitation helps focus on potentially problematic long-running operations while keeping data volume manageable. +To minimize impact on disk usage, the CurrentOp collector is designed to collect only operations that have been running for longer than 1 minute. This limitation helps focus on potentially problematic long-running operations while keeping data volume manageable. For more information on MongoDB collectors and metrics, see the [pmm-admin commands documentation](../use/commamds/pmm-admin.md). +### Monitoring for Percona Backup for MongoDB +PMM now supports monitoring your Percona Backup for MongoDB (PBM) setup and provides PBM-related metrics such as `pbm-agent` statuses, PITR configuration, and backup statuses. +This is made possible via a new PBM collector in MongoDB exporter that gives you visibility to your PBM setup via these metrics: +- `mongodb_pbm_cluster_backup_configured` +- `mongodb_pbm_agent_status` +- `mongodb_pbm_cluster_pitr_backup_enabled` +- `mongodb_pbm_backup_size` +- `mongodb_pbm_backup_duration_seconds` + +These metrics are enabled by default. If you're already running Percona Backup for MongoDB, you'll automatically receive these metrics without any additional configuration. +## Improvements + +- [PMM-13133](https://perconadev.atlassian.net/browse/PMM-13133) - + +- [PMM-13054](https://perconadev.atlassian.net/browse/PMM-13054) - The default number of log lines for each log file returned by `httsp:///logs.zip` endpoint has been increased from 1,000 to 50,000. + +Additionally, the endpoint now includes a customizable line-count parameter in the download URL, allowing you to specify a custom number of log lines or opt for unlimited log size. For more information, see the [API documentation](https://percona-pmm.readme.io/reference/logs). + +- [PMM-13159](https://perconadev.atlassian.net/browse/PMM-13159) - We have removed the experimental MongoDB **Collection Details** dashboard from PMM. You can now find up-to-date collection information on the new Mongo **Cluster Summary** dashboard, which provides a more comprehensive and accurate view of MongoDB collection metrics. + +If you have been using the **Collection Details** dashboard, make sure to now check the new **MongoDB Cluster Summary** dashboard for similar information. + ## Maintenance diff --git a/managed/services/agents/mongodb.go b/managed/services/agents/mongodb.go index 3b1fa5f68d..a9c39c14f3 100644 --- a/managed/services/agents/mongodb.go +++ b/managed/services/agents/mongodb.go @@ -37,6 +37,7 @@ var ( v2_26_0 = version.MustParse("2.26.0-0") v2_41_1 = version.MustParse("2.41.1-0") v2_42_0 = version.MustParse("2.42.0-0") + v2_43_0 = version.MustParse("2.43.0-0") ) // mongodbExporterConfig returns desired configuration of mongodb_exporter process. @@ -109,6 +110,9 @@ func getArgs(exporter *models.Agent, tdp *models.DelimiterPair, listenAddress st if !pmmAgentVersion.Less(v2_42_0) && collectAll { // >= 2.42.0 args = append(args, "--collector.currentopmetrics") } + if !pmmAgentVersion.Less(v2_43_0) { // >= 2.43.0, enable pbm collector by default + args = append(args, "--collector.pbm") + } args = collectors.FilterOutCollectors("--collector.", args, exporter.DisabledCollectors) args = append(args, collectors.DisableDefaultEnabledCollectors("--no-collector.", defaultEnabledCollectors, exporter.DisabledCollectors)...) diff --git a/managed/services/agents/mongodb_test.go b/managed/services/agents/mongodb_test.go index 0864effc51..74c9fc4a6e 100644 --- a/managed/services/agents/mongodb_test.go +++ b/managed/services/agents/mongodb_test.go @@ -415,6 +415,84 @@ func TestMongodbExporterConfig2411(t *testing.T) { }) } +func TestMongodbExporterConfig2430(t *testing.T) { + pmmAgentVersion := version.MustParse("2.43.0") + node := &models.Node{ + Address: "1.2.3.4", + } + mongodb := &models.Service{ + Address: pointer.ToString("1.2.3.4"), + Port: pointer.ToUint16(27017), + } + exporter := &models.Agent{ + AgentID: "agent-id", + AgentType: models.MongoDBExporterType, + Username: pointer.ToString("username"), + Password: pointer.ToString("s3cur3 p@$$w0r4."), + AgentPassword: pointer.ToString("agent-password"), + } + actual, err := mongodbExporterConfig(node, mongodb, exporter, redactSecrets, pmmAgentVersion) + expected := &agentpb.SetStateRequest_AgentProcess{ + Type: inventorypb.AgentType_MONGODB_EXPORTER, + TemplateLeftDelim: "{{", + TemplateRightDelim: "}}", + Args: []string{ + "--collector.diagnosticdata", + "--collector.pbm", + "--collector.replicasetstatus", + "--compatible-mode", + "--discovering-mode", + "--mongodb.global-conn-pool", + "--web.listen-address=0.0.0.0:{{ .listen_port }}", + "--web.config={{ .TextFiles.webConfigPlaceholder }}", + }, + Env: []string{ + "MONGODB_URI=mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:27017/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000", + }, + RedactWords: []string{"s3cur3 p@$$w0r4.", "agent-password"}, + TextFiles: map[string]string{ + "webConfigPlaceholder": "basic_auth_users:\n pmm: agent-password\n", + }, + } + require.NoError(t, err) + requireNoDuplicateFlags(t, actual.Args) + require.Equal(t, expected.Args, actual.Args) + require.Equal(t, expected.Env, actual.Env) + require.Equal(t, expected, actual) + + t.Run("Enabling all collectors", func(t *testing.T) { + exporter.MongoDBOptions = &models.MongoDBOptions{ + EnableAllCollectors: true, + StatsCollections: []string{"db1.col1.one", "db2.col2", "db3"}, + } + + expected.Args = []string{ + "--collector.collstats", + "--collector.collstats-limit=0", + "--collector.currentopmetrics", + "--collector.dbstats", + "--collector.diagnosticdata", + "--collector.indexstats", + "--collector.pbm", + "--collector.replicasetstatus", + "--collector.shards", + "--collector.topmetrics", + "--compatible-mode", + "--discovering-mode", + // this should be here even if limit=0 because it could be used to filter dbstats + // since dbstats is not depending on the number of collections present in the db. + "--mongodb.collstats-colls=db1.col1.one,db2.col2,db3", + "--mongodb.global-conn-pool", + "--mongodb.indexstats-colls=db1.col1.one,db2.col2,db3", + "--web.listen-address=0.0.0.0:{{ .listen_port }}", + "--web.config={{ .TextFiles.webConfigPlaceholder }}", + } + actual, err := mongodbExporterConfig(node, mongodb, exporter, exposeSecrets, pmmAgentVersion) + require.NoError(t, err) + require.Equal(t, expected.Args, actual.Args) + }) +} + func TestMongodbExporterConfig(t *testing.T) { pmmAgentVersion := version.MustParse("2.0.0") node := &models.Node{ diff --git a/managed/services/victoriametrics/scrape_configs.go b/managed/services/victoriametrics/scrape_configs.go index d2a3104fcd..4106a1fd62 100644 --- a/managed/services/victoriametrics/scrape_configs.go +++ b/managed/services/victoriametrics/scrape_configs.go @@ -425,6 +425,9 @@ func scrapeConfigsForMongoDBExporter(params *scrapeConfigParams) ([]*config.Scra if !params.pmmAgentVersion.Less(version.MustParse("2.42.0-0")) { defaultCollectors = append(defaultCollectors, "currentopmetrics") } + if !params.pmmAgentVersion.Less(version.MustParse("2.43.0-0")) { + defaultCollectors = append(defaultCollectors, "pbm") + } lr, err := scrapeConfigForStandardExporter("lr", params.metricsResolution.LR, params, defaultCollectors) if err != nil { From 7c580b40518ddc4e9e9807cb35efcccb402680fe Mon Sep 17 00:00:00 2001 From: Nurlan Moldomurov Date: Tue, 27 Aug 2024 16:28:52 +0600 Subject: [PATCH 07/35] PMM-13288 Honour max-query-length parameter for pg_stat_statements. (#3119) Co-authored-by: Alex Demidoff --- .../agents/postgres/pgstatstatements/pgstatstatements.go | 9 +++++---- agent/agents/postgres/pgstatstatements/utils.go | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/agent/agents/postgres/pgstatstatements/pgstatstatements.go b/agent/agents/postgres/pgstatstatements/pgstatstatements.go index facecab62e..35b6df8845 100644 --- a/agent/agents/postgres/pgstatstatements/pgstatstatements.go +++ b/agent/agents/postgres/pgstatstatements/pgstatstatements.go @@ -287,7 +287,7 @@ func (m *PGStatStatementsQAN) getNewBuckets(ctx context.Context, periodStart tim return nil, err } - buckets := makeBuckets(current, prev, m.disableCommentsParsing, m.l) + buckets := m.makeBuckets(current, prev) startS := uint32(periodStart.Unix()) m.l.Debugf("Made %d buckets out of %d stat statements in %s+%d interval.", len(buckets), len(current), periodStart.Format("15:04:05"), periodLengthSecs) @@ -312,8 +312,9 @@ func (m *PGStatStatementsQAN) getNewBuckets(ctx context.Context, periodStart tim // makeBuckets uses current state of pg_stat_statements table and accumulated previous state // to make metrics buckets. It's a pure function for easier testing. -func makeBuckets(current, prev statementsMap, disableCommentsParsing bool, l *logrus.Entry) []*agentpb.MetricsBucket { +func (m *PGStatStatementsQAN) makeBuckets(current, prev statementsMap) []*agentpb.MetricsBucket { res := make([]*agentpb.MetricsBucket, 0, len(current)) + l := m.l for queryID, currentPSS := range current { prevPSS := prev[queryID] @@ -339,10 +340,10 @@ func makeBuckets(current, prev statementsMap, disableCommentsParsing bool, l *lo } if len(currentPSS.Tables) == 0 { - currentPSS.Tables = extractTables(currentPSS.Query, l) + currentPSS.Tables = extractTables(currentPSS.Query, m.maxQueryLength, l) } - if !disableCommentsParsing { + if !m.disableCommentsParsing { comments, err := queryparser.PostgreSQLComments(currentPSS.Query) if err != nil { l.Errorf("failed to parse comments for query: %s", currentPSS.Query) diff --git a/agent/agents/postgres/pgstatstatements/utils.go b/agent/agents/postgres/pgstatstatements/utils.go index 7c175d9547..0f739df4bf 100644 --- a/agent/agents/postgres/pgstatstatements/utils.go +++ b/agent/agents/postgres/pgstatstatements/utils.go @@ -72,9 +72,9 @@ func queryUsernames(q *reform.Querier) map[int64]string { return res } -func extractTables(query string, l *logrus.Entry) []string { +func extractTables(query string, maxQueryLength int32, l *logrus.Entry) []string { start := time.Now() - t, _ := truncate.Query(query, truncate.GetDefaultMaxQueryLength()) + t, _ := truncate.Query(query, maxQueryLength) tables, err := parser.ExtractTables(query) if err != nil { // log full query and error stack on debug level or more From 070cc40e376a3ce0d81107144bc61c26906be794 Mon Sep 17 00:00:00 2001 From: GuanqunYang193 <144971563+GuanqunYang193@users.noreply.github.com> Date: Tue, 27 Aug 2024 08:45:13 -0400 Subject: [PATCH 08/35] PMM-13292 Add INITIALIZATION_ERROR statue for process initialization failure (#2935) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add process init fail status * minor fix * fixed the test * lint and add timer * lint * lint --------- Co-authored-by: Jiří Čtvrtka <62988319+JiriCtvrtka@users.noreply.github.com> Co-authored-by: Roman Novikov Co-authored-by: Nurlan Moldomurov Co-authored-by: Alex Demidoff --- agent/agents/process/process.go | 55 +++-- agent/agents/process/process_test.go | 25 +-- agent/agents/supervisor/supervisor.go | 52 +++-- agent/agents/supervisor/supervisor_test.go | 58 +++++- api/agentlocalpb/json/agentlocalpb.json | 6 +- .../client/agent_local/status2_responses.go | 10 +- .../client/agent_local/status_responses.go | 10 +- api/inventorypb/agent_status.dot | 5 +- api/inventorypb/agent_status.pb.go | 44 ++-- api/inventorypb/agent_status.proto | 4 +- .../add_azure_database_exporter_responses.go | 10 +- .../agents/add_mongo_db_exporter_responses.go | 10 +- .../add_my_s_q_ld_exporter_responses.go | 10 +- .../agents/add_node_exporter_responses.go | 10 +- .../agents/add_postgres_exporter_responses.go | 10 +- .../add_proxy_sql_exporter_responses.go | 10 +- ...d_qan_mongo_db_profiler_agent_responses.go | 10 +- ..._qan_my_sql_perf_schema_agent_responses.go | 10 +- .../add_qan_my_sql_slowlog_agent_responses.go | 10 +- ...gre_sql_pg_stat_monitor_agent_responses.go | 10 +- ...stgre_sql_pg_statements_agent_responses.go | 10 +- .../agents/add_rds_exporter_responses.go | 10 +- ...hange_azure_database_exporter_responses.go | 10 +- .../change_mongo_db_exporter_responses.go | 10 +- .../change_my_s_q_ld_exporter_responses.go | 10 +- .../agents/change_node_exporter_responses.go | 10 +- .../change_postgres_exporter_responses.go | 10 +- .../change_proxy_sql_exporter_responses.go | 10 +- ...e_qan_mongo_db_profiler_agent_responses.go | 10 +- ..._qan_my_sql_perf_schema_agent_responses.go | 10 +- ...ange_qan_my_sql_slowlog_agent_responses.go | 10 +- ...gre_sql_pg_stat_monitor_agent_responses.go | 10 +- ...stgre_sql_pg_statements_agent_responses.go | 10 +- .../agents/change_rds_exporter_responses.go | 10 +- .../json/client/agents/get_agent_responses.go | 130 ++++++++---- .../client/agents/list_agents_responses.go | 130 ++++++++---- api/inventorypb/json/inventorypb.json | 150 +++++++++----- .../client/mongo_db/add_mongo_db_responses.go | 20 +- .../client/my_sql/add_my_sql_responses.go | 30 ++- .../postgre_sql/add_postgre_sql_responses.go | 30 ++- .../proxy_sql/add_proxy_sql_responses.go | 10 +- .../json/client/rds/add_rds_responses.go | 50 +++-- api/managementpb/json/managementpb.json | 42 ++-- api/swagger/swagger-dev.json | 192 ++++++++++++------ api/swagger/swagger.json | 192 ++++++++++++------ 45 files changed, 1016 insertions(+), 469 deletions(-) diff --git a/agent/agents/process/process.go b/agent/agents/process/process.go index 2ebddccf13..631e18b606 100644 --- a/agent/agents/process/process.go +++ b/agent/agents/process/process.go @@ -22,6 +22,7 @@ import ( "strings" "time" + "github.com/pkg/errors" "github.com/sirupsen/logrus" "golang.org/x/sys/unix" @@ -53,12 +54,14 @@ const ( // implements its own logic, and then switches to then next state via "go toXXX()". "go" statement is used // only to avoid stack overflow; there are no extra goroutines for states. type Process struct { - params *Params - l *logrus.Entry - pl *processLogger - changes chan inventorypb.AgentStatus - backoff *backoff.Backoff - ctxDone chan struct{} + params *Params + l *logrus.Entry + pl *processLogger + changes chan inventorypb.AgentStatus + backoff *backoff.Backoff + ctxDone chan struct{} + err error + initialized chan bool // recreated on each restart cmd *exec.Cmd @@ -88,15 +91,26 @@ func (p *Params) String() string { // New creates new process. func New(params *Params, redactWords []string, l *logrus.Entry) *Process { return &Process{ - params: params, - l: l, - pl: newProcessLogger(l, keepLogLines, redactWords), - changes: make(chan inventorypb.AgentStatus, 10), - backoff: backoff.New(backoffMinDelay, backoffMaxDelay), - ctxDone: make(chan struct{}), + params: params, + l: l, + pl: newProcessLogger(l, keepLogLines, redactWords), + changes: make(chan inventorypb.AgentStatus, 10), + backoff: backoff.New(backoffMinDelay, backoffMaxDelay), + ctxDone: make(chan struct{}), + initialized: make(chan bool, 1), } } +// IsInitialized returns a chan of bool. True can be received if the process is initialized. +func (p *Process) IsInitialized() <-chan bool { + return p.initialized +} + +// GetError returns the error thrown when initializing the process. +func (p *Process) GetError() error { + return p.err +} + // Run starts process and runs until ctx is canceled. func (p *Process) Run(ctx context.Context) { go p.toStarting() @@ -107,7 +121,7 @@ func (p *Process) Run(ctx context.Context) { } // STARTING -> RUNNING. -// STARTING -> WAITING. +// STARTING -> FAILING. func (p *Process) toStarting() { p.l.Tracef("Process: starting.") p.changes <- inventorypb.AgentStatus_STARTING @@ -128,7 +142,7 @@ func (p *Process) toStarting() { if err := p.cmd.Start(); err != nil { p.l.Warnf("Process: failed to start: %s.", err) - go p.toWaiting() + go p.toFailing(err) return } @@ -142,10 +156,11 @@ func (p *Process) toStarting() { defer t.Stop() select { case <-t.C: + p.initialized <- true go p.toRunning() case <-p.cmdDone: p.l.Warnf("Process: exited early: %s.", p.cmd.ProcessState) - go p.toWaiting() + go p.toFailing(errors.New("exited early")) } } @@ -192,6 +207,16 @@ func (p *Process) toWaiting() { } } +// FAILING -> DONE. +func (p *Process) toFailing(err error) { + p.l.Tracef("Process: failing") + p.changes <- inventorypb.AgentStatus_INITIALIZATION_ERROR + p.l.Infof("Process: exited: %s.", p.cmd.ProcessState) + go p.toDone() + p.err = err + p.initialized <- false +} + // STOPPING -> DONE. func (p *Process) toStopping() { p.l.Tracef("Process: stopping (sending SIGTERM)...") diff --git a/agent/agents/process/process_test.go b/agent/agents/process/process_test.go index d40d555e24..7ab30eae16 100644 --- a/agent/agents/process/process_test.go +++ b/agent/agents/process/process_test.go @@ -80,35 +80,22 @@ func TestProcess(t *testing.T) { }) t.Run("FailedToStart", func(t *testing.T) { - ctx, cancel, l := setup(t) + ctx, _, l := setup(t) p := New(&Params{Path: "no_such_command"}, nil, l) go p.Run(ctx) - assertStates(t, p, inventorypb.AgentStatus_STARTING, inventorypb.AgentStatus_WAITING, inventorypb.AgentStatus_STARTING, inventorypb.AgentStatus_WAITING) - cancel() - assertStates(t, p, inventorypb.AgentStatus_DONE, inventorypb.AgentStatus_AGENT_STATUS_INVALID) + assertStates(t, p, inventorypb.AgentStatus_STARTING, inventorypb.AgentStatus_INITIALIZATION_ERROR, + inventorypb.AgentStatus_DONE, inventorypb.AgentStatus_AGENT_STATUS_INVALID) }) t.Run("ExitedEarly", func(t *testing.T) { sleep := strconv.FormatFloat(runningT.Seconds()-0.5, 'f', -1, 64) - ctx, cancel, l := setup(t) - p := New(&Params{Path: "sleep", Args: []string{sleep}}, nil, l) - go p.Run(ctx) - - assertStates(t, p, inventorypb.AgentStatus_STARTING, inventorypb.AgentStatus_WAITING, inventorypb.AgentStatus_STARTING, inventorypb.AgentStatus_WAITING) - cancel() - assertStates(t, p, inventorypb.AgentStatus_DONE, inventorypb.AgentStatus_AGENT_STATUS_INVALID) - }) - - t.Run("CancelStarting", func(t *testing.T) { - sleep := strconv.FormatFloat(runningT.Seconds()-0.5, 'f', -1, 64) - ctx, cancel, l := setup(t) + ctx, _, l := setup(t) p := New(&Params{Path: "sleep", Args: []string{sleep}}, nil, l) go p.Run(ctx) - assertStates(t, p, inventorypb.AgentStatus_STARTING, inventorypb.AgentStatus_WAITING, inventorypb.AgentStatus_STARTING) - cancel() - assertStates(t, p, inventorypb.AgentStatus_WAITING, inventorypb.AgentStatus_DONE, inventorypb.AgentStatus_AGENT_STATUS_INVALID) + assertStates(t, p, inventorypb.AgentStatus_STARTING, inventorypb.AgentStatus_INITIALIZATION_ERROR, + inventorypb.AgentStatus_DONE, inventorypb.AgentStatus_AGENT_STATUS_INVALID) }) t.Run("Exited", func(t *testing.T) { diff --git a/agent/agents/supervisor/supervisor.go b/agent/agents/supervisor/supervisor.go index e39a833126..c0b0a9d7f2 100644 --- a/agent/agents/supervisor/supervisor.go +++ b/agent/agents/supervisor/supervisor.go @@ -25,6 +25,7 @@ import ( "sort" "strings" "sync" + "time" "github.com/pkg/errors" "github.com/prometheus/client_golang/prometheus" @@ -237,7 +238,7 @@ func (s *Supervisor) RestartAgents() { agent.cancel() <-agent.done - if err := s.startProcess(id, agent.requestedState, agent.listenPort); err != nil { + if err := s.tryStartProcess(id, agent.requestedState, agent.listenPort); err != nil { s.l.Errorf("Failed to restart Agent: %s.", err) } } @@ -310,7 +311,7 @@ func (s *Supervisor) setAgentProcesses(agentProcesses map[string]*agentpb.SetSta agent.cancel() <-agent.done - if err := s.startProcess(agentID, agentProcesses[agentID], agent.listenPort); err != nil { + if err := s.tryStartProcess(agentID, agentProcesses[agentID], agent.listenPort); err != nil { s.l.Errorf("Failed to start Agent: %s.", err) // TODO report that error to server } @@ -318,14 +319,7 @@ func (s *Supervisor) setAgentProcesses(agentProcesses map[string]*agentpb.SetSta // start new agents for _, agentID := range toStart { - port, err := s.portsRegistry.Reserve() - if err != nil { - s.l.Errorf("Failed to reserve port: %s.", err) - // TODO report that error to server - continue - } - - if err := s.startProcess(agentID, agentProcesses[agentID], port); err != nil { + if err := s.tryStartProcess(agentID, agentProcesses[agentID], 0); err != nil { s.l.Errorf("Failed to start Agent: %s.", err) // TODO report that error to server } @@ -427,10 +421,33 @@ func filter(existing, ap map[string]agentpb.AgentParams) ([]string, []string, [] //nolint:golint,stylecheck,revive const ( - type_TEST_SLEEP inventorypb.AgentType = 998 // process - type_TEST_NOOP inventorypb.AgentType = 999 // built-in + type_TEST_SLEEP inventorypb.AgentType = 998 // process + type_TEST_NOOP inventorypb.AgentType = 999 // built-in + process_Retry_Time int = 3 + start_Process_Waiting = 2 * time.Second ) +func (s *Supervisor) tryStartProcess(agentID string, agentProcess *agentpb.SetStateRequest_AgentProcess, port uint16) error { + var err error + for i := 0; i < process_Retry_Time; i++ { + if port == 0 { + _port, err := s.portsRegistry.Reserve() + if err != nil { + s.l.Errorf("Failed to reserve port: %s.", err) + continue + } + port = _port + } + + if err = s.startProcess(agentID, agentProcess, port); err == nil { + return nil + } + + port = 0 + } + return err +} + // startProcess starts Agent's process. // Must be called with s.rw held for writing. func (s *Supervisor) startProcess(agentID string, agentProcess *agentpb.SetStateRequest_AgentProcess, port uint16) error { @@ -473,6 +490,17 @@ func (s *Supervisor) startProcess(agentID string, agentProcess *agentpb.SetState close(done) }() + t := time.NewTimer(start_Process_Waiting) + defer t.Stop() + select { + case isInitialized := <-process.IsInitialized(): + if !isInitialized { + defer cancel() + return process.GetError() + } + case <-t.C: + } + //nolint:forcetypeassert s.agentProcesses[agentID] = &agentProcessInfo{ cancel: cancel, diff --git a/agent/agents/supervisor/supervisor_test.go b/agent/agents/supervisor/supervisor_test.go index 5811e34504..4df5188813 100644 --- a/agent/agents/supervisor/supervisor_test.go +++ b/agent/agents/supervisor/supervisor_test.go @@ -73,16 +73,16 @@ func TestSupervisor(t *testing.T) { assertChanges(t, s, &agentpb.StateChangedRequest{AgentId: "noop3", Status: inventorypb.AgentStatus_STARTING}, - &agentpb.StateChangedRequest{AgentId: "sleep1", Status: inventorypb.AgentStatus_STARTING, ListenPort: 65000, ProcessExecPath: "sleep"}) + &agentpb.StateChangedRequest{AgentId: "sleep1", Status: inventorypb.AgentStatus_STARTING, ListenPort: 65000, ProcessExecPath: "sleep"}, + &agentpb.StateChangedRequest{AgentId: "sleep1", Status: inventorypb.AgentStatus_RUNNING, ListenPort: 65000, ProcessExecPath: "sleep"}) expectedList = []*agentlocalpb.AgentInfo{ {AgentType: type_TEST_NOOP, AgentId: "noop3", Status: inventorypb.AgentStatus_STARTING}, - {AgentType: type_TEST_SLEEP, AgentId: "sleep1", Status: inventorypb.AgentStatus_STARTING, ListenPort: 65000, ProcessExecPath: "sleep"}, + {AgentType: type_TEST_SLEEP, AgentId: "sleep1", Status: inventorypb.AgentStatus_RUNNING, ListenPort: 65000, ProcessExecPath: "sleep"}, } assert.Equal(t, expectedList, s.AgentsList()) assertChanges(t, s, - &agentpb.StateChangedRequest{AgentId: "noop3", Status: inventorypb.AgentStatus_RUNNING}, - &agentpb.StateChangedRequest{AgentId: "sleep1", Status: inventorypb.AgentStatus_RUNNING, ListenPort: 65000, ProcessExecPath: "sleep"}) + &agentpb.StateChangedRequest{AgentId: "noop3", Status: inventorypb.AgentStatus_RUNNING}) expectedList = []*agentlocalpb.AgentInfo{ {AgentType: type_TEST_NOOP, AgentId: "noop3", Status: inventorypb.AgentStatus_RUNNING}, {AgentType: type_TEST_SLEEP, AgentId: "sleep1", Status: inventorypb.AgentStatus_RUNNING, ListenPort: 65000, ProcessExecPath: "sleep"}, @@ -114,17 +114,17 @@ func TestSupervisor(t *testing.T) { assertChanges(t, s, &agentpb.StateChangedRequest{AgentId: "sleep1", Status: inventorypb.AgentStatus_STARTING, ListenPort: 65000, ProcessExecPath: "sleep"}, - &agentpb.StateChangedRequest{AgentId: "sleep2", Status: inventorypb.AgentStatus_STARTING, ListenPort: 65001, ProcessExecPath: "sleep"}) + &agentpb.StateChangedRequest{AgentId: "sleep1", Status: inventorypb.AgentStatus_RUNNING, ListenPort: 65000, ProcessExecPath: "sleep"}, + &agentpb.StateChangedRequest{AgentId: "sleep2", Status: inventorypb.AgentStatus_STARTING, ListenPort: 65001, ProcessExecPath: "sleep"}, + &agentpb.StateChangedRequest{AgentId: "sleep2", Status: inventorypb.AgentStatus_RUNNING, ListenPort: 65001, ProcessExecPath: "sleep"}, + ) expectedList = []*agentlocalpb.AgentInfo{ {AgentType: type_TEST_NOOP, AgentId: "noop3", Status: inventorypb.AgentStatus_RUNNING}, - {AgentType: type_TEST_SLEEP, AgentId: "sleep1", Status: inventorypb.AgentStatus_STARTING, ListenPort: 65000, ProcessExecPath: "sleep"}, - {AgentType: type_TEST_SLEEP, AgentId: "sleep2", Status: inventorypb.AgentStatus_STARTING, ListenPort: 65001, ProcessExecPath: "sleep"}, + {AgentType: type_TEST_SLEEP, AgentId: "sleep1", Status: inventorypb.AgentStatus_RUNNING, ListenPort: 65000, ProcessExecPath: "sleep"}, + {AgentType: type_TEST_SLEEP, AgentId: "sleep2", Status: inventorypb.AgentStatus_RUNNING, ListenPort: 65001, ProcessExecPath: "sleep"}, } assert.Equal(t, expectedList, s.AgentsList()) - assertChanges(t, s, - &agentpb.StateChangedRequest{AgentId: "sleep1", Status: inventorypb.AgentStatus_RUNNING, ListenPort: 65000, ProcessExecPath: "sleep"}, - &agentpb.StateChangedRequest{AgentId: "sleep2", Status: inventorypb.AgentStatus_RUNNING, ListenPort: 65001, ProcessExecPath: "sleep"}) expectedList = []*agentlocalpb.AgentInfo{ {AgentType: type_TEST_NOOP, AgentId: "noop3", Status: inventorypb.AgentStatus_RUNNING}, {AgentType: type_TEST_SLEEP, AgentId: "sleep1", Status: inventorypb.AgentStatus_RUNNING, ListenPort: 65000, ProcessExecPath: "sleep"}, @@ -259,6 +259,44 @@ func TestSupervisor(t *testing.T) { }) } +func TestStartProcessFail(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + tempDir := t.TempDir() + cfgStorage := config.NewStorage(&config.Config{ + Paths: config.Paths{TempDir: tempDir}, + Ports: config.Ports{Min: 65000, Max: 65099}, + Server: config.Server{Address: "localhost:443"}, + LogLinesCount: 1, + }) + s := NewSupervisor(ctx, nil, cfgStorage) + go s.Run(ctx) + + t.Run("Start", func(t *testing.T) { + expectedList := []*agentlocalpb.AgentInfo{} + require.Equal(t, expectedList, s.AgentsList()) + + s.SetState(&agentpb.SetStateRequest{ + AgentProcesses: map[string]*agentpb.SetStateRequest_AgentProcess{ + "sleep1": {Type: type_TEST_SLEEP, Args: []string{"wrong format"}}, + }, + }) + + assertChanges(t, s, + &agentpb.StateChangedRequest{AgentId: "sleep1", Status: inventorypb.AgentStatus_STARTING, ListenPort: 65000, ProcessExecPath: "sleep"}, + &agentpb.StateChangedRequest{AgentId: "sleep1", Status: inventorypb.AgentStatus_INITIALIZATION_ERROR, ListenPort: 65000, ProcessExecPath: "sleep"}, + &agentpb.StateChangedRequest{AgentId: "sleep1", Status: inventorypb.AgentStatus_DONE, ListenPort: 65000, ProcessExecPath: "sleep"}, + &agentpb.StateChangedRequest{AgentId: "sleep1", Status: inventorypb.AgentStatus_STARTING, ListenPort: 65001, ProcessExecPath: "sleep"}, + &agentpb.StateChangedRequest{AgentId: "sleep1", Status: inventorypb.AgentStatus_INITIALIZATION_ERROR, ListenPort: 65001, ProcessExecPath: "sleep"}, + &agentpb.StateChangedRequest{AgentId: "sleep1", Status: inventorypb.AgentStatus_DONE, ListenPort: 65001, ProcessExecPath: "sleep"}, + &agentpb.StateChangedRequest{AgentId: "sleep1", Status: inventorypb.AgentStatus_STARTING, ListenPort: 65002, ProcessExecPath: "sleep"}, + &agentpb.StateChangedRequest{AgentId: "sleep1", Status: inventorypb.AgentStatus_INITIALIZATION_ERROR, ListenPort: 65002, ProcessExecPath: "sleep"}, + &agentpb.StateChangedRequest{AgentId: "sleep1", Status: inventorypb.AgentStatus_DONE, ListenPort: 65002, ProcessExecPath: "sleep"}) + expectedList = []*agentlocalpb.AgentInfo{} + require.Equal(t, expectedList, s.AgentsList()) + }) +} + func TestFilter(t *testing.T) { t.Parallel() diff --git a/api/agentlocalpb/json/agentlocalpb.json b/api/agentlocalpb/json/agentlocalpb.json index fc191da275..6d5dc8ba61 100644 --- a/api/agentlocalpb/json/agentlocalpb.json +++ b/api/agentlocalpb/json/agentlocalpb.json @@ -149,12 +149,13 @@ "x-order": 4 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -342,12 +343,13 @@ "x-order": 4 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", diff --git a/api/agentlocalpb/json/client/agent_local/status2_responses.go b/api/agentlocalpb/json/client/agent_local/status2_responses.go index e4b3cec66a..a38d6a81be 100644 --- a/api/agentlocalpb/json/client/agent_local/status2_responses.go +++ b/api/agentlocalpb/json/client/agent_local/status2_responses.go @@ -437,12 +437,13 @@ type Status2OKBodyAgentsInfoItems0 struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // The current listen port of this Agent (exporter or vmagent). @@ -559,7 +560,7 @@ var status2OkBodyAgentsInfoItems0TypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -575,6 +576,9 @@ const ( // Status2OKBodyAgentsInfoItems0StatusSTARTING captures enum value "STARTING" Status2OKBodyAgentsInfoItems0StatusSTARTING string = "STARTING" + // Status2OKBodyAgentsInfoItems0StatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + Status2OKBodyAgentsInfoItems0StatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // Status2OKBodyAgentsInfoItems0StatusRUNNING captures enum value "RUNNING" Status2OKBodyAgentsInfoItems0StatusRUNNING string = "RUNNING" diff --git a/api/agentlocalpb/json/client/agent_local/status_responses.go b/api/agentlocalpb/json/client/agent_local/status_responses.go index fa69048f34..0b2e9de5ca 100644 --- a/api/agentlocalpb/json/client/agent_local/status_responses.go +++ b/api/agentlocalpb/json/client/agent_local/status_responses.go @@ -474,12 +474,13 @@ type StatusOKBodyAgentsInfoItems0 struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // The current listen port of this Agent (exporter or vmagent). @@ -596,7 +597,7 @@ var statusOkBodyAgentsInfoItems0TypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -612,6 +613,9 @@ const ( // StatusOKBodyAgentsInfoItems0StatusSTARTING captures enum value "STARTING" StatusOKBodyAgentsInfoItems0StatusSTARTING string = "STARTING" + // StatusOKBodyAgentsInfoItems0StatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + StatusOKBodyAgentsInfoItems0StatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // StatusOKBodyAgentsInfoItems0StatusRUNNING captures enum value "RUNNING" StatusOKBodyAgentsInfoItems0StatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/agent_status.dot b/api/inventorypb/agent_status.dot index 820d1a368d..5b9e21bdce 100644 --- a/api/inventorypb/agent_status.dot +++ b/api/inventorypb/agent_status.dot @@ -9,7 +9,7 @@ digraph { UNKNOWN [fillcolor=yellow]; STARTING -> RUNNING; - STARTING -> WAITING; + STARTING -> FAILING; STARTING -> UNKNOWN; [style=dotted] RUNNING -> STOPPING; @@ -20,6 +20,9 @@ digraph { WAITING -> DONE; WAITING -> UNKNOWN; [style=dotted] + FAILING -> DONE; + FAILING -> UNKNOWN; [style=dotted] + STOPPING -> DONE; STOPPING -> UNKNOWN; [style=dotted] diff --git a/api/inventorypb/agent_status.pb.go b/api/inventorypb/agent_status.pb.go index 85e1bc7bd9..5635f48d1b 100644 --- a/api/inventorypb/agent_status.pb.go +++ b/api/inventorypb/agent_status.pb.go @@ -28,9 +28,11 @@ const ( AgentStatus_AGENT_STATUS_INVALID AgentStatus = 0 // Agent is starting. AgentStatus_STARTING AgentStatus = 1 + // Agent encountered error when starting. + AgentStatus_INITIALIZATION_ERROR AgentStatus = 7 // Agent is running. AgentStatus_RUNNING AgentStatus = 2 - // Agent encountered error and will be restarted automatically soon. + // Agent encountered error when running and will be restarted automatically soon. AgentStatus_WAITING AgentStatus = 3 // Agent is stopping. AgentStatus_STOPPING AgentStatus = 4 @@ -45,6 +47,7 @@ var ( AgentStatus_name = map[int32]string{ 0: "AGENT_STATUS_INVALID", 1: "STARTING", + 7: "INITIALIZATION_ERROR", 2: "RUNNING", 3: "WAITING", 4: "STOPPING", @@ -54,6 +57,7 @@ var ( AgentStatus_value = map[string]int32{ "AGENT_STATUS_INVALID": 0, "STARTING": 1, + "INITIALIZATION_ERROR": 7, "RUNNING": 2, "WAITING": 3, "STOPPING": 4, @@ -94,24 +98,26 @@ var File_inventorypb_agent_status_proto protoreflect.FileDescriptor var file_inventorypb_agent_status_proto_rawDesc = []byte{ 0x0a, 0x1e, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x70, 0x62, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x2a, 0x74, 0x0a, 0x0b, 0x41, - 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x47, - 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, - 0x49, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, - 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, - 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x49, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, - 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x4f, - 0x4e, 0x45, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, - 0x06, 0x42, 0x8d, 0x01, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, - 0x6f, 0x72, 0x79, 0x42, 0x10, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x70, 0x62, 0xa2, - 0x02, 0x03, 0x49, 0x58, 0x58, 0xaa, 0x02, 0x09, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, - 0x79, 0xca, 0x02, 0x09, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0xe2, 0x02, 0x15, - 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, - 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x12, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x2a, 0x8e, 0x01, 0x0a, 0x0b, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x14, 0x41, + 0x47, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x56, 0x41, + 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, + 0x47, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x07, 0x12, 0x0b, 0x0a, + 0x07, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, + 0x49, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, + 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x4f, 0x4e, 0x45, 0x10, 0x05, 0x12, + 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x06, 0x42, 0x8d, 0x01, 0x0a, + 0x0d, 0x63, 0x6f, 0x6d, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x10, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, + 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x69, + 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x70, 0x62, 0xa2, 0x02, 0x03, 0x49, 0x58, 0x58, + 0xaa, 0x02, 0x09, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0xca, 0x02, 0x09, 0x49, + 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0xe2, 0x02, 0x15, 0x49, 0x6e, 0x76, 0x65, 0x6e, + 0x74, 0x6f, 0x72, 0x79, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0xea, 0x02, 0x09, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/api/inventorypb/agent_status.proto b/api/inventorypb/agent_status.proto index cc4c4751e7..259c100877 100644 --- a/api/inventorypb/agent_status.proto +++ b/api/inventorypb/agent_status.proto @@ -9,9 +9,11 @@ enum AgentStatus { AGENT_STATUS_INVALID = 0; // Agent is starting. STARTING = 1; + // Agent encountered error when starting. + INITIALIZATION_ERROR = 7; // Agent is running. RUNNING = 2; - // Agent encountered error and will be restarted automatically soon. + // Agent encountered error when running and will be restarted automatically soon. WAITING = 3; // Agent is stopping. STOPPING = 4; diff --git a/api/inventorypb/json/client/agents/add_azure_database_exporter_responses.go b/api/inventorypb/json/client/agents/add_azure_database_exporter_responses.go index 8b53ba84c9..b59ea768da 100644 --- a/api/inventorypb/json/client/agents/add_azure_database_exporter_responses.go +++ b/api/inventorypb/json/client/agents/add_azure_database_exporter_responses.go @@ -515,12 +515,13 @@ type AddAzureDatabaseExporterOKBodyAzureDatabaseExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics (the same for several configurations). @@ -566,7 +567,7 @@ var addAzureDatabaseExporterOkBodyAzureDatabaseExporterTypeStatusPropEnum []inte func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -582,6 +583,9 @@ const ( // AddAzureDatabaseExporterOKBodyAzureDatabaseExporterStatusSTARTING captures enum value "STARTING" AddAzureDatabaseExporterOKBodyAzureDatabaseExporterStatusSTARTING string = "STARTING" + // AddAzureDatabaseExporterOKBodyAzureDatabaseExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddAzureDatabaseExporterOKBodyAzureDatabaseExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddAzureDatabaseExporterOKBodyAzureDatabaseExporterStatusRUNNING captures enum value "RUNNING" AddAzureDatabaseExporterOKBodyAzureDatabaseExporterStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/add_mongo_db_exporter_responses.go b/api/inventorypb/json/client/agents/add_mongo_db_exporter_responses.go index 0d2ac71bdc..430310d073 100644 --- a/api/inventorypb/json/client/agents/add_mongo_db_exporter_responses.go +++ b/api/inventorypb/json/client/agents/add_mongo_db_exporter_responses.go @@ -551,12 +551,13 @@ type AddMongoDBExporterOKBodyMongodbExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -612,7 +613,7 @@ var addMongoDbExporterOkBodyMongodbExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -628,6 +629,9 @@ const ( // AddMongoDBExporterOKBodyMongodbExporterStatusSTARTING captures enum value "STARTING" AddMongoDBExporterOKBodyMongodbExporterStatusSTARTING string = "STARTING" + // AddMongoDBExporterOKBodyMongodbExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddMongoDBExporterOKBodyMongodbExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddMongoDBExporterOKBodyMongodbExporterStatusRUNNING captures enum value "RUNNING" AddMongoDBExporterOKBodyMongodbExporterStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/add_my_s_q_ld_exporter_responses.go b/api/inventorypb/json/client/agents/add_my_s_q_ld_exporter_responses.go index c7cca95742..67a5a21114 100644 --- a/api/inventorypb/json/client/agents/add_my_s_q_ld_exporter_responses.go +++ b/api/inventorypb/json/client/agents/add_my_s_q_ld_exporter_responses.go @@ -558,12 +558,13 @@ type AddMySQLdExporterOKBodyMysqldExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -612,7 +613,7 @@ var addMySQLdExporterOkBodyMysqldExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -628,6 +629,9 @@ const ( // AddMySQLdExporterOKBodyMysqldExporterStatusSTARTING captures enum value "STARTING" AddMySQLdExporterOKBodyMysqldExporterStatusSTARTING string = "STARTING" + // AddMySQLdExporterOKBodyMysqldExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddMySQLdExporterOKBodyMysqldExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddMySQLdExporterOKBodyMysqldExporterStatusRUNNING captures enum value "RUNNING" AddMySQLdExporterOKBodyMysqldExporterStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/add_node_exporter_responses.go b/api/inventorypb/json/client/agents/add_node_exporter_responses.go index 3997ae2ed3..7162d45d0e 100644 --- a/api/inventorypb/json/client/agents/add_node_exporter_responses.go +++ b/api/inventorypb/json/client/agents/add_node_exporter_responses.go @@ -494,12 +494,13 @@ type AddNodeExporterOKBodyNodeExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -545,7 +546,7 @@ var addNodeExporterOkBodyNodeExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -561,6 +562,9 @@ const ( // AddNodeExporterOKBodyNodeExporterStatusSTARTING captures enum value "STARTING" AddNodeExporterOKBodyNodeExporterStatusSTARTING string = "STARTING" + // AddNodeExporterOKBodyNodeExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddNodeExporterOKBodyNodeExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddNodeExporterOKBodyNodeExporterStatusRUNNING captures enum value "RUNNING" AddNodeExporterOKBodyNodeExporterStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/add_postgres_exporter_responses.go b/api/inventorypb/json/client/agents/add_postgres_exporter_responses.go index 9db1f37463..b346f1f742 100644 --- a/api/inventorypb/json/client/agents/add_postgres_exporter_responses.go +++ b/api/inventorypb/json/client/agents/add_postgres_exporter_responses.go @@ -540,12 +540,13 @@ type AddPostgresExporterOKBodyPostgresExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -597,7 +598,7 @@ var addPostgresExporterOkBodyPostgresExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -613,6 +614,9 @@ const ( // AddPostgresExporterOKBodyPostgresExporterStatusSTARTING captures enum value "STARTING" AddPostgresExporterOKBodyPostgresExporterStatusSTARTING string = "STARTING" + // AddPostgresExporterOKBodyPostgresExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddPostgresExporterOKBodyPostgresExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddPostgresExporterOKBodyPostgresExporterStatusRUNNING captures enum value "RUNNING" AddPostgresExporterOKBodyPostgresExporterStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/add_proxy_sql_exporter_responses.go b/api/inventorypb/json/client/agents/add_proxy_sql_exporter_responses.go index 9cda125580..75f36349ec 100644 --- a/api/inventorypb/json/client/agents/add_proxy_sql_exporter_responses.go +++ b/api/inventorypb/json/client/agents/add_proxy_sql_exporter_responses.go @@ -527,12 +527,13 @@ type AddProxySQLExporterOKBodyProxysqlExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -578,7 +579,7 @@ var addProxySqlExporterOkBodyProxysqlExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -594,6 +595,9 @@ const ( // AddProxySQLExporterOKBodyProxysqlExporterStatusSTARTING captures enum value "STARTING" AddProxySQLExporterOKBodyProxysqlExporterStatusSTARTING string = "STARTING" + // AddProxySQLExporterOKBodyProxysqlExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddProxySQLExporterOKBodyProxysqlExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddProxySQLExporterOKBodyProxysqlExporterStatusRUNNING captures enum value "RUNNING" AddProxySQLExporterOKBodyProxysqlExporterStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/add_qan_mongo_db_profiler_agent_responses.go b/api/inventorypb/json/client/agents/add_qan_mongo_db_profiler_agent_responses.go index a5b6eaaf09..35b1fc2335 100644 --- a/api/inventorypb/json/client/agents/add_qan_mongo_db_profiler_agent_responses.go +++ b/api/inventorypb/json/client/agents/add_qan_mongo_db_profiler_agent_responses.go @@ -535,12 +535,13 @@ type AddQANMongoDBProfilerAgentOKBodyQANMongodbProfilerAgent struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -573,7 +574,7 @@ var addQanMongoDbProfilerAgentOkBodyQanMongodbProfilerAgentTypeStatusPropEnum [] func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -589,6 +590,9 @@ const ( // AddQANMongoDBProfilerAgentOKBodyQANMongodbProfilerAgentStatusSTARTING captures enum value "STARTING" AddQANMongoDBProfilerAgentOKBodyQANMongodbProfilerAgentStatusSTARTING string = "STARTING" + // AddQANMongoDBProfilerAgentOKBodyQANMongodbProfilerAgentStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddQANMongoDBProfilerAgentOKBodyQANMongodbProfilerAgentStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddQANMongoDBProfilerAgentOKBodyQANMongodbProfilerAgentStatusRUNNING captures enum value "RUNNING" AddQANMongoDBProfilerAgentOKBodyQANMongodbProfilerAgentStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/add_qan_my_sql_perf_schema_agent_responses.go b/api/inventorypb/json/client/agents/add_qan_my_sql_perf_schema_agent_responses.go index 616f0634cc..9f26de01b9 100644 --- a/api/inventorypb/json/client/agents/add_qan_my_sql_perf_schema_agent_responses.go +++ b/api/inventorypb/json/client/agents/add_qan_my_sql_perf_schema_agent_responses.go @@ -545,12 +545,13 @@ type AddQANMySQLPerfSchemaAgentOKBodyQANMysqlPerfschemaAgent struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -583,7 +584,7 @@ var addQanMySqlPerfSchemaAgentOkBodyQanMysqlPerfschemaAgentTypeStatusPropEnum [] func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -599,6 +600,9 @@ const ( // AddQANMySQLPerfSchemaAgentOKBodyQANMysqlPerfschemaAgentStatusSTARTING captures enum value "STARTING" AddQANMySQLPerfSchemaAgentOKBodyQANMysqlPerfschemaAgentStatusSTARTING string = "STARTING" + // AddQANMySQLPerfSchemaAgentOKBodyQANMysqlPerfschemaAgentStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddQANMySQLPerfSchemaAgentOKBodyQANMysqlPerfschemaAgentStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddQANMySQLPerfSchemaAgentOKBodyQANMysqlPerfschemaAgentStatusRUNNING captures enum value "RUNNING" AddQANMySQLPerfSchemaAgentOKBodyQANMysqlPerfschemaAgentStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/add_qan_my_sql_slowlog_agent_responses.go b/api/inventorypb/json/client/agents/add_qan_my_sql_slowlog_agent_responses.go index fa9cbc2800..7b0735fdf8 100644 --- a/api/inventorypb/json/client/agents/add_qan_my_sql_slowlog_agent_responses.go +++ b/api/inventorypb/json/client/agents/add_qan_my_sql_slowlog_agent_responses.go @@ -552,12 +552,13 @@ type AddQANMySQLSlowlogAgentOKBodyQANMysqlSlowlogAgent struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // mod tidy @@ -590,7 +591,7 @@ var addQanMySqlSlowlogAgentOkBodyQanMysqlSlowlogAgentTypeStatusPropEnum []interf func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -606,6 +607,9 @@ const ( // AddQANMySQLSlowlogAgentOKBodyQANMysqlSlowlogAgentStatusSTARTING captures enum value "STARTING" AddQANMySQLSlowlogAgentOKBodyQANMysqlSlowlogAgentStatusSTARTING string = "STARTING" + // AddQANMySQLSlowlogAgentOKBodyQANMysqlSlowlogAgentStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddQANMySQLSlowlogAgentOKBodyQANMysqlSlowlogAgentStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddQANMySQLSlowlogAgentOKBodyQANMysqlSlowlogAgentStatusRUNNING captures enum value "RUNNING" AddQANMySQLSlowlogAgentOKBodyQANMysqlSlowlogAgentStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/add_qan_postgre_sql_pg_stat_monitor_agent_responses.go b/api/inventorypb/json/client/agents/add_qan_postgre_sql_pg_stat_monitor_agent_responses.go index 8ccbf4e307..dd8d12ce23 100644 --- a/api/inventorypb/json/client/agents/add_qan_postgre_sql_pg_stat_monitor_agent_responses.go +++ b/api/inventorypb/json/client/agents/add_qan_postgre_sql_pg_stat_monitor_agent_responses.go @@ -536,12 +536,13 @@ type AddQANPostgreSQLPgStatMonitorAgentOKBodyQANPostgresqlPgstatmonitorAgent str // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -574,7 +575,7 @@ var addQanPostgreSqlPgStatMonitorAgentOkBodyQanPostgresqlPgstatmonitorAgentTypeS func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -590,6 +591,9 @@ const ( // AddQANPostgreSQLPgStatMonitorAgentOKBodyQANPostgresqlPgstatmonitorAgentStatusSTARTING captures enum value "STARTING" AddQANPostgreSQLPgStatMonitorAgentOKBodyQANPostgresqlPgstatmonitorAgentStatusSTARTING string = "STARTING" + // AddQANPostgreSQLPgStatMonitorAgentOKBodyQANPostgresqlPgstatmonitorAgentStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddQANPostgreSQLPgStatMonitorAgentOKBodyQANPostgresqlPgstatmonitorAgentStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddQANPostgreSQLPgStatMonitorAgentOKBodyQANPostgresqlPgstatmonitorAgentStatusRUNNING captures enum value "RUNNING" AddQANPostgreSQLPgStatMonitorAgentOKBodyQANPostgresqlPgstatmonitorAgentStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/add_qan_postgre_sql_pg_statements_agent_responses.go b/api/inventorypb/json/client/agents/add_qan_postgre_sql_pg_statements_agent_responses.go index 6de82d98fe..3136f4fe1d 100644 --- a/api/inventorypb/json/client/agents/add_qan_postgre_sql_pg_statements_agent_responses.go +++ b/api/inventorypb/json/client/agents/add_qan_postgre_sql_pg_statements_agent_responses.go @@ -530,12 +530,13 @@ type AddQANPostgreSQLPgStatementsAgentOKBodyQANPostgresqlPgstatementsAgent struc // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -568,7 +569,7 @@ var addQanPostgreSqlPgStatementsAgentOkBodyQanPostgresqlPgstatementsAgentTypeSta func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -584,6 +585,9 @@ const ( // AddQANPostgreSQLPgStatementsAgentOKBodyQANPostgresqlPgstatementsAgentStatusSTARTING captures enum value "STARTING" AddQANPostgreSQLPgStatementsAgentOKBodyQANPostgresqlPgstatementsAgentStatusSTARTING string = "STARTING" + // AddQANPostgreSQLPgStatementsAgentOKBodyQANPostgresqlPgstatementsAgentStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddQANPostgreSQLPgStatementsAgentOKBodyQANPostgresqlPgstatementsAgentStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddQANPostgreSQLPgStatementsAgentOKBodyQANPostgresqlPgstatementsAgentStatusRUNNING captures enum value "RUNNING" AddQANPostgreSQLPgStatementsAgentOKBodyQANPostgresqlPgstatementsAgentStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/add_rds_exporter_responses.go b/api/inventorypb/json/client/agents/add_rds_exporter_responses.go index 38129477b1..43e97a4c80 100644 --- a/api/inventorypb/json/client/agents/add_rds_exporter_responses.go +++ b/api/inventorypb/json/client/agents/add_rds_exporter_responses.go @@ -506,12 +506,13 @@ type AddRDSExporterOKBodyRDSExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics (the same for several configurations). @@ -568,7 +569,7 @@ var addRdsExporterOkBodyRdsExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -584,6 +585,9 @@ const ( // AddRDSExporterOKBodyRDSExporterStatusSTARTING captures enum value "STARTING" AddRDSExporterOKBodyRDSExporterStatusSTARTING string = "STARTING" + // AddRDSExporterOKBodyRDSExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddRDSExporterOKBodyRDSExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddRDSExporterOKBodyRDSExporterStatusRUNNING captures enum value "RUNNING" AddRDSExporterOKBodyRDSExporterStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/change_azure_database_exporter_responses.go b/api/inventorypb/json/client/agents/change_azure_database_exporter_responses.go index 9aa5bf084f..1c0677a599 100644 --- a/api/inventorypb/json/client/agents/change_azure_database_exporter_responses.go +++ b/api/inventorypb/json/client/agents/change_azure_database_exporter_responses.go @@ -473,12 +473,13 @@ type ChangeAzureDatabaseExporterOKBodyAzureDatabaseExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics (the same for several configurations). @@ -524,7 +525,7 @@ var changeAzureDatabaseExporterOkBodyAzureDatabaseExporterTypeStatusPropEnum []i func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -540,6 +541,9 @@ const ( // ChangeAzureDatabaseExporterOKBodyAzureDatabaseExporterStatusSTARTING captures enum value "STARTING" ChangeAzureDatabaseExporterOKBodyAzureDatabaseExporterStatusSTARTING string = "STARTING" + // ChangeAzureDatabaseExporterOKBodyAzureDatabaseExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ChangeAzureDatabaseExporterOKBodyAzureDatabaseExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ChangeAzureDatabaseExporterOKBodyAzureDatabaseExporterStatusRUNNING captures enum value "RUNNING" ChangeAzureDatabaseExporterOKBodyAzureDatabaseExporterStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/change_mongo_db_exporter_responses.go b/api/inventorypb/json/client/agents/change_mongo_db_exporter_responses.go index d87f533bf5..1138402461 100644 --- a/api/inventorypb/json/client/agents/change_mongo_db_exporter_responses.go +++ b/api/inventorypb/json/client/agents/change_mongo_db_exporter_responses.go @@ -482,12 +482,13 @@ type ChangeMongoDBExporterOKBodyMongodbExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -543,7 +544,7 @@ var changeMongoDbExporterOkBodyMongodbExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -559,6 +560,9 @@ const ( // ChangeMongoDBExporterOKBodyMongodbExporterStatusSTARTING captures enum value "STARTING" ChangeMongoDBExporterOKBodyMongodbExporterStatusSTARTING string = "STARTING" + // ChangeMongoDBExporterOKBodyMongodbExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ChangeMongoDBExporterOKBodyMongodbExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ChangeMongoDBExporterOKBodyMongodbExporterStatusRUNNING captures enum value "RUNNING" ChangeMongoDBExporterOKBodyMongodbExporterStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/change_my_s_q_ld_exporter_responses.go b/api/inventorypb/json/client/agents/change_my_s_q_ld_exporter_responses.go index ea95a7e05a..b51149914b 100644 --- a/api/inventorypb/json/client/agents/change_my_s_q_ld_exporter_responses.go +++ b/api/inventorypb/json/client/agents/change_my_s_q_ld_exporter_responses.go @@ -496,12 +496,13 @@ type ChangeMySQLdExporterOKBodyMysqldExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -550,7 +551,7 @@ var changeMySQLdExporterOkBodyMysqldExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -566,6 +567,9 @@ const ( // ChangeMySQLdExporterOKBodyMysqldExporterStatusSTARTING captures enum value "STARTING" ChangeMySQLdExporterOKBodyMysqldExporterStatusSTARTING string = "STARTING" + // ChangeMySQLdExporterOKBodyMysqldExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ChangeMySQLdExporterOKBodyMysqldExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ChangeMySQLdExporterOKBodyMysqldExporterStatusRUNNING captures enum value "RUNNING" ChangeMySQLdExporterOKBodyMysqldExporterStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/change_node_exporter_responses.go b/api/inventorypb/json/client/agents/change_node_exporter_responses.go index 8a079d0065..d250266d51 100644 --- a/api/inventorypb/json/client/agents/change_node_exporter_responses.go +++ b/api/inventorypb/json/client/agents/change_node_exporter_responses.go @@ -470,12 +470,13 @@ type ChangeNodeExporterOKBodyNodeExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -521,7 +522,7 @@ var changeNodeExporterOkBodyNodeExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -537,6 +538,9 @@ const ( // ChangeNodeExporterOKBodyNodeExporterStatusSTARTING captures enum value "STARTING" ChangeNodeExporterOKBodyNodeExporterStatusSTARTING string = "STARTING" + // ChangeNodeExporterOKBodyNodeExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ChangeNodeExporterOKBodyNodeExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ChangeNodeExporterOKBodyNodeExporterStatusRUNNING captures enum value "RUNNING" ChangeNodeExporterOKBodyNodeExporterStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/change_postgres_exporter_responses.go b/api/inventorypb/json/client/agents/change_postgres_exporter_responses.go index 300eae8025..b7c27d6c28 100644 --- a/api/inventorypb/json/client/agents/change_postgres_exporter_responses.go +++ b/api/inventorypb/json/client/agents/change_postgres_exporter_responses.go @@ -480,12 +480,13 @@ type ChangePostgresExporterOKBodyPostgresExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -537,7 +538,7 @@ var changePostgresExporterOkBodyPostgresExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -553,6 +554,9 @@ const ( // ChangePostgresExporterOKBodyPostgresExporterStatusSTARTING captures enum value "STARTING" ChangePostgresExporterOKBodyPostgresExporterStatusSTARTING string = "STARTING" + // ChangePostgresExporterOKBodyPostgresExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ChangePostgresExporterOKBodyPostgresExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ChangePostgresExporterOKBodyPostgresExporterStatusRUNNING captures enum value "RUNNING" ChangePostgresExporterOKBodyPostgresExporterStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/change_proxy_sql_exporter_responses.go b/api/inventorypb/json/client/agents/change_proxy_sql_exporter_responses.go index 788e77980f..115a3d40c0 100644 --- a/api/inventorypb/json/client/agents/change_proxy_sql_exporter_responses.go +++ b/api/inventorypb/json/client/agents/change_proxy_sql_exporter_responses.go @@ -482,12 +482,13 @@ type ChangeProxySQLExporterOKBodyProxysqlExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -533,7 +534,7 @@ var changeProxySqlExporterOkBodyProxysqlExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -549,6 +550,9 @@ const ( // ChangeProxySQLExporterOKBodyProxysqlExporterStatusSTARTING captures enum value "STARTING" ChangeProxySQLExporterOKBodyProxysqlExporterStatusSTARTING string = "STARTING" + // ChangeProxySQLExporterOKBodyProxysqlExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ChangeProxySQLExporterOKBodyProxysqlExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ChangeProxySQLExporterOKBodyProxysqlExporterStatusRUNNING captures enum value "RUNNING" ChangeProxySQLExporterOKBodyProxysqlExporterStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/change_qan_mongo_db_profiler_agent_responses.go b/api/inventorypb/json/client/agents/change_qan_mongo_db_profiler_agent_responses.go index 97a20193a8..5c21695f46 100644 --- a/api/inventorypb/json/client/agents/change_qan_mongo_db_profiler_agent_responses.go +++ b/api/inventorypb/json/client/agents/change_qan_mongo_db_profiler_agent_responses.go @@ -482,12 +482,13 @@ type ChangeQANMongoDBProfilerAgentOKBodyQANMongodbProfilerAgent struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -520,7 +521,7 @@ var changeQanMongoDbProfilerAgentOkBodyQanMongodbProfilerAgentTypeStatusPropEnum func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -536,6 +537,9 @@ const ( // ChangeQANMongoDBProfilerAgentOKBodyQANMongodbProfilerAgentStatusSTARTING captures enum value "STARTING" ChangeQANMongoDBProfilerAgentOKBodyQANMongodbProfilerAgentStatusSTARTING string = "STARTING" + // ChangeQANMongoDBProfilerAgentOKBodyQANMongodbProfilerAgentStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ChangeQANMongoDBProfilerAgentOKBodyQANMongodbProfilerAgentStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ChangeQANMongoDBProfilerAgentOKBodyQANMongodbProfilerAgentStatusRUNNING captures enum value "RUNNING" ChangeQANMongoDBProfilerAgentOKBodyQANMongodbProfilerAgentStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/change_qan_my_sql_perf_schema_agent_responses.go b/api/inventorypb/json/client/agents/change_qan_my_sql_perf_schema_agent_responses.go index 947f4738c5..5c9da8a80f 100644 --- a/api/inventorypb/json/client/agents/change_qan_my_sql_perf_schema_agent_responses.go +++ b/api/inventorypb/json/client/agents/change_qan_my_sql_perf_schema_agent_responses.go @@ -494,12 +494,13 @@ type ChangeQANMySQLPerfSchemaAgentOKBodyQANMysqlPerfschemaAgent struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -532,7 +533,7 @@ var changeQanMySqlPerfSchemaAgentOkBodyQanMysqlPerfschemaAgentTypeStatusPropEnum func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -548,6 +549,9 @@ const ( // ChangeQANMySQLPerfSchemaAgentOKBodyQANMysqlPerfschemaAgentStatusSTARTING captures enum value "STARTING" ChangeQANMySQLPerfSchemaAgentOKBodyQANMysqlPerfschemaAgentStatusSTARTING string = "STARTING" + // ChangeQANMySQLPerfSchemaAgentOKBodyQANMysqlPerfschemaAgentStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ChangeQANMySQLPerfSchemaAgentOKBodyQANMysqlPerfschemaAgentStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ChangeQANMySQLPerfSchemaAgentOKBodyQANMysqlPerfschemaAgentStatusRUNNING captures enum value "RUNNING" ChangeQANMySQLPerfSchemaAgentOKBodyQANMysqlPerfschemaAgentStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/change_qan_my_sql_slowlog_agent_responses.go b/api/inventorypb/json/client/agents/change_qan_my_sql_slowlog_agent_responses.go index ec6105f066..712da032d6 100644 --- a/api/inventorypb/json/client/agents/change_qan_my_sql_slowlog_agent_responses.go +++ b/api/inventorypb/json/client/agents/change_qan_my_sql_slowlog_agent_responses.go @@ -497,12 +497,13 @@ type ChangeQANMySQLSlowlogAgentOKBodyQANMysqlSlowlogAgent struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // mod tidy @@ -535,7 +536,7 @@ var changeQanMySqlSlowlogAgentOkBodyQanMysqlSlowlogAgentTypeStatusPropEnum []int func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -551,6 +552,9 @@ const ( // ChangeQANMySQLSlowlogAgentOKBodyQANMysqlSlowlogAgentStatusSTARTING captures enum value "STARTING" ChangeQANMySQLSlowlogAgentOKBodyQANMysqlSlowlogAgentStatusSTARTING string = "STARTING" + // ChangeQANMySQLSlowlogAgentOKBodyQANMysqlSlowlogAgentStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ChangeQANMySQLSlowlogAgentOKBodyQANMysqlSlowlogAgentStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ChangeQANMySQLSlowlogAgentOKBodyQANMysqlSlowlogAgentStatusRUNNING captures enum value "RUNNING" ChangeQANMySQLSlowlogAgentOKBodyQANMysqlSlowlogAgentStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/change_qan_postgre_sql_pg_stat_monitor_agent_responses.go b/api/inventorypb/json/client/agents/change_qan_postgre_sql_pg_stat_monitor_agent_responses.go index d4f2a77bff..ddf6062497 100644 --- a/api/inventorypb/json/client/agents/change_qan_postgre_sql_pg_stat_monitor_agent_responses.go +++ b/api/inventorypb/json/client/agents/change_qan_postgre_sql_pg_stat_monitor_agent_responses.go @@ -485,12 +485,13 @@ type ChangeQANPostgreSQLPgStatMonitorAgentOKBodyQANPostgresqlPgstatmonitorAgent // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -523,7 +524,7 @@ var changeQanPostgreSqlPgStatMonitorAgentOkBodyQanPostgresqlPgstatmonitorAgentTy func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -539,6 +540,9 @@ const ( // ChangeQANPostgreSQLPgStatMonitorAgentOKBodyQANPostgresqlPgstatmonitorAgentStatusSTARTING captures enum value "STARTING" ChangeQANPostgreSQLPgStatMonitorAgentOKBodyQANPostgresqlPgstatmonitorAgentStatusSTARTING string = "STARTING" + // ChangeQANPostgreSQLPgStatMonitorAgentOKBodyQANPostgresqlPgstatmonitorAgentStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ChangeQANPostgreSQLPgStatMonitorAgentOKBodyQANPostgresqlPgstatmonitorAgentStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ChangeQANPostgreSQLPgStatMonitorAgentOKBodyQANPostgresqlPgstatmonitorAgentStatusRUNNING captures enum value "RUNNING" ChangeQANPostgreSQLPgStatMonitorAgentOKBodyQANPostgresqlPgstatmonitorAgentStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/change_qan_postgre_sql_pg_statements_agent_responses.go b/api/inventorypb/json/client/agents/change_qan_postgre_sql_pg_statements_agent_responses.go index fee46e441a..00578a1fb1 100644 --- a/api/inventorypb/json/client/agents/change_qan_postgre_sql_pg_statements_agent_responses.go +++ b/api/inventorypb/json/client/agents/change_qan_postgre_sql_pg_statements_agent_responses.go @@ -482,12 +482,13 @@ type ChangeQANPostgreSQLPgStatementsAgentOKBodyQANPostgresqlPgstatementsAgent st // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -520,7 +521,7 @@ var changeQanPostgreSqlPgStatementsAgentOkBodyQanPostgresqlPgstatementsAgentType func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -536,6 +537,9 @@ const ( // ChangeQANPostgreSQLPgStatementsAgentOKBodyQANPostgresqlPgstatementsAgentStatusSTARTING captures enum value "STARTING" ChangeQANPostgreSQLPgStatementsAgentOKBodyQANPostgresqlPgstatementsAgentStatusSTARTING string = "STARTING" + // ChangeQANPostgreSQLPgStatementsAgentOKBodyQANPostgresqlPgstatementsAgentStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ChangeQANPostgreSQLPgStatementsAgentOKBodyQANPostgresqlPgstatementsAgentStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ChangeQANPostgreSQLPgStatementsAgentOKBodyQANPostgresqlPgstatementsAgentStatusRUNNING captures enum value "RUNNING" ChangeQANPostgreSQLPgStatementsAgentOKBodyQANPostgresqlPgstatementsAgentStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/change_rds_exporter_responses.go b/api/inventorypb/json/client/agents/change_rds_exporter_responses.go index edb44a701c..f1a0bb07e1 100644 --- a/api/inventorypb/json/client/agents/change_rds_exporter_responses.go +++ b/api/inventorypb/json/client/agents/change_rds_exporter_responses.go @@ -470,12 +470,13 @@ type ChangeRDSExporterOKBodyRDSExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics (the same for several configurations). @@ -532,7 +533,7 @@ var changeRdsExporterOkBodyRdsExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -548,6 +549,9 @@ const ( // ChangeRDSExporterOKBodyRDSExporterStatusSTARTING captures enum value "STARTING" ChangeRDSExporterOKBodyRDSExporterStatusSTARTING string = "STARTING" + // ChangeRDSExporterOKBodyRDSExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ChangeRDSExporterOKBodyRDSExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ChangeRDSExporterOKBodyRDSExporterStatusRUNNING captures enum value "RUNNING" ChangeRDSExporterOKBodyRDSExporterStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/get_agent_responses.go b/api/inventorypb/json/client/agents/get_agent_responses.go index ecedefd767..91d8c19a19 100644 --- a/api/inventorypb/json/client/agents/get_agent_responses.go +++ b/api/inventorypb/json/client/agents/get_agent_responses.go @@ -1048,12 +1048,13 @@ type GetAgentOKBodyAzureDatabaseExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics (the same for several configurations). @@ -1099,7 +1100,7 @@ var getAgentOkBodyAzureDatabaseExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -1115,6 +1116,9 @@ const ( // GetAgentOKBodyAzureDatabaseExporterStatusSTARTING captures enum value "STARTING" GetAgentOKBodyAzureDatabaseExporterStatusSTARTING string = "STARTING" + // GetAgentOKBodyAzureDatabaseExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + GetAgentOKBodyAzureDatabaseExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // GetAgentOKBodyAzureDatabaseExporterStatusRUNNING captures enum value "RUNNING" GetAgentOKBodyAzureDatabaseExporterStatusRUNNING string = "RUNNING" @@ -1520,12 +1524,13 @@ type GetAgentOKBodyMongodbExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -1581,7 +1586,7 @@ var getAgentOkBodyMongodbExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -1597,6 +1602,9 @@ const ( // GetAgentOKBodyMongodbExporterStatusSTARTING captures enum value "STARTING" GetAgentOKBodyMongodbExporterStatusSTARTING string = "STARTING" + // GetAgentOKBodyMongodbExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + GetAgentOKBodyMongodbExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // GetAgentOKBodyMongodbExporterStatusRUNNING captures enum value "RUNNING" GetAgentOKBodyMongodbExporterStatusRUNNING string = "RUNNING" @@ -1851,12 +1859,13 @@ type GetAgentOKBodyMysqldExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -1905,7 +1914,7 @@ var getAgentOkBodyMysqldExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -1921,6 +1930,9 @@ const ( // GetAgentOKBodyMysqldExporterStatusSTARTING captures enum value "STARTING" GetAgentOKBodyMysqldExporterStatusSTARTING string = "STARTING" + // GetAgentOKBodyMysqldExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + GetAgentOKBodyMysqldExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // GetAgentOKBodyMysqldExporterStatusRUNNING captures enum value "RUNNING" GetAgentOKBodyMysqldExporterStatusRUNNING string = "RUNNING" @@ -2149,12 +2161,13 @@ type GetAgentOKBodyNodeExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -2200,7 +2213,7 @@ var getAgentOkBodyNodeExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -2216,6 +2229,9 @@ const ( // GetAgentOKBodyNodeExporterStatusSTARTING captures enum value "STARTING" GetAgentOKBodyNodeExporterStatusSTARTING string = "STARTING" + // GetAgentOKBodyNodeExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + GetAgentOKBodyNodeExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // GetAgentOKBodyNodeExporterStatusRUNNING captures enum value "RUNNING" GetAgentOKBodyNodeExporterStatusRUNNING string = "RUNNING" @@ -2505,12 +2521,13 @@ type GetAgentOKBodyPostgresExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -2562,7 +2579,7 @@ var getAgentOkBodyPostgresExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -2578,6 +2595,9 @@ const ( // GetAgentOKBodyPostgresExporterStatusSTARTING captures enum value "STARTING" GetAgentOKBodyPostgresExporterStatusSTARTING string = "STARTING" + // GetAgentOKBodyPostgresExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + GetAgentOKBodyPostgresExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // GetAgentOKBodyPostgresExporterStatusRUNNING captures enum value "RUNNING" GetAgentOKBodyPostgresExporterStatusRUNNING string = "RUNNING" @@ -2818,12 +2838,13 @@ type GetAgentOKBodyProxysqlExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -2869,7 +2890,7 @@ var getAgentOkBodyProxysqlExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -2885,6 +2906,9 @@ const ( // GetAgentOKBodyProxysqlExporterStatusSTARTING captures enum value "STARTING" GetAgentOKBodyProxysqlExporterStatusSTARTING string = "STARTING" + // GetAgentOKBodyProxysqlExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + GetAgentOKBodyProxysqlExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // GetAgentOKBodyProxysqlExporterStatusRUNNING captures enum value "RUNNING" GetAgentOKBodyProxysqlExporterStatusRUNNING string = "RUNNING" @@ -3125,12 +3149,13 @@ type GetAgentOKBodyQANMongodbProfilerAgent struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -3163,7 +3188,7 @@ var getAgentOkBodyQanMongodbProfilerAgentTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -3179,6 +3204,9 @@ const ( // GetAgentOKBodyQANMongodbProfilerAgentStatusSTARTING captures enum value "STARTING" GetAgentOKBodyQANMongodbProfilerAgentStatusSTARTING string = "STARTING" + // GetAgentOKBodyQANMongodbProfilerAgentStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + GetAgentOKBodyQANMongodbProfilerAgentStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // GetAgentOKBodyQANMongodbProfilerAgentStatusRUNNING captures enum value "RUNNING" GetAgentOKBodyQANMongodbProfilerAgentStatusRUNNING string = "RUNNING" @@ -3345,12 +3373,13 @@ type GetAgentOKBodyQANMysqlPerfschemaAgent struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -3383,7 +3412,7 @@ var getAgentOkBodyQanMysqlPerfschemaAgentTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -3399,6 +3428,9 @@ const ( // GetAgentOKBodyQANMysqlPerfschemaAgentStatusSTARTING captures enum value "STARTING" GetAgentOKBodyQANMysqlPerfschemaAgentStatusSTARTING string = "STARTING" + // GetAgentOKBodyQANMysqlPerfschemaAgentStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + GetAgentOKBodyQANMysqlPerfschemaAgentStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // GetAgentOKBodyQANMysqlPerfschemaAgentStatusRUNNING captures enum value "RUNNING" GetAgentOKBodyQANMysqlPerfschemaAgentStatusRUNNING string = "RUNNING" @@ -3568,12 +3600,13 @@ type GetAgentOKBodyQANMysqlSlowlogAgent struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // mod tidy @@ -3606,7 +3639,7 @@ var getAgentOkBodyQanMysqlSlowlogAgentTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -3622,6 +3655,9 @@ const ( // GetAgentOKBodyQANMysqlSlowlogAgentStatusSTARTING captures enum value "STARTING" GetAgentOKBodyQANMysqlSlowlogAgentStatusSTARTING string = "STARTING" + // GetAgentOKBodyQANMysqlSlowlogAgentStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + GetAgentOKBodyQANMysqlSlowlogAgentStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // GetAgentOKBodyQANMysqlSlowlogAgentStatusRUNNING captures enum value "RUNNING" GetAgentOKBodyQANMysqlSlowlogAgentStatusRUNNING string = "RUNNING" @@ -3776,12 +3812,13 @@ type GetAgentOKBodyQANPostgresqlPgstatementsAgent struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -3814,7 +3851,7 @@ var getAgentOkBodyQanPostgresqlPgstatementsAgentTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -3830,6 +3867,9 @@ const ( // GetAgentOKBodyQANPostgresqlPgstatementsAgentStatusSTARTING captures enum value "STARTING" GetAgentOKBodyQANPostgresqlPgstatementsAgentStatusSTARTING string = "STARTING" + // GetAgentOKBodyQANPostgresqlPgstatementsAgentStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + GetAgentOKBodyQANPostgresqlPgstatementsAgentStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // GetAgentOKBodyQANPostgresqlPgstatementsAgentStatusRUNNING captures enum value "RUNNING" GetAgentOKBodyQANPostgresqlPgstatementsAgentStatusRUNNING string = "RUNNING" @@ -3987,12 +4027,13 @@ type GetAgentOKBodyQANPostgresqlPgstatmonitorAgent struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -4025,7 +4066,7 @@ var getAgentOkBodyQanPostgresqlPgstatmonitorAgentTypeStatusPropEnum []interface{ func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -4041,6 +4082,9 @@ const ( // GetAgentOKBodyQANPostgresqlPgstatmonitorAgentStatusSTARTING captures enum value "STARTING" GetAgentOKBodyQANPostgresqlPgstatmonitorAgentStatusSTARTING string = "STARTING" + // GetAgentOKBodyQANPostgresqlPgstatmonitorAgentStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + GetAgentOKBodyQANPostgresqlPgstatmonitorAgentStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // GetAgentOKBodyQANPostgresqlPgstatmonitorAgentStatusRUNNING captures enum value "RUNNING" GetAgentOKBodyQANPostgresqlPgstatmonitorAgentStatusRUNNING string = "RUNNING" @@ -4183,12 +4227,13 @@ type GetAgentOKBodyRDSExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics (the same for several configurations). @@ -4245,7 +4290,7 @@ var getAgentOkBodyRdsExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -4261,6 +4306,9 @@ const ( // GetAgentOKBodyRDSExporterStatusSTARTING captures enum value "STARTING" GetAgentOKBodyRDSExporterStatusSTARTING string = "STARTING" + // GetAgentOKBodyRDSExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + GetAgentOKBodyRDSExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // GetAgentOKBodyRDSExporterStatusRUNNING captures enum value "RUNNING" GetAgentOKBodyRDSExporterStatusRUNNING string = "RUNNING" @@ -4479,12 +4527,13 @@ type GetAgentOKBodyVmagent struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -4512,7 +4561,7 @@ var getAgentOkBodyVmagentTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -4528,6 +4577,9 @@ const ( // GetAgentOKBodyVmagentStatusSTARTING captures enum value "STARTING" GetAgentOKBodyVmagentStatusSTARTING string = "STARTING" + // GetAgentOKBodyVmagentStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + GetAgentOKBodyVmagentStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // GetAgentOKBodyVmagentStatusRUNNING captures enum value "RUNNING" GetAgentOKBodyVmagentStatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/client/agents/list_agents_responses.go b/api/inventorypb/json/client/agents/list_agents_responses.go index 8acd19b0e9..2444cbed54 100644 --- a/api/inventorypb/json/client/agents/list_agents_responses.go +++ b/api/inventorypb/json/client/agents/list_agents_responses.go @@ -1289,12 +1289,13 @@ type ListAgentsOKBodyAzureDatabaseExporterItems0 struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics (the same for several configurations). @@ -1340,7 +1341,7 @@ var listAgentsOkBodyAzureDatabaseExporterItems0TypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -1356,6 +1357,9 @@ const ( // ListAgentsOKBodyAzureDatabaseExporterItems0StatusSTARTING captures enum value "STARTING" ListAgentsOKBodyAzureDatabaseExporterItems0StatusSTARTING string = "STARTING" + // ListAgentsOKBodyAzureDatabaseExporterItems0StatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ListAgentsOKBodyAzureDatabaseExporterItems0StatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ListAgentsOKBodyAzureDatabaseExporterItems0StatusRUNNING captures enum value "RUNNING" ListAgentsOKBodyAzureDatabaseExporterItems0StatusRUNNING string = "RUNNING" @@ -1761,12 +1765,13 @@ type ListAgentsOKBodyMongodbExporterItems0 struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -1822,7 +1827,7 @@ var listAgentsOkBodyMongodbExporterItems0TypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -1838,6 +1843,9 @@ const ( // ListAgentsOKBodyMongodbExporterItems0StatusSTARTING captures enum value "STARTING" ListAgentsOKBodyMongodbExporterItems0StatusSTARTING string = "STARTING" + // ListAgentsOKBodyMongodbExporterItems0StatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ListAgentsOKBodyMongodbExporterItems0StatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ListAgentsOKBodyMongodbExporterItems0StatusRUNNING captures enum value "RUNNING" ListAgentsOKBodyMongodbExporterItems0StatusRUNNING string = "RUNNING" @@ -2092,12 +2100,13 @@ type ListAgentsOKBodyMysqldExporterItems0 struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -2146,7 +2155,7 @@ var listAgentsOkBodyMysqldExporterItems0TypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -2162,6 +2171,9 @@ const ( // ListAgentsOKBodyMysqldExporterItems0StatusSTARTING captures enum value "STARTING" ListAgentsOKBodyMysqldExporterItems0StatusSTARTING string = "STARTING" + // ListAgentsOKBodyMysqldExporterItems0StatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ListAgentsOKBodyMysqldExporterItems0StatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ListAgentsOKBodyMysqldExporterItems0StatusRUNNING captures enum value "RUNNING" ListAgentsOKBodyMysqldExporterItems0StatusRUNNING string = "RUNNING" @@ -2390,12 +2402,13 @@ type ListAgentsOKBodyNodeExporterItems0 struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -2441,7 +2454,7 @@ var listAgentsOkBodyNodeExporterItems0TypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -2457,6 +2470,9 @@ const ( // ListAgentsOKBodyNodeExporterItems0StatusSTARTING captures enum value "STARTING" ListAgentsOKBodyNodeExporterItems0StatusSTARTING string = "STARTING" + // ListAgentsOKBodyNodeExporterItems0StatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ListAgentsOKBodyNodeExporterItems0StatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ListAgentsOKBodyNodeExporterItems0StatusRUNNING captures enum value "RUNNING" ListAgentsOKBodyNodeExporterItems0StatusRUNNING string = "RUNNING" @@ -2746,12 +2762,13 @@ type ListAgentsOKBodyPostgresExporterItems0 struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -2803,7 +2820,7 @@ var listAgentsOkBodyPostgresExporterItems0TypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -2819,6 +2836,9 @@ const ( // ListAgentsOKBodyPostgresExporterItems0StatusSTARTING captures enum value "STARTING" ListAgentsOKBodyPostgresExporterItems0StatusSTARTING string = "STARTING" + // ListAgentsOKBodyPostgresExporterItems0StatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ListAgentsOKBodyPostgresExporterItems0StatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ListAgentsOKBodyPostgresExporterItems0StatusRUNNING captures enum value "RUNNING" ListAgentsOKBodyPostgresExporterItems0StatusRUNNING string = "RUNNING" @@ -3059,12 +3079,13 @@ type ListAgentsOKBodyProxysqlExporterItems0 struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -3110,7 +3131,7 @@ var listAgentsOkBodyProxysqlExporterItems0TypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -3126,6 +3147,9 @@ const ( // ListAgentsOKBodyProxysqlExporterItems0StatusSTARTING captures enum value "STARTING" ListAgentsOKBodyProxysqlExporterItems0StatusSTARTING string = "STARTING" + // ListAgentsOKBodyProxysqlExporterItems0StatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ListAgentsOKBodyProxysqlExporterItems0StatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ListAgentsOKBodyProxysqlExporterItems0StatusRUNNING captures enum value "RUNNING" ListAgentsOKBodyProxysqlExporterItems0StatusRUNNING string = "RUNNING" @@ -3366,12 +3390,13 @@ type ListAgentsOKBodyQANMongodbProfilerAgentItems0 struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -3404,7 +3429,7 @@ var listAgentsOkBodyQanMongodbProfilerAgentItems0TypeStatusPropEnum []interface{ func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -3420,6 +3445,9 @@ const ( // ListAgentsOKBodyQANMongodbProfilerAgentItems0StatusSTARTING captures enum value "STARTING" ListAgentsOKBodyQANMongodbProfilerAgentItems0StatusSTARTING string = "STARTING" + // ListAgentsOKBodyQANMongodbProfilerAgentItems0StatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ListAgentsOKBodyQANMongodbProfilerAgentItems0StatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ListAgentsOKBodyQANMongodbProfilerAgentItems0StatusRUNNING captures enum value "RUNNING" ListAgentsOKBodyQANMongodbProfilerAgentItems0StatusRUNNING string = "RUNNING" @@ -3586,12 +3614,13 @@ type ListAgentsOKBodyQANMysqlPerfschemaAgentItems0 struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -3624,7 +3653,7 @@ var listAgentsOkBodyQanMysqlPerfschemaAgentItems0TypeStatusPropEnum []interface{ func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -3640,6 +3669,9 @@ const ( // ListAgentsOKBodyQANMysqlPerfschemaAgentItems0StatusSTARTING captures enum value "STARTING" ListAgentsOKBodyQANMysqlPerfschemaAgentItems0StatusSTARTING string = "STARTING" + // ListAgentsOKBodyQANMysqlPerfschemaAgentItems0StatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ListAgentsOKBodyQANMysqlPerfschemaAgentItems0StatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ListAgentsOKBodyQANMysqlPerfschemaAgentItems0StatusRUNNING captures enum value "RUNNING" ListAgentsOKBodyQANMysqlPerfschemaAgentItems0StatusRUNNING string = "RUNNING" @@ -3809,12 +3841,13 @@ type ListAgentsOKBodyQANMysqlSlowlogAgentItems0 struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // mod tidy @@ -3847,7 +3880,7 @@ var listAgentsOkBodyQanMysqlSlowlogAgentItems0TypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -3863,6 +3896,9 @@ const ( // ListAgentsOKBodyQANMysqlSlowlogAgentItems0StatusSTARTING captures enum value "STARTING" ListAgentsOKBodyQANMysqlSlowlogAgentItems0StatusSTARTING string = "STARTING" + // ListAgentsOKBodyQANMysqlSlowlogAgentItems0StatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ListAgentsOKBodyQANMysqlSlowlogAgentItems0StatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ListAgentsOKBodyQANMysqlSlowlogAgentItems0StatusRUNNING captures enum value "RUNNING" ListAgentsOKBodyQANMysqlSlowlogAgentItems0StatusRUNNING string = "RUNNING" @@ -4017,12 +4053,13 @@ type ListAgentsOKBodyQANPostgresqlPgstatementsAgentItems0 struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -4055,7 +4092,7 @@ var listAgentsOkBodyQanPostgresqlPgstatementsAgentItems0TypeStatusPropEnum []int func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -4071,6 +4108,9 @@ const ( // ListAgentsOKBodyQANPostgresqlPgstatementsAgentItems0StatusSTARTING captures enum value "STARTING" ListAgentsOKBodyQANPostgresqlPgstatementsAgentItems0StatusSTARTING string = "STARTING" + // ListAgentsOKBodyQANPostgresqlPgstatementsAgentItems0StatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ListAgentsOKBodyQANPostgresqlPgstatementsAgentItems0StatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ListAgentsOKBodyQANPostgresqlPgstatementsAgentItems0StatusRUNNING captures enum value "RUNNING" ListAgentsOKBodyQANPostgresqlPgstatementsAgentItems0StatusRUNNING string = "RUNNING" @@ -4228,12 +4268,13 @@ type ListAgentsOKBodyQANPostgresqlPgstatmonitorAgentItems0 struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -4266,7 +4307,7 @@ var listAgentsOkBodyQanPostgresqlPgstatmonitorAgentItems0TypeStatusPropEnum []in func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -4282,6 +4323,9 @@ const ( // ListAgentsOKBodyQANPostgresqlPgstatmonitorAgentItems0StatusSTARTING captures enum value "STARTING" ListAgentsOKBodyQANPostgresqlPgstatmonitorAgentItems0StatusSTARTING string = "STARTING" + // ListAgentsOKBodyQANPostgresqlPgstatmonitorAgentItems0StatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ListAgentsOKBodyQANPostgresqlPgstatmonitorAgentItems0StatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ListAgentsOKBodyQANPostgresqlPgstatmonitorAgentItems0StatusRUNNING captures enum value "RUNNING" ListAgentsOKBodyQANPostgresqlPgstatmonitorAgentItems0StatusRUNNING string = "RUNNING" @@ -4424,12 +4468,13 @@ type ListAgentsOKBodyRDSExporterItems0 struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics (the same for several configurations). @@ -4486,7 +4531,7 @@ var listAgentsOkBodyRdsExporterItems0TypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -4502,6 +4547,9 @@ const ( // ListAgentsOKBodyRDSExporterItems0StatusSTARTING captures enum value "STARTING" ListAgentsOKBodyRDSExporterItems0StatusSTARTING string = "STARTING" + // ListAgentsOKBodyRDSExporterItems0StatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ListAgentsOKBodyRDSExporterItems0StatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ListAgentsOKBodyRDSExporterItems0StatusRUNNING captures enum value "RUNNING" ListAgentsOKBodyRDSExporterItems0StatusRUNNING string = "RUNNING" @@ -4720,12 +4768,13 @@ type ListAgentsOKBodyVMAgentItems0 struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -4753,7 +4802,7 @@ var listAgentsOkBodyVmAgentItems0TypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -4769,6 +4818,9 @@ const ( // ListAgentsOKBodyVMAgentItems0StatusSTARTING captures enum value "STARTING" ListAgentsOKBodyVMAgentItems0StatusSTARTING string = "STARTING" + // ListAgentsOKBodyVMAgentItems0StatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + ListAgentsOKBodyVMAgentItems0StatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // ListAgentsOKBodyVMAgentItems0StatusRUNNING captures enum value "RUNNING" ListAgentsOKBodyVMAgentItems0StatusRUNNING string = "RUNNING" diff --git a/api/inventorypb/json/inventorypb.json b/api/inventorypb/json/inventorypb.json index fb7356a92c..fcf2d98ccb 100644 --- a/api/inventorypb/json/inventorypb.json +++ b/api/inventorypb/json/inventorypb.json @@ -208,12 +208,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -724,12 +725,13 @@ "x-order": 12 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -1018,12 +1020,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -1283,12 +1286,13 @@ "x-order": 4 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -1691,12 +1695,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -1964,12 +1969,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -2205,12 +2211,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -2456,12 +2463,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -2734,12 +2742,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -3000,12 +3009,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -3241,12 +3251,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -3504,12 +3515,13 @@ "x-order": 10 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -3745,12 +3757,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -4225,12 +4238,13 @@ "x-order": 12 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -4484,12 +4498,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -4764,12 +4779,13 @@ "x-order": 4 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -5020,12 +5036,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -5279,12 +5296,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -5498,12 +5516,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -5727,12 +5746,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -5977,12 +5997,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -6221,12 +6242,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -6445,12 +6467,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -6712,12 +6735,13 @@ "x-order": 10 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -6892,12 +6916,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -7114,12 +7139,13 @@ "x-order": 12 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -7244,12 +7270,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -7395,12 +7422,13 @@ "x-order": 4 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -7557,12 +7585,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -7687,12 +7716,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -7777,12 +7807,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -7877,12 +7908,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -7998,12 +8030,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -8108,12 +8141,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -8208,12 +8242,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -8346,12 +8381,13 @@ "x-order": 10 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -8389,12 +8425,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -8691,12 +8728,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -8919,12 +8957,13 @@ "x-order": 12 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -9052,12 +9091,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -9206,12 +9246,13 @@ "x-order": 4 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -9374,12 +9415,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -9507,12 +9549,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -9600,12 +9643,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -9703,12 +9747,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -9827,12 +9872,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -9940,12 +9986,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -10043,12 +10090,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -10184,12 +10232,13 @@ "x-order": 10 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -10230,12 +10279,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", diff --git a/api/managementpb/json/client/mongo_db/add_mongo_db_responses.go b/api/managementpb/json/client/mongo_db/add_mongo_db_responses.go index af793cc018..632710e99e 100644 --- a/api/managementpb/json/client/mongo_db/add_mongo_db_responses.go +++ b/api/managementpb/json/client/mongo_db/add_mongo_db_responses.go @@ -783,12 +783,13 @@ type AddMongoDBOKBodyMongodbExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -844,7 +845,7 @@ var addMongoDbOkBodyMongodbExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -860,6 +861,9 @@ const ( // AddMongoDBOKBodyMongodbExporterStatusSTARTING captures enum value "STARTING" AddMongoDBOKBodyMongodbExporterStatusSTARTING string = "STARTING" + // AddMongoDBOKBodyMongodbExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddMongoDBOKBodyMongodbExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddMongoDBOKBodyMongodbExporterStatusRUNNING captures enum value "RUNNING" AddMongoDBOKBodyMongodbExporterStatusRUNNING string = "RUNNING" @@ -1100,12 +1104,13 @@ type AddMongoDBOKBodyQANMongodbProfiler struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -1138,7 +1143,7 @@ var addMongoDbOkBodyQanMongodbProfilerTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -1154,6 +1159,9 @@ const ( // AddMongoDBOKBodyQANMongodbProfilerStatusSTARTING captures enum value "STARTING" AddMongoDBOKBodyQANMongodbProfilerStatusSTARTING string = "STARTING" + // AddMongoDBOKBodyQANMongodbProfilerStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddMongoDBOKBodyQANMongodbProfilerStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddMongoDBOKBodyQANMongodbProfilerStatusRUNNING captures enum value "RUNNING" AddMongoDBOKBodyQANMongodbProfilerStatusRUNNING string = "RUNNING" diff --git a/api/managementpb/json/client/my_sql/add_my_sql_responses.go b/api/managementpb/json/client/my_sql/add_my_sql_responses.go index 6d878c40fe..d10ed295dd 100644 --- a/api/managementpb/json/client/my_sql/add_my_sql_responses.go +++ b/api/managementpb/json/client/my_sql/add_my_sql_responses.go @@ -843,12 +843,13 @@ type AddMySQLOKBodyMysqldExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -897,7 +898,7 @@ var addMySqlOkBodyMysqldExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -913,6 +914,9 @@ const ( // AddMySQLOKBodyMysqldExporterStatusSTARTING captures enum value "STARTING" AddMySQLOKBodyMysqldExporterStatusSTARTING string = "STARTING" + // AddMySQLOKBodyMysqldExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddMySQLOKBodyMysqldExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddMySQLOKBodyMysqldExporterStatusRUNNING captures enum value "RUNNING" AddMySQLOKBodyMysqldExporterStatusRUNNING string = "RUNNING" @@ -1165,12 +1169,13 @@ type AddMySQLOKBodyQANMysqlPerfschema struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -1203,7 +1208,7 @@ var addMySqlOkBodyQanMysqlPerfschemaTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -1219,6 +1224,9 @@ const ( // AddMySQLOKBodyQANMysqlPerfschemaStatusSTARTING captures enum value "STARTING" AddMySQLOKBodyQANMysqlPerfschemaStatusSTARTING string = "STARTING" + // AddMySQLOKBodyQANMysqlPerfschemaStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddMySQLOKBodyQANMysqlPerfschemaStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddMySQLOKBodyQANMysqlPerfschemaStatusRUNNING captures enum value "RUNNING" AddMySQLOKBodyQANMysqlPerfschemaStatusRUNNING string = "RUNNING" @@ -1388,12 +1396,13 @@ type AddMySQLOKBodyQANMysqlSlowlog struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // mod tidy @@ -1426,7 +1435,7 @@ var addMySqlOkBodyQanMysqlSlowlogTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -1442,6 +1451,9 @@ const ( // AddMySQLOKBodyQANMysqlSlowlogStatusSTARTING captures enum value "STARTING" AddMySQLOKBodyQANMysqlSlowlogStatusSTARTING string = "STARTING" + // AddMySQLOKBodyQANMysqlSlowlogStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddMySQLOKBodyQANMysqlSlowlogStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddMySQLOKBodyQANMysqlSlowlogStatusRUNNING captures enum value "RUNNING" AddMySQLOKBodyQANMysqlSlowlogStatusRUNNING string = "RUNNING" diff --git a/api/managementpb/json/client/postgre_sql/add_postgre_sql_responses.go b/api/managementpb/json/client/postgre_sql/add_postgre_sql_responses.go index cce23864dc..f0b28f0eba 100644 --- a/api/managementpb/json/client/postgre_sql/add_postgre_sql_responses.go +++ b/api/managementpb/json/client/postgre_sql/add_postgre_sql_responses.go @@ -826,12 +826,13 @@ type AddPostgreSQLOKBodyPostgresExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -883,7 +884,7 @@ var addPostgreSqlOkBodyPostgresExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -899,6 +900,9 @@ const ( // AddPostgreSQLOKBodyPostgresExporterStatusSTARTING captures enum value "STARTING" AddPostgreSQLOKBodyPostgresExporterStatusSTARTING string = "STARTING" + // AddPostgreSQLOKBodyPostgresExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddPostgreSQLOKBodyPostgresExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddPostgreSQLOKBodyPostgresExporterStatusRUNNING captures enum value "RUNNING" AddPostgreSQLOKBodyPostgresExporterStatusRUNNING string = "RUNNING" @@ -1139,12 +1143,13 @@ type AddPostgreSQLOKBodyQANPostgresqlPgstatementsAgent struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -1177,7 +1182,7 @@ var addPostgreSqlOkBodyQanPostgresqlPgstatementsAgentTypeStatusPropEnum []interf func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -1193,6 +1198,9 @@ const ( // AddPostgreSQLOKBodyQANPostgresqlPgstatementsAgentStatusSTARTING captures enum value "STARTING" AddPostgreSQLOKBodyQANPostgresqlPgstatementsAgentStatusSTARTING string = "STARTING" + // AddPostgreSQLOKBodyQANPostgresqlPgstatementsAgentStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddPostgreSQLOKBodyQANPostgresqlPgstatementsAgentStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddPostgreSQLOKBodyQANPostgresqlPgstatementsAgentStatusRUNNING captures enum value "RUNNING" AddPostgreSQLOKBodyQANPostgresqlPgstatementsAgentStatusRUNNING string = "RUNNING" @@ -1350,12 +1358,13 @@ type AddPostgreSQLOKBodyQANPostgresqlPgstatmonitorAgent struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -1388,7 +1397,7 @@ var addPostgreSqlOkBodyQanPostgresqlPgstatmonitorAgentTypeStatusPropEnum []inter func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -1404,6 +1413,9 @@ const ( // AddPostgreSQLOKBodyQANPostgresqlPgstatmonitorAgentStatusSTARTING captures enum value "STARTING" AddPostgreSQLOKBodyQANPostgresqlPgstatmonitorAgentStatusSTARTING string = "STARTING" + // AddPostgreSQLOKBodyQANPostgresqlPgstatmonitorAgentStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddPostgreSQLOKBodyQANPostgresqlPgstatmonitorAgentStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddPostgreSQLOKBodyQANPostgresqlPgstatmonitorAgentStatusRUNNING captures enum value "RUNNING" AddPostgreSQLOKBodyQANPostgresqlPgstatmonitorAgentStatusRUNNING string = "RUNNING" diff --git a/api/managementpb/json/client/proxy_sql/add_proxy_sql_responses.go b/api/managementpb/json/client/proxy_sql/add_proxy_sql_responses.go index 91e79ebfcd..4c7a58b014 100644 --- a/api/managementpb/json/client/proxy_sql/add_proxy_sql_responses.go +++ b/api/managementpb/json/client/proxy_sql/add_proxy_sql_responses.go @@ -702,12 +702,13 @@ type AddProxySQLOKBodyProxysqlExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -753,7 +754,7 @@ var addProxySqlOkBodyProxysqlExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -769,6 +770,9 @@ const ( // AddProxySQLOKBodyProxysqlExporterStatusSTARTING captures enum value "STARTING" AddProxySQLOKBodyProxysqlExporterStatusSTARTING string = "STARTING" + // AddProxySQLOKBodyProxysqlExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddProxySQLOKBodyProxysqlExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddProxySQLOKBodyProxysqlExporterStatusRUNNING captures enum value "RUNNING" AddProxySQLOKBodyProxysqlExporterStatusRUNNING string = "RUNNING" diff --git a/api/managementpb/json/client/rds/add_rds_responses.go b/api/managementpb/json/client/rds/add_rds_responses.go index 56f638a87d..fdef474737 100644 --- a/api/managementpb/json/client/rds/add_rds_responses.go +++ b/api/managementpb/json/client/rds/add_rds_responses.go @@ -1033,12 +1033,13 @@ type AddRDSOKBodyMysqldExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -1087,7 +1088,7 @@ var addRdsOkBodyMysqldExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -1103,6 +1104,9 @@ const ( // AddRDSOKBodyMysqldExporterStatusSTARTING captures enum value "STARTING" AddRDSOKBodyMysqldExporterStatusSTARTING string = "STARTING" + // AddRDSOKBodyMysqldExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddRDSOKBodyMysqldExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddRDSOKBodyMysqldExporterStatusRUNNING captures enum value "RUNNING" AddRDSOKBodyMysqldExporterStatusRUNNING string = "RUNNING" @@ -1472,12 +1476,13 @@ type AddRDSOKBodyPostgresqlExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics. @@ -1529,7 +1534,7 @@ var addRdsOkBodyPostgresqlExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -1545,6 +1550,9 @@ const ( // AddRDSOKBodyPostgresqlExporterStatusSTARTING captures enum value "STARTING" AddRDSOKBodyPostgresqlExporterStatusSTARTING string = "STARTING" + // AddRDSOKBodyPostgresqlExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddRDSOKBodyPostgresqlExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddRDSOKBodyPostgresqlExporterStatusRUNNING captures enum value "RUNNING" AddRDSOKBodyPostgresqlExporterStatusRUNNING string = "RUNNING" @@ -1797,12 +1805,13 @@ type AddRDSOKBodyQANMysqlPerfschema struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -1835,7 +1844,7 @@ var addRdsOkBodyQanMysqlPerfschemaTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -1851,6 +1860,9 @@ const ( // AddRDSOKBodyQANMysqlPerfschemaStatusSTARTING captures enum value "STARTING" AddRDSOKBodyQANMysqlPerfschemaStatusSTARTING string = "STARTING" + // AddRDSOKBodyQANMysqlPerfschemaStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddRDSOKBodyQANMysqlPerfschemaStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddRDSOKBodyQANMysqlPerfschemaStatusRUNNING captures enum value "RUNNING" AddRDSOKBodyQANMysqlPerfschemaStatusRUNNING string = "RUNNING" @@ -2005,12 +2017,13 @@ type AddRDSOKBodyQANPostgresqlPgstatements struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Path to exec process. @@ -2043,7 +2056,7 @@ var addRdsOkBodyQanPostgresqlPgstatementsTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -2059,6 +2072,9 @@ const ( // AddRDSOKBodyQANPostgresqlPgstatementsStatusSTARTING captures enum value "STARTING" AddRDSOKBodyQANPostgresqlPgstatementsStatusSTARTING string = "STARTING" + // AddRDSOKBodyQANPostgresqlPgstatementsStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddRDSOKBodyQANPostgresqlPgstatementsStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddRDSOKBodyQANPostgresqlPgstatementsStatusRUNNING captures enum value "RUNNING" AddRDSOKBodyQANPostgresqlPgstatementsStatusRUNNING string = "RUNNING" @@ -2201,12 +2217,13 @@ type AddRDSOKBodyRDSExporter struct { // AgentStatus represents actual Agent status. // // - STARTING: Agent is starting. + // - INITIALIZATION_ERROR: Agent encountered error when starting. // - RUNNING: Agent is running. - // - WAITING: Agent encountered error and will be restarted automatically soon. + // - WAITING: Agent encountered error when running and will be restarted automatically soon. // - STOPPING: Agent is stopping. // - DONE: Agent finished. // - UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_INVALID STARTING RUNNING WAITING STOPPING DONE UNKNOWN] + // Enum: [AGENT_STATUS_INVALID STARTING INITIALIZATION_ERROR RUNNING WAITING STOPPING DONE UNKNOWN] Status *string `json:"status,omitempty"` // Listen port for scraping metrics (the same for several configurations). @@ -2263,7 +2280,7 @@ var addRdsOkBodyRdsExporterTypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_INVALID","STARTING","INITIALIZATION_ERROR","RUNNING","WAITING","STOPPING","DONE","UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -2279,6 +2296,9 @@ const ( // AddRDSOKBodyRDSExporterStatusSTARTING captures enum value "STARTING" AddRDSOKBodyRDSExporterStatusSTARTING string = "STARTING" + // AddRDSOKBodyRDSExporterStatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" + AddRDSOKBodyRDSExporterStatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // AddRDSOKBodyRDSExporterStatusRUNNING captures enum value "RUNNING" AddRDSOKBodyRDSExporterStatusRUNNING string = "RUNNING" diff --git a/api/managementpb/json/managementpb.json b/api/managementpb/json/managementpb.json index c1caad8511..28cda4a244 100644 --- a/api/managementpb/json/managementpb.json +++ b/api/managementpb/json/managementpb.json @@ -2730,12 +2730,13 @@ "x-order": 12 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -2820,12 +2821,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -3328,12 +3330,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -3454,12 +3457,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -3575,12 +3579,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -4445,12 +4450,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -4540,12 +4546,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -4640,12 +4647,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -5111,12 +5119,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -5620,12 +5629,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -5910,12 +5920,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -6010,12 +6021,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -6120,12 +6132,13 @@ "x-order": 3 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -6258,12 +6271,13 @@ "x-order": 10 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", diff --git a/api/swagger/swagger-dev.json b/api/swagger/swagger-dev.json index 6e10715828..ff8fe38d6e 100644 --- a/api/swagger/swagger-dev.json +++ b/api/swagger/swagger-dev.json @@ -4307,12 +4307,13 @@ "x-order": 6 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -4819,12 +4820,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -5153,12 +5155,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -5382,12 +5385,13 @@ "x-order": 5 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -5793,12 +5797,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -6078,12 +6083,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -6352,12 +6358,13 @@ "x-order": 8 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -6618,12 +6625,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -6896,12 +6904,13 @@ "x-order": 14 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -7147,12 +7156,13 @@ "x-order": 10 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -7388,12 +7398,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -7587,12 +7598,13 @@ "x-order": 5 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -7844,12 +7856,13 @@ "x-order": 6 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -8320,12 +8333,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -8619,12 +8633,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -8863,12 +8878,13 @@ "x-order": 5 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -9122,12 +9138,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -9393,12 +9410,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -9645,12 +9663,13 @@ "x-order": 8 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -9889,12 +9908,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -10139,12 +10159,13 @@ "x-order": 14 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -10368,12 +10389,13 @@ "x-order": 10 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -10592,12 +10614,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -10795,12 +10818,13 @@ "x-order": 5 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -10998,12 +11022,13 @@ "x-order": 1 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -11067,12 +11092,13 @@ "x-order": 5 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -11218,12 +11244,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -11353,12 +11380,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -11502,12 +11530,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -11644,12 +11673,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -11792,12 +11822,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -11913,12 +11944,13 @@ "x-order": 14 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -12003,12 +12035,13 @@ "x-order": 8 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -12098,12 +12131,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -12198,12 +12232,13 @@ "x-order": 10 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -12272,12 +12307,13 @@ "x-order": 5 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -12488,12 +12524,13 @@ "x-order": 6 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -12800,12 +12837,13 @@ "x-order": 1 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -12872,12 +12910,13 @@ "x-order": 5 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -13026,12 +13065,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -13164,12 +13204,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -13316,12 +13357,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -13461,12 +13503,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -13612,12 +13655,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -13736,12 +13780,13 @@ "x-order": 14 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -13829,12 +13874,13 @@ "x-order": 8 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -13927,12 +13973,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -14030,12 +14077,13 @@ "x-order": 10 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -14107,12 +14155,13 @@ "x-order": 5 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -14329,12 +14378,13 @@ "x-order": 6 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -27164,12 +27214,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -27306,12 +27357,13 @@ "x-order": 8 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -27802,12 +27854,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -27955,12 +28008,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -28076,12 +28130,13 @@ "x-order": 14 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -29343,12 +29398,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -29483,12 +29539,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -29583,12 +29640,13 @@ "x-order": 10 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -30010,12 +30068,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -30409,12 +30468,13 @@ "x-order": 5 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -30642,12 +30702,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -30795,12 +30856,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -30975,12 +31037,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -31115,12 +31178,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", diff --git a/api/swagger/swagger.json b/api/swagger/swagger.json index afb58c022a..d0457b3793 100644 --- a/api/swagger/swagger.json +++ b/api/swagger/swagger.json @@ -1463,12 +1463,13 @@ "x-order": 6 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -1975,12 +1976,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -2309,12 +2311,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -2538,12 +2541,13 @@ "x-order": 5 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -2949,12 +2953,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -3234,12 +3239,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -3508,12 +3514,13 @@ "x-order": 8 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -3774,12 +3781,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -4052,12 +4060,13 @@ "x-order": 14 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -4303,12 +4312,13 @@ "x-order": 10 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -4544,12 +4554,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -4743,12 +4754,13 @@ "x-order": 5 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -5000,12 +5012,13 @@ "x-order": 6 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -5476,12 +5489,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -5775,12 +5789,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -6019,12 +6034,13 @@ "x-order": 5 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -6278,12 +6294,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -6549,12 +6566,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -6801,12 +6819,13 @@ "x-order": 8 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -7045,12 +7064,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -7295,12 +7315,13 @@ "x-order": 14 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -7524,12 +7545,13 @@ "x-order": 10 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -7748,12 +7770,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -7951,12 +7974,13 @@ "x-order": 5 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -8154,12 +8178,13 @@ "x-order": 1 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -8223,12 +8248,13 @@ "x-order": 5 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -8374,12 +8400,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -8509,12 +8536,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -8658,12 +8686,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -8800,12 +8829,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -8948,12 +8978,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -9069,12 +9100,13 @@ "x-order": 14 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -9159,12 +9191,13 @@ "x-order": 8 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -9254,12 +9287,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -9354,12 +9388,13 @@ "x-order": 10 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -9428,12 +9463,13 @@ "x-order": 5 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -9644,12 +9680,13 @@ "x-order": 6 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -9956,12 +9993,13 @@ "x-order": 1 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -10028,12 +10066,13 @@ "x-order": 5 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -10182,12 +10221,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -10320,12 +10360,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -10472,12 +10513,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -10617,12 +10659,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -10768,12 +10811,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -10892,12 +10936,13 @@ "x-order": 14 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -10985,12 +11030,13 @@ "x-order": 8 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -11083,12 +11129,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -11186,12 +11233,13 @@ "x-order": 10 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -11263,12 +11311,13 @@ "x-order": 5 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -11485,12 +11534,13 @@ "x-order": 6 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -18787,12 +18837,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -18929,12 +18980,13 @@ "x-order": 8 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -19425,12 +19477,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -19578,12 +19631,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -19699,12 +19753,13 @@ "x-order": 14 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -20520,12 +20575,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -20660,12 +20716,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -20760,12 +20817,13 @@ "x-order": 10 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -21187,12 +21245,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -21586,12 +21645,13 @@ "x-order": 5 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -21819,12 +21879,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -21972,12 +22033,13 @@ "x-order": 13 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -22152,12 +22214,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", @@ -22292,12 +22355,13 @@ "x-order": 9 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - RUNNING: Agent is running.\n - WAITING: Agent encountered error when running and will be restarted automatically soon.\n - STOPPING: Agent is stopping.\n - DONE: Agent finished.\n - UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_INVALID", "enum": [ "AGENT_STATUS_INVALID", "STARTING", + "INITIALIZATION_ERROR", "RUNNING", "WAITING", "STOPPING", From 23c7814f2cc16327afeb2c88ebacc29e17ecf75b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Aug 2024 20:49:10 +0000 Subject: [PATCH 09/35] Bump github.com/grpc-ecosystem/grpc-gateway/v2 in /tools (#3158) Bumps [github.com/grpc-ecosystem/grpc-gateway/v2](https://github.com/grpc-ecosystem/grpc-gateway) from 2.21.0 to 2.22.0. - [Release notes](https://github.com/grpc-ecosystem/grpc-gateway/releases) - [Changelog](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/.goreleaser.yml) - [Commits](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.21.0...v2.22.0) --- updated-dependencies: - dependency-name: github.com/grpc-ecosystem/grpc-gateway/v2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tools/go.mod | 8 ++++---- tools/go.sum | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/tools/go.mod b/tools/go.mod index 0ebbb5c5aa..b0257f8a23 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -17,7 +17,7 @@ require ( github.com/go-openapi/runtime v0.25.0 github.com/go-openapi/spec v0.20.4 github.com/go-swagger/go-swagger v0.29.0 - github.com/grpc-ecosystem/grpc-gateway/v2 v2.21.0 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 github.com/jstemmer/go-junit-report v1.0.0 github.com/quasilyte/go-consistent v0.6.0 github.com/reviewdog/reviewdog v0.20.1 @@ -225,14 +225,14 @@ require ( golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa // indirect golang.org/x/mod v0.20.0 // indirect golang.org/x/net v0.28.0 // indirect - golang.org/x/oauth2 v0.21.0 // indirect + golang.org/x/oauth2 v0.22.0 // indirect golang.org/x/sync v0.8.0 // indirect golang.org/x/sys v0.24.0 // indirect golang.org/x/term v0.23.0 // indirect golang.org/x/text v0.17.0 // indirect golang.org/x/time v0.5.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240812133136-8ffd90a71988 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240812133136-8ffd90a71988 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect google.golang.org/grpc v1.65.0 // indirect gopkg.in/alecthomas/kingpin.v2 v2.2.6 // indirect gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/tools/go.sum b/tools/go.sum index 5295a51024..78334a9f92 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -442,8 +442,8 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.21.0 h1:CWyXh/jylQWp2dtiV33mY4iSSp6yf4lmn+c7/tN+ObI= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.21.0/go.mod h1:nCLIt0w3Ept2NwF8ThLmrppXsfT07oC8k0XNDxd8sVU= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= @@ -898,8 +898,8 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= -golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA= +golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/perf v0.0.0-20230717203022-1ba3a21238c9 h1:HPASJO/sBgVQqFwIsL7A5o5GfTRe30dOhyX94F+4as0= golang.org/x/perf v0.0.0-20230717203022-1ba3a21238c9/go.mod h1:UBKtEnL8aqnd+0JHqZ+2qoMDwtuy6cYhhKNoHLBiTQc= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1141,10 +1141,10 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto/googleapis/api v0.0.0-20240812133136-8ffd90a71988 h1:+/tmTy5zAieooKIXfzDm9KiA3Bv6JBwriRN9LY+yayk= -google.golang.org/genproto/googleapis/api v0.0.0-20240812133136-8ffd90a71988/go.mod h1:4+X6GvPs+25wZKbQq9qyAXrwIRExv7w0Ea6MgZLZiDM= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240812133136-8ffd90a71988 h1:V71AcdLZr2p8dC9dbOIMCpqi4EmRl8wUwnJzXXLmbmc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240812133136-8ffd90a71988/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= +google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= +google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 h1:e7S5W7MGGLaSu8j3YjdezkZ+m1/Nm0uRVRMEMGk26Xs= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v0.0.0-20170208002647-2a6bf6142e96/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= From 688dc917cc5060461548aea2f363a5415b52c47f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Aug 2024 20:57:43 +0000 Subject: [PATCH 10/35] Bump mvdan.cc/gofumpt from 0.6.0 to 0.7.0 in /tools (#3157) Bumps [mvdan.cc/gofumpt](https://github.com/mvdan/gofumpt) from 0.6.0 to 0.7.0. - [Release notes](https://github.com/mvdan/gofumpt/releases) - [Changelog](https://github.com/mvdan/gofumpt/blob/master/CHANGELOG.md) - [Commits](https://github.com/mvdan/gofumpt/compare/v0.6.0...v0.7.0) --- updated-dependencies: - dependency-name: mvdan.cc/gofumpt dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tools/go.mod | 2 +- tools/go.sum | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/tools/go.mod b/tools/go.mod index b0257f8a23..e7e99fe4ab 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -28,7 +28,7 @@ require ( google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 google.golang.org/protobuf v1.34.2 gopkg.in/reform.v1 v1.5.1 - mvdan.cc/gofumpt v0.6.0 + mvdan.cc/gofumpt v0.7.0 ) require ( diff --git a/tools/go.sum b/tools/go.sum index 78334a9f92..af6e3666b0 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -219,8 +219,8 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= -github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/frankban/quicktest v1.14.5 h1:dfYrrRyLtiqT9GyKXgdh+k4inNeTvmGbuSgZ3lx3GhA= +github.com/frankban/quicktest v1.14.5/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= @@ -285,6 +285,8 @@ github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/e github.com/go-openapi/validate v0.21.0 h1:+Wqk39yKOhfpLqNLEC0/eViCkzM5FVXVqrvt526+wcI= github.com/go-openapi/validate v0.21.0/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI= +github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= @@ -1213,8 +1215,8 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -mvdan.cc/gofumpt v0.6.0 h1:G3QvahNDmpD+Aek/bNOLrFR2XC6ZAdo62dZu65gmwGo= -mvdan.cc/gofumpt v0.6.0/go.mod h1:4L0wf+kgIPZtcCWXynNS2e6bhmj73umwnuXSZarixzA= +mvdan.cc/gofumpt v0.7.0 h1:bg91ttqXmi9y2xawvkuMXyvAA/1ZGJqYAEGjXuP0JXU= +mvdan.cc/gofumpt v0.7.0/go.mod h1:txVFJy/Sc/mvaycET54pV8SW8gWxTlUuGHVEcncmNUo= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= From f0a3cdc7f5ae839821c636453739bc2b5a8dea44 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Aug 2024 09:17:56 +0000 Subject: [PATCH 11/35] Bump @typescript-eslint/eslint-plugin from 8.1.0 to 8.2.0 in /cli-tests (#3161) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 8.1.0 to 8.2.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.2.0/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jiří Čtvrtka <62988319+JiriCtvrtka@users.noreply.github.com> Co-authored-by: Alex Demidoff --- cli-tests/package-lock.json | 120 ++++++++++++++++++------------------ cli-tests/package.json | 2 +- 2 files changed, 61 insertions(+), 61 deletions(-) diff --git a/cli-tests/package-lock.json b/cli-tests/package-lock.json index 60f9920b97..fda244e64c 100644 --- a/cli-tests/package-lock.json +++ b/cli-tests/package-lock.json @@ -20,7 +20,7 @@ "devDependencies": { "@types/promise-retry": "^1.1.3", "@types/shelljs": "^0.8.12", - "@typescript-eslint/eslint-plugin": "^8.1.0", + "@typescript-eslint/eslint-plugin": "^8.2.0", "@typescript-eslint/parser": "^7.18.0", "eslint": "8.57", "eslint-config-airbnb-base": "^15.0.0", @@ -251,16 +251,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.1.0.tgz", - "integrity": "sha512-LlNBaHFCEBPHyD4pZXb35mzjGkuGKXU5eeCA1SxvHfiRES0E82dOounfVpL4DCqYvJEKab0bZIA0gCRpdLKkCw==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.2.0.tgz", + "integrity": "sha512-02tJIs655em7fvt9gps/+4k4OsKULYGtLBPJfOsmOq1+3cdClYiF0+d6mHu6qDnTcg88wJBkcPLpQhq7FyDz0A==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.1.0", - "@typescript-eslint/type-utils": "8.1.0", - "@typescript-eslint/utils": "8.1.0", - "@typescript-eslint/visitor-keys": "8.1.0", + "@typescript-eslint/scope-manager": "8.2.0", + "@typescript-eslint/type-utils": "8.2.0", + "@typescript-eslint/utils": "8.2.0", + "@typescript-eslint/visitor-keys": "8.2.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -284,13 +284,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.1.0.tgz", - "integrity": "sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz", + "integrity": "sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.1.0", - "@typescript-eslint/visitor-keys": "8.1.0" + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/visitor-keys": "8.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -301,9 +301,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz", - "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.2.0.tgz", + "integrity": "sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -314,12 +314,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.1.0.tgz", - "integrity": "sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz", + "integrity": "sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.1.0", + "@typescript-eslint/types": "8.2.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -376,13 +376,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.1.0.tgz", - "integrity": "sha512-oLYvTxljVvsMnldfl6jIKxTaU7ok7km0KDrwOt1RHYu6nxlhN3TIx8k5Q52L6wR33nOwDgM7VwW1fT1qMNfFIA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.2.0.tgz", + "integrity": "sha512-g1CfXGFMQdT5S+0PSO0fvGXUaiSkl73U1n9LTK5aRAFnPlJ8dLKkXr4AaLFvPedW8lVDoMgLLE3JN98ZZfsj0w==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "8.1.0", - "@typescript-eslint/utils": "8.1.0", + "@typescript-eslint/typescript-estree": "8.2.0", + "@typescript-eslint/utils": "8.2.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -400,9 +400,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz", - "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.2.0.tgz", + "integrity": "sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -413,13 +413,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.1.0.tgz", - "integrity": "sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz", + "integrity": "sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.1.0", - "@typescript-eslint/visitor-keys": "8.1.0", + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/visitor-keys": "8.2.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -441,12 +441,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.1.0.tgz", - "integrity": "sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz", + "integrity": "sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.1.0", + "@typescript-eslint/types": "8.2.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -547,15 +547,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.1.0.tgz", - "integrity": "sha512-ypRueFNKTIFwqPeJBfeIpxZ895PQhNyH4YID6js0UoBImWYoSjBsahUn9KMiJXh94uOjVBgHD9AmkyPsPnFwJA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.2.0.tgz", + "integrity": "sha512-O46eaYKDlV3TvAVDNcoDzd5N550ckSe8G4phko++OCSC1dYIb9LTc3HDGYdWqWIAT5qDUKphO6sd9RrpIJJPfg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.1.0", - "@typescript-eslint/types": "8.1.0", - "@typescript-eslint/typescript-estree": "8.1.0" + "@typescript-eslint/scope-manager": "8.2.0", + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/typescript-estree": "8.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -569,13 +569,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.1.0.tgz", - "integrity": "sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz", + "integrity": "sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.1.0", - "@typescript-eslint/visitor-keys": "8.1.0" + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/visitor-keys": "8.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -586,9 +586,9 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz", - "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.2.0.tgz", + "integrity": "sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -599,13 +599,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.1.0.tgz", - "integrity": "sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz", + "integrity": "sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.1.0", - "@typescript-eslint/visitor-keys": "8.1.0", + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/visitor-keys": "8.2.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -627,12 +627,12 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.1.0.tgz", - "integrity": "sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz", + "integrity": "sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.1.0", + "@typescript-eslint/types": "8.2.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { diff --git a/cli-tests/package.json b/cli-tests/package.json index 7e86a6a310..6227b1e765 100644 --- a/cli-tests/package.json +++ b/cli-tests/package.json @@ -24,7 +24,7 @@ "devDependencies": { "@types/promise-retry": "^1.1.3", "@types/shelljs": "^0.8.12", - "@typescript-eslint/eslint-plugin": "^8.1.0", + "@typescript-eslint/eslint-plugin": "^8.2.0", "@typescript-eslint/parser": "^7.18.0", "eslint": "8.57", "eslint-config-airbnb-base": "^15.0.0", From 421bebbbbc0232e32ca15e72bfefb441b28d9e4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Aug 2024 09:42:47 +0000 Subject: [PATCH 12/35] Bump github.com/hashicorp/go-version from 1.6.0 to 1.7.0 (#3144) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [github.com/hashicorp/go-version](https://github.com/hashicorp/go-version) from 1.6.0 to 1.7.0. - [Release notes](https://github.com/hashicorp/go-version/releases) - [Changelog](https://github.com/hashicorp/go-version/blob/main/CHANGELOG.md) - [Commits](https://github.com/hashicorp/go-version/compare/v1.6.0...v1.7.0) --- updated-dependencies: - dependency-name: github.com/hashicorp/go-version dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jiří Čtvrtka <62988319+JiriCtvrtka@users.noreply.github.com> Co-authored-by: Alex Demidoff --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 241b5545fd..6e4617f2a1 100644 --- a/go.mod +++ b/go.mod @@ -48,7 +48,7 @@ require ( github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 github.com/grpc-ecosystem/grpc-gateway/v2 v2.21.0 - github.com/hashicorp/go-version v1.6.0 + github.com/hashicorp/go-version v1.7.0 github.com/hashicorp/raft v1.7.0 github.com/jmoiron/sqlx v1.3.5 github.com/jotaen/kong-completion v0.0.5 diff --git a/go.sum b/go.sum index 046e96af53..d9594e25a2 100644 --- a/go.sum +++ b/go.sum @@ -442,8 +442,8 @@ github.com/hashicorp/go-sockaddr v1.0.6/go.mod h1:uoUUmtwU7n9Dv3O4SNLeFvg0SxQ3ly github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= -github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= +github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.6.0 h1:uL2shRDx7RTrOrTCUZEGP/wJUFiUI8QT6E7z5o8jga4= From f46bd91e89ae834f5179bde7c662a381cd57e494 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Aug 2024 10:31:41 +0000 Subject: [PATCH 13/35] Bump golang from 1.22 to 1.23 (#3151) Bumps golang from 1.22 to 1.23. --- updated-dependencies: - dependency-name: golang dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 64db89a18d..943274a2f3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # This Dockerfile is used only for API tests. -FROM golang:1.22 +FROM golang:1.23 RUN export GOPATH=$(go env GOPATH) && \ mkdir -p $GOPATH/src/github.com/percona/pmm From c7fe1b2387c97230b5b62f2986510a93a94bd6b0 Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Wed, 28 Aug 2024 16:44:51 +0300 Subject: [PATCH 14/35] PMM-7 Move build-submodules script to monorepo (#3185) --- build/scripts/build-submodules | 44 ++++++++++++++++------------------ 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/build/scripts/build-submodules b/build/scripts/build-submodules index 34134e794b..e7dc1d7c47 100755 --- a/build/scripts/build-submodules +++ b/build/scripts/build-submodules @@ -1,9 +1,15 @@ #!/bin/bash set -o errexit +git submodule update --init --jobs 10 +git submodule status + if [ -s ci.yml ]; then - sudo rm -rf results tmp || : + if [ -f /home/ec2-user/venv/bin/activate ]; then + source /home/ec2-user/venv/bin/activate + fi python3 ci.py + cat .git-sources . ./.git-sources echo $pmm_commit > apiCommitSha echo $pmm_branch > apiBranch @@ -13,30 +19,22 @@ if [ -s ci.yml ]; then echo $pmm_ui_tests_branch > pmmUITestBranch echo $pmm_ui_tests_commit > pmmUITestsCommitSha else - sudo rm -rf results tmp || : - git reset --hard - git clean -fdx - git submodule foreach --recursive git reset --hard - git submodule foreach --recursive git clean -fdx - git submodule status - export commit_sha=$(git submodule status | grep 'pmm-managed' | awk -F ' ' '{print $1}') - export api_tests_commit_sha=$(git submodule status | grep 'pmm' | awk -F ' ' '{print $1}') - export api_tests_branch=$(git config -f .gitmodules submodule.pmm.branch) - export api_tests_url=$(git config -f .gitmodules submodule.pmm.url) - echo $api_tests_commit_sha > apiCommitSha - echo $api_tests_branch > apiBranch - echo $api_tests_url > apiURL - cat apiBranch - cat apiURL - export pmm_qa_commit_sha=$(git submodule status | grep 'pmm-qa' | awk -F ' ' '{print $1}') - export pmm_qa_branch=$(git config -f .gitmodules submodule.pmm-qa.branch) + # Define variables using git queries, i.e. w/o python + pmm_commit=$(git submodule status | grep 'sources/pmm/src' | awk -F ' ' '{print $1}') + echo $pmm_commit > apiCommitSha + pmm_branch=$(git config -f .gitmodules submodule.pmm.branch) + echo $pmm_branch > apiBranch + pmm_url=$(git config -f .gitmodules submodule.pmm.url) + echo $pmm_url > apiURL + pmm_qa_branch=$(git config -f .gitmodules submodule.pmm-qa.branch) echo $pmm_qa_branch > pmmQABranch - echo $pmm_qa_commit_sha > pmmQACommitSha - export pmm_ui_tests_commit_sha=$(git submodule status | grep 'pmm-ui-tests' | awk -F ' ' '{print $1}') - export pmm_ui_tests_branch=$(git config -f .gitmodules submodule.pmm-ui-tests.branch) + pmm_qa_commit=$(git submodule status | grep 'pmm-qa' | awk -F ' ' '{print $1}') + echo $pmm_qa_commit > pmmQACommitSha + pmm_ui_tests_branch=$(git config -f .gitmodules submodule.pmm-ui-tests.branch) echo $pmm_ui_tests_branch > pmmUITestBranch - echo $pmm_ui_tests_commit_sha > pmmUITestsCommitSha + pmm_ui_tests_commit=$(git submodule status | grep 'pmm-ui-tests' | awk -F ' ' '{print $1}') + echo $pmm_ui_tests_commit > pmmUITestsCommitSha fi -export fb_commit_sha=$(git rev-parse HEAD) +fb_commit_sha=$(git rev-parse HEAD) echo $fb_commit_sha > fbCommitSha From 394c247be8ec75569d834b5eec892b6b287c8e5e Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Wed, 28 Aug 2024 16:45:27 +0300 Subject: [PATCH 15/35] PMM-7 Move build-submodules script to monorepo (#3184) --- build/scripts/build-submodules | 44 ++++++++++++++++------------------ 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/build/scripts/build-submodules b/build/scripts/build-submodules index 34134e794b..e7dc1d7c47 100755 --- a/build/scripts/build-submodules +++ b/build/scripts/build-submodules @@ -1,9 +1,15 @@ #!/bin/bash set -o errexit +git submodule update --init --jobs 10 +git submodule status + if [ -s ci.yml ]; then - sudo rm -rf results tmp || : + if [ -f /home/ec2-user/venv/bin/activate ]; then + source /home/ec2-user/venv/bin/activate + fi python3 ci.py + cat .git-sources . ./.git-sources echo $pmm_commit > apiCommitSha echo $pmm_branch > apiBranch @@ -13,30 +19,22 @@ if [ -s ci.yml ]; then echo $pmm_ui_tests_branch > pmmUITestBranch echo $pmm_ui_tests_commit > pmmUITestsCommitSha else - sudo rm -rf results tmp || : - git reset --hard - git clean -fdx - git submodule foreach --recursive git reset --hard - git submodule foreach --recursive git clean -fdx - git submodule status - export commit_sha=$(git submodule status | grep 'pmm-managed' | awk -F ' ' '{print $1}') - export api_tests_commit_sha=$(git submodule status | grep 'pmm' | awk -F ' ' '{print $1}') - export api_tests_branch=$(git config -f .gitmodules submodule.pmm.branch) - export api_tests_url=$(git config -f .gitmodules submodule.pmm.url) - echo $api_tests_commit_sha > apiCommitSha - echo $api_tests_branch > apiBranch - echo $api_tests_url > apiURL - cat apiBranch - cat apiURL - export pmm_qa_commit_sha=$(git submodule status | grep 'pmm-qa' | awk -F ' ' '{print $1}') - export pmm_qa_branch=$(git config -f .gitmodules submodule.pmm-qa.branch) + # Define variables using git queries, i.e. w/o python + pmm_commit=$(git submodule status | grep 'sources/pmm/src' | awk -F ' ' '{print $1}') + echo $pmm_commit > apiCommitSha + pmm_branch=$(git config -f .gitmodules submodule.pmm.branch) + echo $pmm_branch > apiBranch + pmm_url=$(git config -f .gitmodules submodule.pmm.url) + echo $pmm_url > apiURL + pmm_qa_branch=$(git config -f .gitmodules submodule.pmm-qa.branch) echo $pmm_qa_branch > pmmQABranch - echo $pmm_qa_commit_sha > pmmQACommitSha - export pmm_ui_tests_commit_sha=$(git submodule status | grep 'pmm-ui-tests' | awk -F ' ' '{print $1}') - export pmm_ui_tests_branch=$(git config -f .gitmodules submodule.pmm-ui-tests.branch) + pmm_qa_commit=$(git submodule status | grep 'pmm-qa' | awk -F ' ' '{print $1}') + echo $pmm_qa_commit > pmmQACommitSha + pmm_ui_tests_branch=$(git config -f .gitmodules submodule.pmm-ui-tests.branch) echo $pmm_ui_tests_branch > pmmUITestBranch - echo $pmm_ui_tests_commit_sha > pmmUITestsCommitSha + pmm_ui_tests_commit=$(git submodule status | grep 'pmm-ui-tests' | awk -F ' ' '{print $1}') + echo $pmm_ui_tests_commit > pmmUITestsCommitSha fi -export fb_commit_sha=$(git rev-parse HEAD) +fb_commit_sha=$(git rev-parse HEAD) echo $fb_commit_sha > fbCommitSha From 11cba1b1ddedd3888dd8d0ff42ca20ae6ea6a401 Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Wed, 28 Aug 2024 17:48:27 +0300 Subject: [PATCH 16/35] PMM-7 Fix agent API test (#3177) --- api-tests/management/services/agent_test.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/api-tests/management/services/agent_test.go b/api-tests/management/services/agent_test.go index 89ea9c6ebd..a88326a97b 100644 --- a/api-tests/management/services/agent_test.go +++ b/api-tests/management/services/agent_test.go @@ -20,7 +20,6 @@ import ( "testing" "time" - "github.com/AlekSi/pointer" "github.com/stretchr/testify/require" pmmapitests "github.com/percona/pmm/api-tests" @@ -33,14 +32,14 @@ func TestListAgentVersions(t *testing.T) { t.Cleanup(func() { cancel() }) t.Run("PMM Agent needs no update", func(t *testing.T) { - listAgentVersionsOK, err := client.Default.ManagementService.ListAgentVersions( + resp, err := client.Default.ManagementService.ListAgentVersions( &mgmtSvc.ListAgentVersionsParams{ Context: ctx, }) require.NoError(t, err) - require.Len(t, listAgentVersionsOK.Payload.AgentVersions, 1) + require.Len(t, resp.Payload.AgentVersions, 1) - expected := pointer.ToString(mgmtSvc.ListAgentVersionsOKBodyAgentVersionsItems0SeverityUPDATESEVERITYUPTODATE) - require.Equal(t, expected, listAgentVersionsOK.Payload.AgentVersions[0].Severity) + expected := mgmtSvc.ListAgentVersionsOKBodyAgentVersionsItems0SeverityUPDATESEVERITYUPTODATE + require.Equal(t, expected, *resp.Payload.AgentVersions[0].Severity) }) } From 2552fa6cd9c7dc47437119a2496582c23bd59dc9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 29 Aug 2024 10:15:05 +0100 Subject: [PATCH 17/35] Bump @typescript-eslint/eslint-plugin from 8.2.0 to 8.3.0 in /cli-tests (#3188) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 8.2.0 to 8.3.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.3.0/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- cli-tests/package-lock.json | 130 ++++++++++++++++++------------------ cli-tests/package.json | 2 +- 2 files changed, 66 insertions(+), 66 deletions(-) diff --git a/cli-tests/package-lock.json b/cli-tests/package-lock.json index fda244e64c..de21e9abfb 100644 --- a/cli-tests/package-lock.json +++ b/cli-tests/package-lock.json @@ -20,7 +20,7 @@ "devDependencies": { "@types/promise-retry": "^1.1.3", "@types/shelljs": "^0.8.12", - "@typescript-eslint/eslint-plugin": "^8.2.0", + "@typescript-eslint/eslint-plugin": "^8.3.0", "@typescript-eslint/parser": "^7.18.0", "eslint": "8.57", "eslint-config-airbnb-base": "^15.0.0", @@ -251,16 +251,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.2.0.tgz", - "integrity": "sha512-02tJIs655em7fvt9gps/+4k4OsKULYGtLBPJfOsmOq1+3cdClYiF0+d6mHu6qDnTcg88wJBkcPLpQhq7FyDz0A==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.3.0.tgz", + "integrity": "sha512-FLAIn63G5KH+adZosDYiutqkOkYEx0nvcwNNfJAf+c7Ae/H35qWwTYvPZUKFj5AS+WfHG/WJJfWnDnyNUlp8UA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.2.0", - "@typescript-eslint/type-utils": "8.2.0", - "@typescript-eslint/utils": "8.2.0", - "@typescript-eslint/visitor-keys": "8.2.0", + "@typescript-eslint/scope-manager": "8.3.0", + "@typescript-eslint/type-utils": "8.3.0", + "@typescript-eslint/utils": "8.3.0", + "@typescript-eslint/visitor-keys": "8.3.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -284,13 +284,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz", - "integrity": "sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.3.0.tgz", + "integrity": "sha512-mz2X8WcN2nVu5Hodku+IR8GgCOl4C0G/Z1ruaWN4dgec64kDBabuXyPAr+/RgJtumv8EEkqIzf3X2U5DUKB2eg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.2.0", - "@typescript-eslint/visitor-keys": "8.2.0" + "@typescript-eslint/types": "8.3.0", + "@typescript-eslint/visitor-keys": "8.3.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -301,9 +301,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.2.0.tgz", - "integrity": "sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.3.0.tgz", + "integrity": "sha512-y6sSEeK+facMaAyixM36dQ5NVXTnKWunfD1Ft4xraYqxP0lC0POJmIaL/mw72CUMqjY9qfyVfXafMeaUj0noWw==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -314,12 +314,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz", - "integrity": "sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.3.0.tgz", + "integrity": "sha512-RmZwrTbQ9QveF15m/Cl28n0LXD6ea2CjkhH5rQ55ewz3H24w+AMCJHPVYaZ8/0HoG8Z3cLLFFycRXxeO2tz9FA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/types": "8.3.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -376,13 +376,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.2.0.tgz", - "integrity": "sha512-g1CfXGFMQdT5S+0PSO0fvGXUaiSkl73U1n9LTK5aRAFnPlJ8dLKkXr4AaLFvPedW8lVDoMgLLE3JN98ZZfsj0w==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.3.0.tgz", + "integrity": "sha512-wrV6qh//nLbfXZQoj32EXKmwHf4b7L+xXLrP3FZ0GOUU72gSvLjeWUl5J5Ue5IwRxIV1TfF73j/eaBapxx99Lg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "8.2.0", - "@typescript-eslint/utils": "8.2.0", + "@typescript-eslint/typescript-estree": "8.3.0", + "@typescript-eslint/utils": "8.3.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -400,9 +400,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.2.0.tgz", - "integrity": "sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.3.0.tgz", + "integrity": "sha512-y6sSEeK+facMaAyixM36dQ5NVXTnKWunfD1Ft4xraYqxP0lC0POJmIaL/mw72CUMqjY9qfyVfXafMeaUj0noWw==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -413,15 +413,15 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz", - "integrity": "sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.3.0.tgz", + "integrity": "sha512-Mq7FTHl0R36EmWlCJWojIC1qn/ZWo2YiWYc1XVtasJ7FIgjo0MVv9rZWXEE7IK2CGrtwe1dVOxWwqXUdNgfRCA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.2.0", - "@typescript-eslint/visitor-keys": "8.2.0", + "@typescript-eslint/types": "8.3.0", + "@typescript-eslint/visitor-keys": "8.3.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", @@ -441,12 +441,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz", - "integrity": "sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.3.0.tgz", + "integrity": "sha512-RmZwrTbQ9QveF15m/Cl28n0LXD6ea2CjkhH5rQ55ewz3H24w+AMCJHPVYaZ8/0HoG8Z3cLLFFycRXxeO2tz9FA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/types": "8.3.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -547,15 +547,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.2.0.tgz", - "integrity": "sha512-O46eaYKDlV3TvAVDNcoDzd5N550ckSe8G4phko++OCSC1dYIb9LTc3HDGYdWqWIAT5qDUKphO6sd9RrpIJJPfg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.3.0.tgz", + "integrity": "sha512-F77WwqxIi/qGkIGOGXNBLV7nykwfjLsdauRB/DOFPdv6LTF3BHHkBpq81/b5iMPSF055oO2BiivDJV4ChvNtXA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.2.0", - "@typescript-eslint/types": "8.2.0", - "@typescript-eslint/typescript-estree": "8.2.0" + "@typescript-eslint/scope-manager": "8.3.0", + "@typescript-eslint/types": "8.3.0", + "@typescript-eslint/typescript-estree": "8.3.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -569,13 +569,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz", - "integrity": "sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.3.0.tgz", + "integrity": "sha512-mz2X8WcN2nVu5Hodku+IR8GgCOl4C0G/Z1ruaWN4dgec64kDBabuXyPAr+/RgJtumv8EEkqIzf3X2U5DUKB2eg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.2.0", - "@typescript-eslint/visitor-keys": "8.2.0" + "@typescript-eslint/types": "8.3.0", + "@typescript-eslint/visitor-keys": "8.3.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -586,9 +586,9 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.2.0.tgz", - "integrity": "sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.3.0.tgz", + "integrity": "sha512-y6sSEeK+facMaAyixM36dQ5NVXTnKWunfD1Ft4xraYqxP0lC0POJmIaL/mw72CUMqjY9qfyVfXafMeaUj0noWw==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -599,15 +599,15 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz", - "integrity": "sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.3.0.tgz", + "integrity": "sha512-Mq7FTHl0R36EmWlCJWojIC1qn/ZWo2YiWYc1XVtasJ7FIgjo0MVv9rZWXEE7IK2CGrtwe1dVOxWwqXUdNgfRCA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.2.0", - "@typescript-eslint/visitor-keys": "8.2.0", + "@typescript-eslint/types": "8.3.0", + "@typescript-eslint/visitor-keys": "8.3.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", @@ -627,12 +627,12 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz", - "integrity": "sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.3.0.tgz", + "integrity": "sha512-RmZwrTbQ9QveF15m/Cl28n0LXD6ea2CjkhH5rQ55ewz3H24w+AMCJHPVYaZ8/0HoG8Z3cLLFFycRXxeO2tz9FA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/types": "8.3.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -1513,9 +1513,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", diff --git a/cli-tests/package.json b/cli-tests/package.json index 6227b1e765..ad94a3582c 100644 --- a/cli-tests/package.json +++ b/cli-tests/package.json @@ -24,7 +24,7 @@ "devDependencies": { "@types/promise-retry": "^1.1.3", "@types/shelljs": "^0.8.12", - "@typescript-eslint/eslint-plugin": "^8.2.0", + "@typescript-eslint/eslint-plugin": "^8.3.0", "@typescript-eslint/parser": "^7.18.0", "eslint": "8.57", "eslint-config-airbnb-base": "^15.0.0", From 88cd441867a32dadd6029ffce9f61db5ed1c4933 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 29 Aug 2024 12:29:13 +0000 Subject: [PATCH 18/35] Bump github.com/bufbuild/buf from 1.37.0 to 1.39.0 in /tools (#3183) Bumps [github.com/bufbuild/buf](https://github.com/bufbuild/buf) from 1.37.0 to 1.39.0. - [Release notes](https://github.com/bufbuild/buf/releases) - [Changelog](https://github.com/bufbuild/buf/blob/main/CHANGELOG.md) - [Commits](https://github.com/bufbuild/buf/compare/v1.37.0...v1.39.0) --- updated-dependencies: - dependency-name: github.com/bufbuild/buf dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tools/go.mod | 34 +++++++++++++---------- tools/go.sum | 78 +++++++++++++++++++++++++++++----------------------- 2 files changed, 64 insertions(+), 48 deletions(-) diff --git a/tools/go.mod b/tools/go.mod index e7e99fe4ab..bfa9350bf8 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -10,7 +10,7 @@ require ( github.com/BurntSushi/go-sumtype v0.0.0-20190304192233-fcb4a6205bdc github.com/Percona-Lab/swagger-order v0.0.0-20191002141859-166b3973d026 github.com/apache/skywalking-eyes v0.6.0 - github.com/bufbuild/buf v1.37.0 + github.com/bufbuild/buf v1.39.0 github.com/daixiang0/gci v0.13.0 github.com/envoyproxy/protoc-gen-validate v1.1.0 github.com/go-delve/delve v1.23.0 @@ -33,8 +33,8 @@ require ( require ( buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240717164558-a6c49f84cc0f.2 // indirect - buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240801134127-09fbc17f7c9e.1 // indirect - buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240801134127-09fbc17f7c9e.2 // indirect + buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240821192916-45ba72cdd479.1 // indirect + buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240821192916-45ba72cdd479.2 // indirect code.gitea.io/sdk/gitea v0.18.0 // indirect connectrpc.com/connect v1.16.2 // indirect connectrpc.com/otelconnect v0.7.1 // indirect @@ -44,7 +44,7 @@ require ( github.com/Masterminds/semver/v3 v3.2.0 // indirect github.com/Masterminds/sprig/v3 v3.2.3 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/Microsoft/hcsshim v0.12.5 // indirect + github.com/Microsoft/hcsshim v0.12.6 // indirect github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect github.com/aclements/go-moremath v0.0.0-20210112150236-f10218a38794 // indirect github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect @@ -54,8 +54,8 @@ require ( github.com/bmatcuk/doublestar/v2 v2.0.4 // indirect github.com/bufbuild/protocompile v0.14.0 // indirect github.com/bufbuild/protoplugin v0.0.0-20240323223605-e2735f6c31ee // indirect - github.com/bufbuild/protovalidate-go v0.6.3 // indirect - github.com/bufbuild/protoyaml-go v0.1.10 // indirect + github.com/bufbuild/protovalidate-go v0.6.4 // indirect + github.com/bufbuild/protoyaml-go v0.1.11 // indirect github.com/chigopher/pathlib v0.19.1 // indirect github.com/cilium/ebpf v0.11.0 // indirect github.com/cloudflare/circl v1.3.7 // indirect @@ -104,11 +104,13 @@ require ( github.com/go-openapi/validate v0.21.0 // indirect github.com/go-sql-driver/mysql v1.5.0 // indirect github.com/go-stack/stack v1.8.1 // indirect + github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/go-toolsmith/astcast v1.0.0 // indirect github.com/go-toolsmith/astequal v1.0.1 // indirect github.com/go-toolsmith/astinfo v1.0.0 // indirect github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5 // indirect github.com/go-toolsmith/typep v1.0.2 // indirect + github.com/gofrs/flock v0.12.1 // indirect github.com/gofrs/uuid v4.4.0+incompatible // indirect github.com/gofrs/uuid/v5 v5.3.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -174,6 +176,7 @@ require ( github.com/moby/term v0.5.0 // indirect github.com/morikuni/aec v1.0.0 // indirect github.com/oklog/ulid v1.3.1 // indirect + github.com/onsi/ginkgo/v2 v2.20.1 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0 // indirect github.com/opencontainers/runtime-spec v1.2.0 // indirect @@ -183,6 +186,8 @@ require ( github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pkg/profile v1.7.0 // indirect + github.com/quic-go/qpack v0.4.0 // indirect + github.com/quic-go/quic-go v0.46.0 // indirect github.com/reva2/bitbucket-insights-api v1.0.0 // indirect github.com/reviewdog/errorformat v0.0.0-20240608101709-1d3280ed6bd4 // indirect github.com/reviewdog/go-bitbucket v0.0.0-20201024094602-708c3f6a7de0 // indirect @@ -209,20 +214,21 @@ require ( github.com/xanzy/ssh-agent v0.3.3 // indirect go.mongodb.org/mongo-driver v1.9.0 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect - go.opentelemetry.io/otel v1.28.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect + go.opentelemetry.io/otel v1.29.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0 // indirect - go.opentelemetry.io/otel/metric v1.28.0 // indirect - go.opentelemetry.io/otel/sdk v1.28.0 // indirect - go.opentelemetry.io/otel/trace v1.28.0 // indirect + go.opentelemetry.io/otel/metric v1.29.0 // indirect + go.opentelemetry.io/otel/sdk v1.29.0 // indirect + go.opentelemetry.io/otel/trace v1.29.0 // indirect go.starlark.net v0.0.0-20231101134539-556fd59b42f6 // indirect go.uber.org/atomic v1.11.0 // indirect + go.uber.org/mock v0.4.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/arch v0.6.0 // indirect golang.org/x/build v0.0.0-20240712162709-0b82a206aadf // indirect golang.org/x/crypto v0.26.0 // indirect - golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa // indirect + golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 // indirect golang.org/x/mod v0.20.0 // indirect golang.org/x/net v0.28.0 // indirect golang.org/x/oauth2 v0.22.0 // indirect @@ -231,8 +237,8 @@ require ( golang.org/x/term v0.23.0 // indirect golang.org/x/text v0.17.0 // indirect golang.org/x/time v0.5.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240823204242-4ba0660f739c // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240823204242-4ba0660f739c // indirect google.golang.org/grpc v1.65.0 // indirect gopkg.in/alecthomas/kingpin.v2 v2.2.6 // indirect gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/tools/go.sum b/tools/go.sum index af6e3666b0..20fe5baa8e 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -1,9 +1,9 @@ buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240717164558-a6c49f84cc0f.2 h1:SZRVx928rbYZ6hEKUIN+vtGDkl7uotABRWGY4OAg5gM= buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240717164558-a6c49f84cc0f.2/go.mod h1:ylS4c28ACSI59oJrOdW4pHS4n0Hw4TgSPHn8rpHl4Yw= -buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240801134127-09fbc17f7c9e.1 h1:IV4si5SvDJSGQ/kpcnmOFKDKh8erG6zPy+NhmxlYdxM= -buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240801134127-09fbc17f7c9e.1/go.mod h1:4isTSbIhQ6wERY99Kvds0UuOcFMUoPDBPZfaAKrUnSE= -buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240801134127-09fbc17f7c9e.2 h1:7fUEOBrfNd50BMAls2tLn9RhttbDIfxRXML99YaLqKY= -buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240801134127-09fbc17f7c9e.2/go.mod h1:psseUmlKRo9v5LZJtR/aTpdTLuyp9o3X7rnLT87SZEo= +buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240821192916-45ba72cdd479.1 h1:QaJ6UkpvlGo4dBXR41vLRfPiKungbg7brjmbBC/k6Ig= +buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240821192916-45ba72cdd479.1/go.mod h1:oQsMFNU3YzxxjRS6O68UkcF/A+pXdXqQNcUfQEBTWcw= +buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240821192916-45ba72cdd479.2 h1:C3CTZTucEUm7i0O2tAM8GSlg23GnQYcljX1b1Jcpsro= +buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240821192916-45ba72cdd479.2/go.mod h1:psseUmlKRo9v5LZJtR/aTpdTLuyp9o3X7rnLT87SZEo= cloud.google.com/go v0.0.0-20170206221025-ce650573d812/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= @@ -72,8 +72,8 @@ github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBa github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= -github.com/Microsoft/hcsshim v0.12.5 h1:bpTInLlDy/nDRWFVcefDZZ1+U8tS+rz3MxjKgu9boo0= -github.com/Microsoft/hcsshim v0.12.5/go.mod h1:tIUGego4G1EN5Hb6KC90aDYiUI2dqLSTTOCjVNpOgZ8= +github.com/Microsoft/hcsshim v0.12.6 h1:qEnZjoHXv+4/s0LmKZWE0/AiZmMWEIkFfWBSf1a0wlU= +github.com/Microsoft/hcsshim v0.12.6/go.mod h1:ZABCLVcvLMjIkzr9rUGcQ1QA0p0P3Ps+d3N1g2DsFfk= github.com/Percona-Lab/spec v0.20.5-percona h1:ViCJVq52QIZxpP8/Nv4/nIed+WnqUirNjPtXvHhset4= github.com/Percona-Lab/spec v0.20.5-percona/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= github.com/Percona-Lab/swagger-order v0.0.0-20191002141859-166b3973d026 h1:jvuxsQEuFpoSVw9HCP4kSF52BXYzTvB7CA3eryQXaRc= @@ -108,19 +108,19 @@ github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/brianvoe/gofakeit v3.18.0+incompatible h1:wDOmHc9DLG4nRjUVVaxA+CEglKOW72Y5+4WNxUIkjM8= github.com/brianvoe/gofakeit v3.18.0+incompatible/go.mod h1:kfwdRA90vvNhPutZWfH7WPaDzUjz+CZFqG+rPkOjGOc= -github.com/bufbuild/buf v1.37.0 h1:lKQ2LahOOMzLFFAg1IMQj12gPhAfLWGr6z6jfP6p7Bw= -github.com/bufbuild/buf v1.37.0/go.mod h1:uFHazPjAiKVpyK9Td/4FeMzQb8v5X7M4fo255kw/W6U= +github.com/bufbuild/buf v1.39.0 h1:f8bpK/8+cpgbppSyK4RKe0L1FxLqWcbgnHnWgXpVM7s= +github.com/bufbuild/buf v1.39.0/go.mod h1:1P0U+x/ky1KhpK7o7mGraDAYjQUG7710wk5lEZFWsTA= github.com/bufbuild/protocompile v0.14.0 h1:z3DW4IvXE5G/uTOnSQn+qwQQxvhckkTWLS/0No/o7KU= github.com/bufbuild/protocompile v0.14.0/go.mod h1:N6J1NYzkspJo3ZwyL4Xjvli86XOj1xq4qAasUFxGups= github.com/bufbuild/protoplugin v0.0.0-20240323223605-e2735f6c31ee h1:E6ET8YUcYJ1lAe6ctR3as7yqzW2BNItDFnaB5zQq/8M= github.com/bufbuild/protoplugin v0.0.0-20240323223605-e2735f6c31ee/go.mod h1:HjGFxsck9RObrTJp2hXQZfWhPgZqnR6sR1U5fCA/Kus= -github.com/bufbuild/protovalidate-go v0.6.3 h1:wxQyzW035zM16Binbaz/nWAzS12dRIXhZdSUWRY7Fv0= -github.com/bufbuild/protovalidate-go v0.6.3/go.mod h1:J4PtwP9Z2YAGgB0+o+tTWEDtLtXvz/gfhFZD8pbzM/U= -github.com/bufbuild/protoyaml-go v0.1.10 h1:gMwDSHNoInt0D6vvTUxAJSWvp87MJraTN7dxsR7C2z4= -github.com/bufbuild/protoyaml-go v0.1.10/go.mod h1:KCBItkvZOK/zwGueLdH1Wx1RLyFn5rCH7YjQrdty2Wc= +github.com/bufbuild/protovalidate-go v0.6.4 h1:QtNIz4LGclM3UArQv/R1AKNF7MO8wriT9v7b8Gnmqak= +github.com/bufbuild/protovalidate-go v0.6.4/go.mod h1:HlkVnkE/zVYZvHIG/a7QZuzqC9bSqHaOOTeRomYF0Q8= +github.com/bufbuild/protoyaml-go v0.1.11 h1:Iyixd6Y5dx6ws6Uh8APgC1lMyvXt710NayoY8cY0Vj8= +github.com/bufbuild/protoyaml-go v0.1.11/go.mod h1:KCBItkvZOK/zwGueLdH1Wx1RLyFn5rCH7YjQrdty2Wc= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= -github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/chigopher/pathlib v0.19.1 h1:RoLlUJc0CqBGwq239cilyhxPNLXTK+HXoASGyGznx5A= github.com/chigopher/pathlib v0.19.1/go.mod h1:tzC1dZLW8o33UQpWkNkhvPwL5n4yyFRFm/jL1YGWFvY= @@ -297,6 +297,8 @@ github.com/go-swagger/go-swagger v0.29.0 h1:z3YoZtLvS1Y8TE/PCat1VypcZxM0IgKLt0Nv github.com/go-swagger/go-swagger v0.29.0/go.mod h1:Z4GJzI+bHKKkGB2Ji1rawpi3/ldXX8CkzGIa9HAC5EE= github.com/go-swagger/scan-repo-boundary v0.0.0-20180623220736-973b3573c013 h1:l9rI6sNaZgNC0LnF3MiE+qTmyBA/tZAg1rtyrGbUMK0= github.com/go-swagger/scan-repo-boundary v0.0.0-20180623220736-973b3573c013/go.mod h1:b65mBPzqzZWxOZGxSWrqs4GInLIn+u99Q9q7p+GKni0= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= @@ -599,8 +601,10 @@ github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7P github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/onsi/ginkgo/v2 v2.20.1 h1:YlVIbqct+ZmnEph770q9Q7NVAz4wwIiVNahee6JyUzo= +github.com/onsi/ginkgo/v2 v2.20.1/go.mod h1:lG9ey2Z29hR41WMVthyJBGUBcBhGOtoPF2VFMvBXFCI= +github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= +github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= @@ -633,10 +637,14 @@ github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qR github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/quasilyte/go-consistent v0.6.0 h1:tY8DYfgM+7ADpOyr5X47i8hV/XbMNoucqnqZWVjI+rU= github.com/quasilyte/go-consistent v0.6.0/go.mod h1:dKYK1JZl3150J1+Jh4cDYPCIu2MqybUBi0YVW2b2E6c= +github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= +github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= +github.com/quic-go/quic-go v0.46.0 h1:uuwLClEEyk1DNvchH8uCByQVjo3yKL9opKulExNDs7Y= +github.com/quic-go/quic-go v0.46.0/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI= github.com/reva2/bitbucket-insights-api v1.0.0 h1:lpQ/Q7OmnG04w/EM77piOwZBxP41PeTlbytXxVrnplA= github.com/reva2/bitbucket-insights-api v1.0.0/go.mod h1:pLs+ki3MKUntrPryxaGIvpRLiEtBhwfJ/uvxQIMfqHU= github.com/reviewdog/errorformat v0.0.0-20240608101709-1d3280ed6bd4 h1:wFzV+/KigR9v01F8+cK/QyaMg6NgyfOOZaSquborhpY= @@ -746,22 +754,22 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= -go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= -go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= +go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw= +go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0 h1:9M3+rhx7kZCIQQhQRYaZCdNu1V73tm4TvXs2ntl98C4= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0/go.mod h1:noq80iT8rrHP1SfybmPiRGc9dc5M8RPmGvtwo7Oo7tc= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 h1:IeMeyr1aBvBiPVYihXIaeIZba6b8E1bYp7lbdxK8CQg= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0/go.mod h1:oVdCUtjq9MK9BlS7TtucsQwUcXcymNiEDjgDD2jMtZU= -go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= -go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= -go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= -go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= +go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc= +go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= +go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo= +go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok= go.opentelemetry.io/otel/sdk/metric v1.19.0 h1:EJoTO5qysMsYCa+w4UghwFV/ptQgqSL/8Ni+hx+8i1k= go.opentelemetry.io/otel/sdk/metric v1.19.0/go.mod h1:XjG0jQyFJrv2PbMvwND7LwCEhsJzCzV5210euduKcKY= -go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= -go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= +go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= +go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= go.starlark.net v0.0.0-20231101134539-556fd59b42f6 h1:+eC0F/k4aBLC4szgOcjd7bDTEnpxADJyWJE0yowgM3E= @@ -770,6 +778,8 @@ go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= +go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= @@ -812,8 +822,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa h1:ELnwvuAXPNtPk1TJRuGkI9fDTwym6AYBu0qzT8AcHdI= -golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= +golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 h1:kx6Ds3MlpiUHKj7syVnbp57++8WpuKPcR5yjLBjvLEA= +golang.org/x/exp v0.0.0-20240823005443-9b4947da3948/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -1143,10 +1153,10 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= -google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 h1:e7S5W7MGGLaSu8j3YjdezkZ+m1/Nm0uRVRMEMGk26Xs= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/genproto/googleapis/api v0.0.0-20240823204242-4ba0660f739c h1:e0zB268kOca6FbuJkYUGxfwG4DKFZG/8DLyv9Zv66cE= +google.golang.org/genproto/googleapis/api v0.0.0-20240823204242-4ba0660f739c/go.mod h1:fO8wJzT2zbQbAjbIoos1285VfEIYKDDY+Dt+WpTkh6g= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240823204242-4ba0660f739c h1:Kqjm4WpoWvwhMPcrAczoTyMySQmYa9Wy2iL6Con4zn8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240823204242-4ba0660f739c/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v0.0.0-20170208002647-2a6bf6142e96/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= From da052dfb47daded9deae3ccafeb6c6fbca4d08f5 Mon Sep 17 00:00:00 2001 From: Talha Bin Rizwan Date: Mon, 2 Sep 2024 10:04:19 +0500 Subject: [PATCH 19/35] PMM-13332 Install chromium for both amd64 and arm64. (#3189) --- build/packer/ansible/agent-aws.yml | 6 +++--- build/packer/aws.pkr.hcl | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build/packer/ansible/agent-aws.yml b/build/packer/ansible/agent-aws.yml index 63075ed46e..910e93cef9 100644 --- a/build/packer/ansible/agent-aws.yml +++ b/build/packer/ansible/agent-aws.yml @@ -113,9 +113,9 @@ mode: "u+x,g+x,o+x" - name: Install chromium - shell: "dnf install -y https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm" - when: ansible_architecture == "x86_64" - # NOTE: no chromium package for arm64 + yum: + name: chromium + state: latest - name: Install doctl client for digital ocean get_url: diff --git a/build/packer/aws.pkr.hcl b/build/packer/aws.pkr.hcl index 67e713959c..671bc418c4 100644 --- a/build/packer/aws.pkr.hcl +++ b/build/packer/aws.pkr.hcl @@ -85,7 +85,7 @@ source "amazon-ebs" "arm-agent" { iit-billing-tag = "pmm-worker" } launch_block_device_mappings { - device_name = "/dev/xvda" + device_name = "/dev/sda1" volume_size = 30 volume_type = "gp3" delete_on_termination = true From 7adc33b811e79381f4b905e538bb8c4b9e9104b8 Mon Sep 17 00:00:00 2001 From: PMM Jenkins Date: Fri, 6 Sep 2024 09:31:33 +0000 Subject: [PATCH 20/35] Update descriptors --- descriptor.bin | Bin 811509 -> 811632 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/descriptor.bin b/descriptor.bin index 5d6deb6a9097661536c8c945d77e7aec35484b2b..857e9d4320b2ef384099d19ca2eedd06fea50be7 100644 GIT binary patch delta 468 zcmaKmJxjwt9EW>%c`;`V;TqBxr9C%s5US|j!6BfHlum*a(a@%WD_&E@NjC?<^)@%Z zK}B$I(U0IaaO~os;^@C26(@&hICy@~{Xd`U?=SVsF&g*Cqe)dqYBif#kvI)SGLYx1 zH%Ptp&{nxbUBBtK{l<>J-)Q?mv$Nf51ue%^r3iJbSDhM6%jJsdNq2R;hP$rS+u2Gt&`gDe-J8$-y zR>~F1(Z5h8LBhdSc7O&4 zIQa#-oaS^!m~vuN<2qOj&yLo?Vhc8{rk25otAZFUaRV$D8(GT$%e5#CQp;q-Q`a%t jEtp_=zdxE_c~_Gd0T>{F2IznRn7|xh0rX)K&(p6T38QHw delta 344 zcmX|*ze>YU6vlJzznWtb!fkXAvDZ~WsEE)}oJF5N5SzBKdC2 zB4{>^6WnSnsk!#=W7ss3EX~y7xFk!5h^LLEG|#-6z)4$?mHoe{$jTlD6CfDD2|-9g Q5iMec2nl>1Ojhyt52EcwssI20 From cbfaffc35124f9ece9515354d4f17e16787361bf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Sep 2024 09:43:18 +0000 Subject: [PATCH 21/35] Bump eslint-plugin-import from 2.29.0 to 2.30.0 in /cli-tests (#3192) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.29.0 to 2.30.0. - [Release notes](https://github.com/import-js/eslint-plugin-import/releases) - [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md) - [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.29.0...v2.30.0) --- updated-dependencies: - dependency-name: eslint-plugin-import dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jiří Čtvrtka <62988319+JiriCtvrtka@users.noreply.github.com> --- cli-tests/package-lock.json | 741 +++++++++++++++++++++++------------- cli-tests/package.json | 2 +- 2 files changed, 479 insertions(+), 264 deletions(-) diff --git a/cli-tests/package-lock.json b/cli-tests/package-lock.json index de21e9abfb..7b791008fb 100644 --- a/cli-tests/package-lock.json +++ b/cli-tests/package-lock.json @@ -25,7 +25,7 @@ "eslint": "8.57", "eslint-config-airbnb-base": "^15.0.0", "eslint-config-airbnb-typescript": "^18.0.0", - "eslint-plugin-import": "^2.29.0", + "eslint-plugin-import": "^2.30.0", "eslint-plugin-playwright": "^1.6.0" } }, @@ -193,6 +193,12 @@ "node": ">=14" } }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, "node_modules/@types/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", @@ -758,28 +764,32 @@ "dev": true }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -799,16 +809,17 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -854,16 +865,18 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", - "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -874,10 +887,13 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -912,13 +928,19 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -992,6 +1014,57 @@ "node": ">= 8" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -1015,12 +1088,30 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -1072,50 +1163,57 @@ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" }, "node_modules/es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -1124,15 +1222,48 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -1294,9 +1425,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.9.0.tgz", + "integrity": "sha512-McVbYmwA3NEKwRQY5g4aWMdcZE5xZxV8i8l7CqJSrameuGSQJtSWaL/LxTEzSKKaCcOhlpDR8XEfYXWPrdo/ZQ==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -1320,28 +1451,29 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", - "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", + "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", "dev": true, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.9.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" + "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" @@ -1656,15 +1788,15 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -1683,28 +1815,33 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -1812,18 +1949,6 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -1843,21 +1968,21 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, "engines": { "node": ">= 0.4" @@ -1879,12 +2004,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -1894,9 +2019,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -1953,13 +2078,13 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -1975,14 +2100,16 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2029,11 +2156,29 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2076,9 +2221,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "engines": { "node": ">= 0.4" @@ -2137,12 +2282,15 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2179,12 +2327,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -2362,10 +2510,13 @@ "dev": true }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2380,13 +2531,13 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -2412,14 +2563,15 @@ } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2429,26 +2581,28 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2604,6 +2758,15 @@ "node": ">=16" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -2666,14 +2829,15 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -2764,13 +2928,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", - "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -2782,15 +2946,18 @@ } }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2810,6 +2977,38 @@ "node": ">=10" } }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2848,14 +3047,18 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2871,14 +3074,15 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2888,28 +3092,31 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3002,9 +3209,9 @@ } }, "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", @@ -3038,29 +3245,30 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -3070,16 +3278,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -3089,14 +3298,20 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3170,16 +3385,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" diff --git a/cli-tests/package.json b/cli-tests/package.json index ad94a3582c..527d9d1d75 100644 --- a/cli-tests/package.json +++ b/cli-tests/package.json @@ -29,7 +29,7 @@ "eslint": "8.57", "eslint-config-airbnb-base": "^15.0.0", "eslint-config-airbnb-typescript": "^18.0.0", - "eslint-plugin-import": "^2.29.0", + "eslint-plugin-import": "^2.30.0", "eslint-plugin-playwright": "^1.6.0" } } From 4242f0ba2118359808b54b3cd91c8f2a5abb7b62 Mon Sep 17 00:00:00 2001 From: Artem Gavrilov Date: Mon, 9 Sep 2024 14:28:58 +0200 Subject: [PATCH 22/35] Migrate to buf schema v2 and move api related tasks to dedicated Makefile for PMM v3 (#3178) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Migrate to buf schema v2 and move api related tasks to dedicated Makefile * Hit CI --------- Co-authored-by: Jiří Čtvrtka <62988319+JiriCtvrtka@users.noreply.github.com> --- .github/workflows/main.yml | 2 +- Makefile.include | 135 ++------------------------- api/Makefile | 127 +++++++++++++++++++++++++ api/buf.gen.yaml | 34 +++++++ api/buf.lock | 20 ++-- api/buf.yaml | 37 +++++--- descriptor.bin => api/descriptor.bin | Bin buf.gen.yaml | 44 --------- buf.work.yaml | 3 - 9 files changed, 198 insertions(+), 204 deletions(-) create mode 100644 api/Makefile create mode 100644 api/buf.gen.yaml rename descriptor.bin => api/descriptor.bin (100%) delete mode 100644 buf.gen.yaml delete mode 100644 buf.work.yaml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7c1c51fab8..09de98cf79 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -68,7 +68,7 @@ jobs: - name: Update API compatibility descriptors run: | # log if descriptors changed, useful for "update descriptors" PRs - make descriptors + make -C api descriptors git diff --text - name: Run check-license diff --git a/Makefile.include b/Makefile.include index f329c5aa5d..615f32251b 100644 --- a/Makefile.include +++ b/Makefile.include @@ -1,5 +1,4 @@ -# vim: ts=8:sw=8:ft=make:noai:noet -SWAGGER_UI_VERSION?=latest + .PHONY: default init release gen test clean all default: help @@ -25,8 +24,8 @@ release: ## Build release versions of all components make -C qan-api2 release gen: clean ## Generate files - make gen-api - make clean_swagger + make -C api gen + make -C api clean-swagger make -C agent gen make -C admin gen @@ -38,129 +37,13 @@ gen: clean ## Generate files make format ## TODO: One formatting run is not enough, figure out why. go install -v ./... +clean: ## Remove generated files + make -C api clean + gen-mocks: find . -name mock_*.go -delete ./bin/mockery --config .mockery.yaml -gen-api: ## Generate PMM API - # generated by descriptors target - bin/buf breaking --against descriptor.bin api - - bin/buf generate -v api - - SPECS="\ - api/agentlocal/v1 \ - api/server/v1 \ - api/user/v1 \ - api/inventory/v1 \ - api/management/v1 \ - api/management/v1/service \ - api/actions/v1 \ - api/advisors/v1 \ - api/alerting/v1 \ - api/backup/v1 \ - api/dump/v1beta1 \ - api/accesscontrol/v1beta1 \ - api/qan/v1 \ - api/platform/v1"; \ - for API in $$SPECS; do \ - set -x ; \ - bin/swagger mixin $$API/json/header.json $$API/*.swagger.json --output=$$API/json/$$(basename $$API).json --keep-spec-order; \ - bin/swagger flatten --with-flatten=expand --with-flatten=remove-unused $$API/json/$$(basename $$API).json --output=$$API/json/$$(basename $$API).json ; \ - bin/swagger validate $$API/json/$$(basename $$API).json ; \ - bin/swagger generate client --with-flatten=expand --with-flatten=remove-unused --spec=$$API/json/$$(basename $$API).json --target=$$API/json \ - --additional-initialism=aws \ - --additional-initialism=db \ - --additional-initialism=ok \ - --additional-initialism=pmm \ - --additional-initialism=psmdb \ - --additional-initialism=pxc \ - --additional-initialism=pt \ - --additional-initialism=qan \ - --additional-initialism=rds \ - --additional-initialism=sql \ - --additional-initialism=ha ; \ - done - - # generate public API spec, omit agentlocal and inventory (always private), - # as well as a number of protos that are in beta (not v1 yet, they all go to a similar call below) - bin/swagger mixin --output=api/swagger/swagger.json \ - api/swagger/header.json \ - api/server/v1/json/v1.json \ - api/user/v1/json/v1.json \ - api/inventory/v1/json/v1.json \ - api/management/v1/json/v1.json \ - api/actions/v1/json/v1.json \ - api/alerting/v1/json/v1.json \ - api/advisors/v1/json/v1.json \ - api/backup/v1/json/v1.json \ - api/qan/v1/json/v1.json \ - api/platform/v1/json/v1.json - bin/swagger validate api/swagger/swagger.json - - bin/swagger-order --output=api/swagger/swagger.json api/swagger/swagger.json - - # generate API spec with all PMM Server APIs (omit agentlocal) - bin/swagger mixin --output=api/swagger/swagger-dev.json \ - api/swagger/header-dev.json \ - api/server/v1/json/v1.json \ - api/user/v1/json/v1.json \ - api/inventory/v1/json/v1.json \ - api/management/v1/json/v1.json \ - api/actions/v1/json/v1.json \ - api/alerting/v1/json/v1.json \ - api/advisors/v1/json/v1.json \ - api/backup/v1/json/v1.json \ - api/dump/v1beta1/json/v1beta1.json \ - api/accesscontrol/v1beta1/json/v1beta1.json \ - api/qan/v1/json/v1.json \ - api/platform/v1/json/v1.json - - bin/swagger validate api/swagger/swagger-dev.json - - bin/swagger-order --output=api/swagger/swagger-dev.json api/swagger/swagger-dev.json - -clean_swagger: - find api -name '*.swagger.json' -print -delete - - -ifeq ($(shell test "${SWAGGER_UI_VERSION}" = "latest" && echo 1 || echo 0), 1) -get_swagger_version: -override SWAGGER_UI_VERSION = $(shell curl --silent --head https://github.com/swagger-api/swagger-ui/releases/latest | grep -E '^[lL]ocation' | sed 's;^.*/;;') -else -get_swagger_version: -endif - -update-swagger: get_swagger_version ## Update Swagger UI in api/swagger, use `SWAGGER_UI_VERSION=xxx make update-swagger` to choose a version other than latest - curl --output /tmp/swagger.tar.gz -sSfL "https://github.com/swagger-api/swagger-ui/archive/refs/tags/${SWAGGER_UI_VERSION}.tar.gz" - tar xf /tmp/swagger.tar.gz --transform 's;swagger-ui-.*/dist/;api/swagger/;g' - rm -f api/swagger/.npmrc - sed -i 's/url: ".*"/url: "\/swagger.json",\n validatorUrl: "none"/' api/swagger/swagger-initializer.js - -clean: clean_swagger ## Remove generated files - find api -name '*.pb.go' -print -delete - find api -name '*.pb.gw.go' -print -delete - find api -name '*.validate.go' -print -delete - - SPECS="\ - api/agentlocal/v1 \ - api/server/v1 \ - api/user/v1 \ - api/inventory/v1 \ - api/management/v1 \ - api/actions/v1 \ - api/alerting/v1 \ - api/advisors/v1 \ - api/backup/v1 \ - api/dump/v1beta1 \ - api/accesscontrol/v1beta1 \ - api/qan/v1 \ - api/platform/v1"; \ - for API in $$SPECS; do \ - rm -fr $$API/json/client $$API/json/models $$API/json/$$(basename $$API).json ; \ - done - rm -f api/swagger/swagger.json api/swagger/swagger-dev.json - test-common: ## Run tests from API (and other shared) packages only (i.e it ignores directories that are explicitly listed) go test $(shell go list ./... | grep -v -e admin -e agent -e managed -e api-tests -e qan-api2 -e update) @@ -182,14 +65,10 @@ check-all: check-license check ## Run golangci linter to check for changes ag FILES = $(shell find . -type f -name '*.go') format: ## Format source code + make -C api format bin/gofumpt -l -w $(FILES) bin/goimports -local github.com/percona/pmm -l -w $(FILES) bin/gci write --section Standard --section Default --section "Prefix(github.com/percona/pmm)" $(FILES) - bin/buf format api -w serve: ## Serve API documentation with nginx nginx -p . -c api/nginx/nginx.conf - -descriptors: ## Update API compatibility descriptors - #./prototool break descriptor-set . -o api/api.descriptor - bin/buf build -o descriptor.bin --as-file-descriptor-set api diff --git a/api/Makefile b/api/Makefile new file mode 100644 index 0000000000..922866a671 --- /dev/null +++ b/api/Makefile @@ -0,0 +1,127 @@ +# vim: ts=8:sw=8:ft=make:noai:noet +SWAGGER_UI_VERSION?=latest + +gen: ## Generate PMM API + # generated by descriptors target + ../bin/buf breaking --against descriptor.bin . + + ../bin/buf generate -v . + + SPECS="\ + agentlocal/v1 \ + server/v1 \ + user/v1 \ + inventory/v1 \ + management/v1 \ + management/v1/service \ + actions/v1 \ + advisors/v1 \ + alerting/v1 \ + backup/v1 \ + dump/v1beta1 \ + accesscontrol/v1beta1 \ + qan/v1 \ + platform/v1"; \ + for API in $$SPECS; do \ + set -x ; \ + ../bin/swagger mixin $$API/json/header.json $$API/*.swagger.json --output=$$API/json/$$(basename $$API).json --keep-spec-order; \ + ../bin/swagger flatten --with-flatten=expand --with-flatten=remove-unused $$API/json/$$(basename $$API).json --output=$$API/json/$$(basename $$API).json ; \ + ../bin/swagger validate $$API/json/$$(basename $$API).json ; \ + ../bin/swagger generate client --with-flatten=expand --with-flatten=remove-unused --spec=$$API/json/$$(basename $$API).json --target=$$API/json \ + --additional-initialism=aws \ + --additional-initialism=db \ + --additional-initialism=ok \ + --additional-initialism=pmm \ + --additional-initialism=psmdb \ + --additional-initialism=pxc \ + --additional-initialism=pt \ + --additional-initialism=qan \ + --additional-initialism=rds \ + --additional-initialism=sql \ + --additional-initialism=ha ; \ + done + + # generate public API spec, omit agentlocal and inventory (always private), + # as well as a number of protos that are in beta (not v1 yet, they all go to a similar call below) + ../bin/swagger mixin --output=swagger/swagger.json \ + swagger/header.json \ + server/v1/json/v1.json \ + user/v1/json/v1.json \ + inventory/v1/json/v1.json \ + management/v1/json/v1.json \ + actions/v1/json/v1.json \ + alerting/v1/json/v1.json \ + advisors/v1/json/v1.json \ + backup/v1/json/v1.json \ + qan/v1/json/v1.json \ + platform/v1/json/v1.json + ../bin/swagger validate swagger/swagger.json + + ../bin/swagger-order --output=swagger/swagger.json swagger/swagger.json + + # generate API spec with all PMM Server APIs (omit agentlocal) + ../bin/swagger mixin --output=swagger/swagger-dev.json \ + swagger/header-dev.json \ + server/v1/json/v1.json \ + user/v1/json/v1.json \ + inventory/v1/json/v1.json \ + management/v1/json/v1.json \ + actions/v1/json/v1.json \ + alerting/v1/json/v1.json \ + advisors/v1/json/v1.json \ + backup/v1/json/v1.json \ + dump/v1beta1/json/v1beta1.json \ + accesscontrol/v1beta1/json/v1beta1.json \ + qan/v1/json/v1.json \ + platform/v1/json/v1.json + + ../bin/swagger validate swagger/swagger-dev.json + + ../bin/swagger-order --output=swagger/swagger-dev.json swagger/swagger-dev.json + +format: ## Format API definitions + ../bin/buf format . -w + +clean-swagger: + find . -name '*.swagger.json' -print -delete + + +ifeq ($(shell test "${SWAGGER_UI_VERSION}" = "latest" && echo 1 || echo 0), 1) +get_swagger_version: +override SWAGGER_UI_VERSION = $(shell curl --silent --head https://github.com/swagger-api/swagger-ui/releases/latest | grep -E '^[lL]ocation' | sed 's;^.*/;;') +else +get_swagger_version: +endif + +update-swagger: get_swagger_version ## Update Swagger UI in swagger, use `SWAGGER_UI_VERSION=xxx make update-swagger` to choose a version other than latest + curl --output /tmp/swagger.tar.gz -sSfL "https://github.com/swagger-api/swagger-ui/archive/refs/tags/${SWAGGER_UI_VERSION}.tar.gz" + tar xf /tmp/swagger.tar.gz --transform 's;swagger-ui-.*/dist/;swagger/;g' + rm -f swagger/.npmrc + sed -i 's/url: ".*"/url: "\/swagger.json",\n validatorUrl: "none"/' swagger/swagger-initializer.js + +clean: clean-swagger ## Remove generated files + find . -name '*.pb.go' -print -delete + find . -name '*.pb.gw.go' -print -delete + find . -name '*.validate.go' -print -delete + + SPECS="\ + agentlocal/v1 \ + server/v1 \ + user/v1 \ + inventory/v1 \ + management/v1 \ + actions/v1 \ + alerting/v1 \ + advisors/v1 \ + backup/v1 \ + dump/v1beta1 \ + accesscontrol/v1beta1 \ + qan/v1 \ + platform/v1"; \ + for API in $$SPECS; do \ + rm -fr $$API/json/client $$API/json/models $$API/json/$$(basename $$API).json ; \ + done + rm -f swagger/swagger.json swagger/swagger-dev.json + +descriptors: ## Update API compatibility descriptors + ../bin/buf build -o descriptor.bin --as-file-descriptor-set . \ No newline at end of file diff --git a/api/buf.gen.yaml b/api/buf.gen.yaml new file mode 100644 index 0000000000..b412cc9f32 --- /dev/null +++ b/api/buf.gen.yaml @@ -0,0 +1,34 @@ +version: v2 +managed: + enabled: true + disable: + - file_option: go_package + module: buf.build/googleapis/googleapis + - file_option: go_package + module: buf.build/grpc-ecosystem/grpc-gateway + - file_option: go_package + module: buf.build/envoyproxy/protoc-gen-validate + override: + - file_option: go_package_prefix + value: github.com/percona/pmm/api +plugins: + - local: ../bin/protoc-gen-go + out: . + opt: paths=source_relative + - local: ../bin/protoc-gen-go-grpc + out: . + opt: paths=source_relative + - local: ../bin/protoc-gen-grpc-gateway + out: . + opt: paths=source_relative + - local: ../bin/protoc-gen-validate + out: . + opt: + - paths=source_relative + - lang=go + - local: ../bin/protoc-gen-openapiv2 + out: . + opt: + - simple_operation_ids=true + - json_names_for_fields=false + - proto3_optional_nullable=true diff --git a/api/buf.lock b/api/buf.lock index 66753d27f3..0e9cebedcf 100644 --- a/api/buf.lock +++ b/api/buf.lock @@ -1,18 +1,12 @@ # Generated by buf. DO NOT EDIT. -version: v1 +version: v2 deps: - - remote: buf.build - owner: envoyproxy - repository: protoc-gen-validate + - name: buf.build/envoyproxy/protoc-gen-validate commit: eac44469a7af47e7839a7f1f3d7ac004 - digest: shake256:0feabcde01b6b11e3c75a5e3f807968d5995626546f39c37e5d4205892b3a59cced0ed83b35a2eb9e6dddd3309660ad46b737c9dcd224b425de0a6654ce04417 - - remote: buf.build - owner: googleapis - repository: googleapis + digest: b5:2ef7b25d9671fde82d58278e94d209788fb6a42936cc2d60e42303b67dcdb72b2d0e121238ba44caf1870a34edab55518df5d3f1ee1e62b8d9b6cf98817eae6e + - name: buf.build/googleapis/googleapis commit: 28151c0d0a1641bf938a7672c500e01d - digest: shake256:49215edf8ef57f7863004539deff8834cfb2195113f0b890dd1f67815d9353e28e668019165b9d872395871eeafcbab3ccfdb2b5f11734d3cca95be9e8d139de - - remote: buf.build - owner: grpc-ecosystem - repository: grpc-gateway + digest: b5:93b70089baa4fc05a92d3e52db91a4b7812db3b57b9664f6cb301733938cb630e377a938e8a56779388171c749c1d42a2e9a6c6230f2ff45f127a8102a6a27d0 + - name: buf.build/grpc-ecosystem/grpc-gateway commit: 3f42134f4c564983838425bc43c7a65f - digest: shake256:3d11d4c0fe5e05fda0131afefbce233940e27f0c31c5d4e385686aea58ccd30f72053f61af432fa83f1fc11cda57f5f18ca3da26a29064f73c5a0d076bba8d92 + digest: b5:291b947d8ac09492517557e4e72e294788cb8201afc7d0df7bda80fa10931adb60d4d669208a7696bf24f1ecb2a33a16d4c1e766e6f31809248b00343119569b diff --git a/api/buf.yaml b/api/buf.yaml index 84e841ca3e..b130c4ee02 100644 --- a/api/buf.yaml +++ b/api/buf.yaml @@ -1,21 +1,28 @@ -version: v1 -breaking: - use: - - FILE +version: v2 +modules: + - path: . +deps: + - buf.build/envoyproxy/protoc-gen-validate + - buf.build/googleapis/googleapis + - buf.build/grpc-ecosystem/grpc-gateway lint: use: - DEFAULT + except: + - FIELD_NOT_REQUIRED + - PACKAGE_NO_IMPORT_CYCLE ignore_only: + PACKAGE_VERSION_SUFFIX: + - api/common/common.proto + - api/common/metrics_resolutions.proto RPC_REQUEST_STANDARD_NAME: - - agent/v1/agent.proto # We want our naming in this file to be different + - api/agent/v1/agent.proto RPC_RESPONSE_STANDARD_NAME: - - agent/v1/agent.proto # We want our naming in this file to be different - PACKAGE_VERSION_SUFFIX: - - common/common.proto # We don't want to version this file - - common/metrics_resolutions.proto # We don't want to version this file - - -deps: - - buf.build/googleapis/googleapis - - buf.build/grpc-ecosystem/grpc-gateway - - buf.build/envoyproxy/protoc-gen-validate + - api/agent/v1/agent.proto + disallow_comment_ignores: true +breaking: + use: + - FILE + except: + - EXTENSION_NO_DELETE + - FIELD_SAME_DEFAULT diff --git a/descriptor.bin b/api/descriptor.bin similarity index 100% rename from descriptor.bin rename to api/descriptor.bin diff --git a/buf.gen.yaml b/buf.gen.yaml deleted file mode 100644 index 53d088dcf4..0000000000 --- a/buf.gen.yaml +++ /dev/null @@ -1,44 +0,0 @@ -version: v1 -managed: - enabled: true - go_package_prefix: - default: github.com/percona/pmm/api - except: - - buf.build/googleapis/googleapis - - buf.build/grpc-ecosystem/grpc-gateway - - buf.build/envoyproxy/protoc-gen-validate - -plugins: - - name: go - path: bin/protoc-gen-go - out: api - opt: - - paths=source_relative - - - name: go-grpc - path: bin/protoc-gen-go-grpc - out: api - opt: - - paths=source_relative - - - name: grpc-gateway - path: bin/protoc-gen-grpc-gateway - out: api - opt: - - paths=source_relative - - - name: validate - path: bin/protoc-gen-validate - out: api - opt: - - paths=source_relative - - lang=go - - - name: openapiv2 - out: api - path: bin/protoc-gen-openapiv2 - opt: - - simple_operation_ids=true - - json_names_for_fields=false - - proto3_optional_nullable=true - # - visibility_restriction_selectors=INTERNAL # Uncomment to show elements marked up with `INTERNAL` diff --git a/buf.work.yaml b/buf.work.yaml deleted file mode 100644 index a2fa5f5176..0000000000 --- a/buf.work.yaml +++ /dev/null @@ -1,3 +0,0 @@ -version: v1 -directories: - - api From 5561f584c01297523d401b087c6c701c675ed3b2 Mon Sep 17 00:00:00 2001 From: Michael Okoko <10512379+idoqo@users.noreply.github.com> Date: Wed, 11 Sep 2024 11:14:16 +0100 Subject: [PATCH 23/35] PMM-13077 list change log for PMM server version (#3045) * Support release notes for PMM versions This adds support for PMM release notes by fetching the correct markdown files from github. It also includes fixes for api tests by accepting v3 prefixes in versions. * use separate endpoint for listing versions * replace dockerhub/github with version service endpoints * fix tests * use better naming for rpc * drop todo * use check dev for version service * fix method name for changelogs * include release notes text in response --- api-tests/server/updates_test.go | 36 + api/descriptor.bin | Bin 703985 -> 705189 bytes .../server_service/check_updates_responses.go | 6 + .../list_change_logs_parameters.go | 127 +++ .../list_change_logs_responses.go | 561 +++++++++++ .../server_service/server_service_client.go | 41 + api/server/v1/json/v1.json | 105 ++ api/server/v1/server.pb.go | 898 +++++++++++------- api/server/v1/server.pb.gw.go | 65 ++ api/server/v1/server.pb.validate.go | 271 ++++++ api/server/v1/server.proto | 22 + api/server/v1/server_grpc.pb.go | 39 + api/swagger/swagger-dev.json | 105 ++ api/swagger/swagger.json | 105 ++ docker-compose.yml | 3 +- managed/services/server/server.go | 32 +- managed/services/server/updater.go | 213 +++-- managed/services/server/updater_test.go | 109 ++- version/update.go | 21 +- 19 files changed, 2291 insertions(+), 468 deletions(-) create mode 100644 api/server/v1/json/client/server_service/list_change_logs_parameters.go create mode 100644 api/server/v1/json/client/server_service/list_change_logs_responses.go diff --git a/api-tests/server/updates_test.go b/api-tests/server/updates_test.go index 97ad81d822..e8ecd0c01b 100644 --- a/api-tests/server/updates_test.go +++ b/api-tests/server/updates_test.go @@ -71,6 +71,15 @@ func TestCheckUpdates(t *testing.T) { assert.NotEmpty(t, res.Payload.Installed.FullVersion) if res.Payload.UpdateAvailable { + require.NotEmpty(t, res.Payload.Latest) + assert.True(t, strings.HasPrefix(res.Payload.Latest.Version, "2.") || strings.HasPrefix(res.Payload.Installed.Version, "3."), + "latest.version = %q should have '2.' or '3.' prefix", res.Payload.Latest.Version) + require.NotEmpty(t, res.Payload.Latest.Timestamp) + ts = time.Time(res.Payload.Latest.Timestamp) + hour, min, _ = ts.Clock() + assert.Zero(t, hour, "latest.timestamp should contain only date") + assert.Zero(t, min, "latest.timestamp should contain only date") + assert.NotEmpty(t, res.Payload.Latest.Tag) require.NotEmpty(t, res.Payload.Latest.Timestamp) ts = time.Time(res.Payload.Latest.Timestamp) @@ -81,6 +90,7 @@ func TestCheckUpdates(t *testing.T) { assert.NotEqual(t, res.Payload.Installed.FullVersion, res.Payload.Latest.Version) assert.NotEqual(t, res.Payload.Installed.Timestamp, res.Payload.Latest.Timestamp) assert.True(t, strings.HasPrefix(res.Payload.LatestNewsURL, "https://per.co.na/pmm/2."), "latest_news_url = %q", res.Payload.LatestNewsURL) + assert.True(t, strings.HasPrefix(res.Payload.Latest.ReleaseNotesURL, "https://per.co.na/pmm/2."), "latest_news_url = %q", res.Payload.Latest.ReleaseNotesURL) } assert.NotEmpty(t, res.Payload.LastCheck) @@ -110,6 +120,32 @@ func TestCheckUpdates(t *testing.T) { }) } +func TestListUpdates(t *testing.T) { + const fast, slow = 5 * time.Second, 60 * time.Second + + if !pmmapitests.RunUpdateTest { + t.Skip("skipping PMM Server check update test") + } + + version, err := serverClient.Default.ServerService.Version(server.NewVersionParamsWithTimeout(fast)) + require.NoError(t, err) + if version.Payload.Server == nil || version.Payload.Server.Version == "" { + t.Skip("skipping test in developer's environment") + } + + params := &server.ListChangeLogsParams{ + Context: pmmapitests.Context, + } + params.SetTimeout(slow) + res, err := serverClient.Default.ServerService.ListChangeLogs(params) + require.NoError(t, err) + + if len(res.Payload.Updates) > 0 { + assert.True(t, strings.HasPrefix(res.Payload.Updates[0].Version, "3."), + "installed.version = %q should have '3.' prefix", res.Payload.Updates[0].Version) + } +} + func TestUpdate(t *testing.T) { // do not run this test in parallel with other tests diff --git a/api/descriptor.bin b/api/descriptor.bin index b6d43848715709a2fac2d22b535e79564fab075a..140f0af2728968e990965d413afe506aa707bb19 100644 GIT binary patch delta 6237 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 bRYk_6cY;mO^el%8EC_z+_$T}27lZ!;aD0!8 delta 5064 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 jc152GzFw{ 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/api/server/v1/json/client/server_service/list_change_logs_responses.go b/api/server/v1/json/client/server_service/list_change_logs_responses.go new file mode 100644 index 0000000000..72af20d2a8 --- /dev/null +++ b/api/server/v1/json/client/server_service/list_change_logs_responses.go @@ -0,0 +1,561 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package server_service + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "fmt" + "io" + "strconv" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" + "github.com/go-openapi/validate" +) + +// ListChangeLogsReader is a Reader for the ListChangeLogs structure. +type ListChangeLogsReader struct { + formats strfmt.Registry +} + +// ReadResponse reads a server response into the received o. +func (o *ListChangeLogsReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { + switch response.Code() { + case 200: + result := NewListChangeLogsOK() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return result, nil + default: + result := NewListChangeLogsDefault(response.Code()) + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + if response.Code()/100 == 2 { + return result, nil + } + return nil, result + } +} + +// NewListChangeLogsOK creates a ListChangeLogsOK with default headers values +func NewListChangeLogsOK() *ListChangeLogsOK { + return &ListChangeLogsOK{} +} + +/* +ListChangeLogsOK describes a response with status code 200, with default header values. + +A successful response. +*/ +type ListChangeLogsOK struct { + Payload *ListChangeLogsOKBody +} + +func (o *ListChangeLogsOK) Error() string { + return fmt.Sprintf("[GET /v1/server/updates/changelogs][%d] listChangeLogsOk %+v", 200, o.Payload) +} + +func (o *ListChangeLogsOK) GetPayload() *ListChangeLogsOKBody { + return o.Payload +} + +func (o *ListChangeLogsOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + o.Payload = new(ListChangeLogsOKBody) + + // response payload + if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} + +// NewListChangeLogsDefault creates a ListChangeLogsDefault with default headers values +func NewListChangeLogsDefault(code int) *ListChangeLogsDefault { + return &ListChangeLogsDefault{ + _statusCode: code, + } +} + +/* +ListChangeLogsDefault describes a response with status code -1, with default header values. + +An unexpected error response. +*/ +type ListChangeLogsDefault struct { + _statusCode int + + Payload *ListChangeLogsDefaultBody +} + +// Code gets the status code for the list change logs default response +func (o *ListChangeLogsDefault) Code() int { + return o._statusCode +} + +func (o *ListChangeLogsDefault) Error() string { + return fmt.Sprintf("[GET /v1/server/updates/changelogs][%d] ListChangeLogs default %+v", o._statusCode, o.Payload) +} + +func (o *ListChangeLogsDefault) GetPayload() *ListChangeLogsDefaultBody { + return o.Payload +} + +func (o *ListChangeLogsDefault) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + o.Payload = new(ListChangeLogsDefaultBody) + + // response payload + if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} + +/* +ListChangeLogsDefaultBody list change logs default body +swagger:model ListChangeLogsDefaultBody +*/ +type ListChangeLogsDefaultBody struct { + // code + Code int32 `json:"code,omitempty"` + + // message + Message string `json:"message,omitempty"` + + // details + Details []*ListChangeLogsDefaultBodyDetailsItems0 `json:"details"` +} + +// Validate validates this list change logs default body +func (o *ListChangeLogsDefaultBody) Validate(formats strfmt.Registry) error { + var res []error + + if err := o.validateDetails(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (o *ListChangeLogsDefaultBody) validateDetails(formats strfmt.Registry) error { + if swag.IsZero(o.Details) { // not required + return nil + } + + for i := 0; i < len(o.Details); i++ { + if swag.IsZero(o.Details[i]) { // not required + continue + } + + if o.Details[i] != nil { + if err := o.Details[i].Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("ListChangeLogs default" + "." + "details" + "." + strconv.Itoa(i)) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("ListChangeLogs default" + "." + "details" + "." + strconv.Itoa(i)) + } + return err + } + } + + } + + return nil +} + +// ContextValidate validate this list change logs default body based on the context it is used +func (o *ListChangeLogsDefaultBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + var res []error + + if err := o.contextValidateDetails(ctx, formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (o *ListChangeLogsDefaultBody) contextValidateDetails(ctx context.Context, formats strfmt.Registry) error { + for i := 0; i < len(o.Details); i++ { + if o.Details[i] != nil { + if err := o.Details[i].ContextValidate(ctx, formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("ListChangeLogs default" + "." + "details" + "." + strconv.Itoa(i)) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("ListChangeLogs default" + "." + "details" + "." + strconv.Itoa(i)) + } + return err + } + } + } + + return nil +} + +// MarshalBinary interface implementation +func (o *ListChangeLogsDefaultBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *ListChangeLogsDefaultBody) UnmarshalBinary(b []byte) error { + var res ListChangeLogsDefaultBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +/* +ListChangeLogsDefaultBodyDetailsItems0 `Any` contains an arbitrary serialized protocol buffer message along with a +// URL that describes the type of the serialized message. +// +// Protobuf library provides support to pack/unpack Any values in the form +// of utility functions or additional generated methods of the Any type. +// +// Example 1: Pack and unpack a message in C++. +// +// Foo foo = ...; +// Any any; +// any.PackFrom(foo); +// ... +// if (any.UnpackTo(&foo)) { +// ... +// } +// +// Example 2: Pack and unpack a message in Java. +// +// Foo foo = ...; +// Any any = Any.pack(foo); +// ... +// if (any.is(Foo.class)) { +// foo = any.unpack(Foo.class); +// } +// // or ... +// if (any.isSameTypeAs(Foo.getDefaultInstance())) { +// foo = any.unpack(Foo.getDefaultInstance()); +// } +// +// Example 3: Pack and unpack a message in Python. +// +// foo = Foo(...) +// any = Any() +// any.Pack(foo) +// ... +// if any.Is(Foo.DESCRIPTOR): +// any.Unpack(foo) +// ... +// +// Example 4: Pack and unpack a message in Go +// +// foo := &pb.Foo{...} +// any, err := anypb.New(foo) +// if err != nil { +// ... +// } +// ... +// foo := &pb.Foo{} +// if err := any.UnmarshalTo(foo); err != nil { +// ... +// } +// +// The pack methods provided by protobuf library will by default use +// 'type.googleapis.com/full.type.name' as the type URL and the unpack +// methods only use the fully qualified type name after the last '/' +// in the type URL, for example "foo.bar.com/x/y.z" will yield type +// name "y.z". +// +// JSON +// ==== +// The JSON representation of an `Any` value uses the regular +// representation of the deserialized, embedded message, with an +// additional field `@type` which contains the type URL. Example: +// +// package google.profile; +// message Person { +// string first_name = 1; +// string last_name = 2; +// } +// +// { +// "@type": "type.googleapis.com/google.profile.Person", +// "firstName": , +// "lastName": +// } +// +// If the embedded message type is well-known and has a custom JSON +// representation, that representation will be embedded adding a field +// `value` which holds the custom JSON in addition to the `@type` +// field. Example (for message [google.protobuf.Duration][]): +// +// { +// "@type": "type.googleapis.com/google.protobuf.Duration", +// "value": "1.212s" +// } +swagger:model ListChangeLogsDefaultBodyDetailsItems0 +*/ +type ListChangeLogsDefaultBodyDetailsItems0 struct { + // A URL/resource name that uniquely identifies the type of the serialized + // protocol buffer message. This string must contain at least + // one "/" character. The last segment of the URL's path must represent + // the fully qualified name of the type (as in + // `path/google.protobuf.Duration`). The name should be in a canonical form + // (e.g., leading "." is not accepted). + // + // In practice, teams usually precompile into the binary all types that they + // expect it to use in the context of Any. However, for URLs which use the + // scheme `http`, `https`, or no scheme, one can optionally set up a type + // server that maps type URLs to message definitions as follows: + // + // * If no scheme is provided, `https` is assumed. + // * An HTTP GET on the URL must yield a [google.protobuf.Type][] + // value in binary format, or produce an error. + // * Applications are allowed to cache lookup results based on the + // URL, or have them precompiled into a binary to avoid any + // lookup. Therefore, binary compatibility needs to be preserved + // on changes to types. (Use versioned type names to manage + // breaking changes.) + // + // Note: this functionality is not currently available in the official + // protobuf release, and it is not used for type URLs beginning with + // type.googleapis.com. As of May 2023, there are no widely used type server + // implementations and no plans to implement one. + // + // Schemes other than `http`, `https` (or the empty scheme) might be + // used with implementation specific semantics. + AtType string `json:"@type,omitempty"` +} + +// Validate validates this list change logs default body details items0 +func (o *ListChangeLogsDefaultBodyDetailsItems0) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this list change logs default body details items0 based on context it is used +func (o *ListChangeLogsDefaultBodyDetailsItems0) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *ListChangeLogsDefaultBodyDetailsItems0) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *ListChangeLogsDefaultBodyDetailsItems0) UnmarshalBinary(b []byte) error { + var res ListChangeLogsDefaultBodyDetailsItems0 + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +/* +ListChangeLogsOKBody list change logs OK body +swagger:model ListChangeLogsOKBody +*/ +type ListChangeLogsOKBody struct { + // List of available updates. + Updates []*ListChangeLogsOKBodyUpdatesItems0 `json:"updates"` + + // Last check time. + // Format: date-time + LastCheck strfmt.DateTime `json:"last_check,omitempty"` +} + +// Validate validates this list change logs OK body +func (o *ListChangeLogsOKBody) Validate(formats strfmt.Registry) error { + var res []error + + if err := o.validateUpdates(formats); err != nil { + res = append(res, err) + } + + if err := o.validateLastCheck(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (o *ListChangeLogsOKBody) validateUpdates(formats strfmt.Registry) error { + if swag.IsZero(o.Updates) { // not required + return nil + } + + for i := 0; i < len(o.Updates); i++ { + if swag.IsZero(o.Updates[i]) { // not required + continue + } + + if o.Updates[i] != nil { + if err := o.Updates[i].Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("listChangeLogsOk" + "." + "updates" + "." + strconv.Itoa(i)) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("listChangeLogsOk" + "." + "updates" + "." + strconv.Itoa(i)) + } + return err + } + } + + } + + return nil +} + +func (o *ListChangeLogsOKBody) validateLastCheck(formats strfmt.Registry) error { + if swag.IsZero(o.LastCheck) { // not required + return nil + } + + if err := validate.FormatOf("listChangeLogsOk"+"."+"last_check", "body", "date-time", o.LastCheck.String(), formats); err != nil { + return err + } + + return nil +} + +// ContextValidate validate this list change logs OK body based on the context it is used +func (o *ListChangeLogsOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + var res []error + + if err := o.contextValidateUpdates(ctx, formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (o *ListChangeLogsOKBody) contextValidateUpdates(ctx context.Context, formats strfmt.Registry) error { + for i := 0; i < len(o.Updates); i++ { + if o.Updates[i] != nil { + if err := o.Updates[i].ContextValidate(ctx, formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("listChangeLogsOk" + "." + "updates" + "." + strconv.Itoa(i)) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("listChangeLogsOk" + "." + "updates" + "." + strconv.Itoa(i)) + } + return err + } + } + } + + return nil +} + +// MarshalBinary interface implementation +func (o *ListChangeLogsOKBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *ListChangeLogsOKBody) UnmarshalBinary(b []byte) error { + var res ListChangeLogsOKBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +/* +ListChangeLogsOKBodyUpdatesItems0 list change logs OK body updates items0 +swagger:model ListChangeLogsOKBodyUpdatesItems0 +*/ +type ListChangeLogsOKBodyUpdatesItems0 struct { + // PMM Version. + Version string `json:"version,omitempty"` + + // Docker image tag. + Tag string `json:"tag,omitempty"` + + // Release date. + // Format: date-time + Timestamp strfmt.DateTime `json:"timestamp,omitempty"` + + // Release notes URL for the version (if available). + ReleaseNotesURL string `json:"release_notes_url,omitempty"` + + // Release notes text for the version (if available). + ReleaseNotesText string `json:"release_notes_text,omitempty"` +} + +// Validate validates this list change logs OK body updates items0 +func (o *ListChangeLogsOKBodyUpdatesItems0) Validate(formats strfmt.Registry) error { + var res []error + + if err := o.validateTimestamp(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (o *ListChangeLogsOKBodyUpdatesItems0) validateTimestamp(formats strfmt.Registry) error { + if swag.IsZero(o.Timestamp) { // not required + return nil + } + + if err := validate.FormatOf("timestamp", "body", "date-time", o.Timestamp.String(), formats); err != nil { + return err + } + + return nil +} + +// ContextValidate validates this list change logs OK body updates items0 based on context it is used +func (o *ListChangeLogsOKBodyUpdatesItems0) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *ListChangeLogsOKBodyUpdatesItems0) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *ListChangeLogsOKBodyUpdatesItems0) UnmarshalBinary(b []byte) error { + var res ListChangeLogsOKBodyUpdatesItems0 + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/api/server/v1/json/client/server_service/server_service_client.go b/api/server/v1/json/client/server_service/server_service_client.go index 4d1cd044ff..15bd3eb6e5 100644 --- a/api/server/v1/json/client/server_service/server_service_client.go +++ b/api/server/v1/json/client/server_service/server_service_client.go @@ -38,6 +38,8 @@ type ClientService interface { LeaderHealthCheck(params *LeaderHealthCheckParams, opts ...ClientOption) (*LeaderHealthCheckOK, error) + ListChangeLogs(params *ListChangeLogsParams, opts ...ClientOption) (*ListChangeLogsOK, error) + Logs(params *LogsParams, writer io.Writer, opts ...ClientOption) (*LogsOK, error) Readiness(params *ReadinessParams, opts ...ClientOption) (*ReadinessOK, error) @@ -207,6 +209,45 @@ func (a *Client) LeaderHealthCheck(params *LeaderHealthCheckParams, opts ...Clie return nil, runtime.NewAPIError("unexpected success response: content available as default response in error", unexpectedSuccess, unexpectedSuccess.Code()) } +/* +ListChangeLogs lists all the changes between the installed version and the latest available version + +List all the changes between the installed version and the latest available version +*/ +func (a *Client) ListChangeLogs(params *ListChangeLogsParams, opts ...ClientOption) (*ListChangeLogsOK, error) { + // TODO: Validate the params before sending + if params == nil { + params = NewListChangeLogsParams() + } + op := &runtime.ClientOperation{ + ID: "ListChangeLogs", + Method: "GET", + PathPattern: "/v1/server/updates/changelogs", + ProducesMediaTypes: []string{"application/json"}, + ConsumesMediaTypes: []string{"application/json"}, + Schemes: []string{"http", "https"}, + Params: params, + Reader: &ListChangeLogsReader{formats: a.formats}, + Context: params.Context, + Client: params.HTTPClient, + } + for _, opt := range opts { + opt(op) + } + + result, err := a.transport.Submit(op) + if err != nil { + return nil, err + } + success, ok := result.(*ListChangeLogsOK) + if ok { + return success, nil + } + // unexpected success response + unexpectedSuccess := result.(*ListChangeLogsDefault) + return nil, runtime.NewAPIError("unexpected success response: content available as default response in error", unexpectedSuccess, unexpectedSuccess.Code()) +} + /* Logs logs diff --git a/api/server/v1/json/v1.json b/api/server/v1/json/v1.json index a47880959b..1a43beb50b 100644 --- a/api/server/v1/json/v1.json +++ b/api/server/v1/json/v1.json @@ -718,6 +718,16 @@ "latest": { "type": "object", "properties": { + "release_notes_text": { + "description": "Release notes text for the version (if available).", + "type": "string", + "x-order": 4 + }, + "release_notes_url": { + "description": "Release notes URL for the version (if available).", + "type": "string", + "x-order": 3 + }, "tag": { "description": "Docker image tag.", "type": "string", @@ -786,6 +796,101 @@ } } }, + "/v1/server/updates/changelogs": { + "get": { + "description": "List all the changes between the installed version and the latest available version", + "tags": [ + "ServerService" + ], + "summary": "List all the changes between the installed version and the latest available version", + "operationId": "ListChangeLogs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "last_check": { + "description": "Last check time.", + "type": "string", + "format": "date-time", + "x-order": 1 + }, + "updates": { + "description": "List of available updates.", + "type": "array", + "items": { + "type": "object", + "properties": { + "release_notes_text": { + "description": "Release notes text for the version (if available).", + "type": "string", + "x-order": 4 + }, + "release_notes_url": { + "description": "Release notes URL for the version (if available).", + "type": "string", + "x-order": 3 + }, + "tag": { + "description": "Docker image tag.", + "type": "string", + "x-order": 1 + }, + "timestamp": { + "description": "Release date.", + "type": "string", + "format": "date-time", + "x-order": 2 + }, + "version": { + "description": "PMM Version.", + "type": "string", + "x-order": 0 + } + } + }, + "x-order": 0 + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "x-order": 0 + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string", + "x-order": 0 + } + }, + "additionalProperties": false + }, + "x-order": 2 + }, + "message": { + "type": "string", + "x-order": 1 + } + } + } + } + } + } + }, "/v1/server/updates:getStatus": { "post": { "description": "Returns PMM Server update status.", diff --git a/api/server/v1/server.pb.go b/api/server/v1/server.pb.go index 8315a4824b..076e4063a7 100644 --- a/api/server/v1/server.pb.go +++ b/api/server/v1/server.pb.go @@ -496,6 +496,10 @@ type DockerVersionInfo struct { Tag string `protobuf:"bytes,2,opt,name=tag,proto3" json:"tag,omitempty"` // Release date. Timestamp *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // Release notes URL for the version (if available). + ReleaseNotesUrl string `protobuf:"bytes,4,opt,name=release_notes_url,json=releaseNotesUrl,proto3" json:"release_notes_url,omitempty"` + // Release notes text for the version (if available). + ReleaseNotesText string `protobuf:"bytes,5,opt,name=release_notes_text,json=releaseNotesText,proto3" json:"release_notes_text,omitempty"` } func (x *DockerVersionInfo) Reset() { @@ -551,6 +555,20 @@ func (x *DockerVersionInfo) GetTimestamp() *timestamppb.Timestamp { return nil } +func (x *DockerVersionInfo) GetReleaseNotesUrl() string { + if x != nil { + return x.ReleaseNotesUrl + } + return "" +} + +func (x *DockerVersionInfo) GetReleaseNotesText() string { + if x != nil { + return x.ReleaseNotesText + } + return "" +} + type CheckUpdatesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -635,6 +653,101 @@ func (x *CheckUpdatesResponse) GetLastCheck() *timestamppb.Timestamp { return nil } +type ListChangeLogsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ListChangeLogsRequest) Reset() { + *x = ListChangeLogsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_server_v1_server_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListChangeLogsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListChangeLogsRequest) ProtoMessage() {} + +func (x *ListChangeLogsRequest) ProtoReflect() protoreflect.Message { + mi := &file_server_v1_server_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListChangeLogsRequest.ProtoReflect.Descriptor instead. +func (*ListChangeLogsRequest) Descriptor() ([]byte, []int) { + return file_server_v1_server_proto_rawDescGZIP(), []int{10} +} + +type ListChangeLogsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of available updates. + Updates []*DockerVersionInfo `protobuf:"bytes,1,rep,name=updates,proto3" json:"updates,omitempty"` + // Last check time. + LastCheck *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=last_check,json=lastCheck,proto3" json:"last_check,omitempty"` +} + +func (x *ListChangeLogsResponse) Reset() { + *x = ListChangeLogsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_server_v1_server_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListChangeLogsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListChangeLogsResponse) ProtoMessage() {} + +func (x *ListChangeLogsResponse) ProtoReflect() protoreflect.Message { + mi := &file_server_v1_server_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListChangeLogsResponse.ProtoReflect.Descriptor instead. +func (*ListChangeLogsResponse) Descriptor() ([]byte, []int) { + return file_server_v1_server_proto_rawDescGZIP(), []int{11} +} + +func (x *ListChangeLogsResponse) GetUpdates() []*DockerVersionInfo { + if x != nil { + return x.Updates + } + return nil +} + +func (x *ListChangeLogsResponse) GetLastCheck() *timestamppb.Timestamp { + if x != nil { + return x.LastCheck + } + return nil +} + type StartUpdateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -646,7 +759,7 @@ type StartUpdateRequest struct { func (x *StartUpdateRequest) Reset() { *x = StartUpdateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_server_v1_server_proto_msgTypes[10] + mi := &file_server_v1_server_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -659,7 +772,7 @@ func (x *StartUpdateRequest) String() string { func (*StartUpdateRequest) ProtoMessage() {} func (x *StartUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_server_v1_server_proto_msgTypes[10] + mi := &file_server_v1_server_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -672,7 +785,7 @@ func (x *StartUpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartUpdateRequest.ProtoReflect.Descriptor instead. func (*StartUpdateRequest) Descriptor() ([]byte, []int) { - return file_server_v1_server_proto_rawDescGZIP(), []int{10} + return file_server_v1_server_proto_rawDescGZIP(), []int{12} } func (x *StartUpdateRequest) GetNewImage() string { @@ -696,7 +809,7 @@ type StartUpdateResponse struct { func (x *StartUpdateResponse) Reset() { *x = StartUpdateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_server_v1_server_proto_msgTypes[11] + mi := &file_server_v1_server_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -709,7 +822,7 @@ func (x *StartUpdateResponse) String() string { func (*StartUpdateResponse) ProtoMessage() {} func (x *StartUpdateResponse) ProtoReflect() protoreflect.Message { - mi := &file_server_v1_server_proto_msgTypes[11] + mi := &file_server_v1_server_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -722,7 +835,7 @@ func (x *StartUpdateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StartUpdateResponse.ProtoReflect.Descriptor instead. func (*StartUpdateResponse) Descriptor() ([]byte, []int) { - return file_server_v1_server_proto_rawDescGZIP(), []int{11} + return file_server_v1_server_proto_rawDescGZIP(), []int{13} } func (x *StartUpdateResponse) GetAuthToken() string { @@ -753,7 +866,7 @@ type UpdateStatusRequest struct { func (x *UpdateStatusRequest) Reset() { *x = UpdateStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_server_v1_server_proto_msgTypes[12] + mi := &file_server_v1_server_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -766,7 +879,7 @@ func (x *UpdateStatusRequest) String() string { func (*UpdateStatusRequest) ProtoMessage() {} func (x *UpdateStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_server_v1_server_proto_msgTypes[12] + mi := &file_server_v1_server_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -779,7 +892,7 @@ func (x *UpdateStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateStatusRequest.ProtoReflect.Descriptor instead. func (*UpdateStatusRequest) Descriptor() ([]byte, []int) { - return file_server_v1_server_proto_rawDescGZIP(), []int{12} + return file_server_v1_server_proto_rawDescGZIP(), []int{14} } func (x *UpdateStatusRequest) GetAuthToken() string { @@ -812,7 +925,7 @@ type UpdateStatusResponse struct { func (x *UpdateStatusResponse) Reset() { *x = UpdateStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_server_v1_server_proto_msgTypes[13] + mi := &file_server_v1_server_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -825,7 +938,7 @@ func (x *UpdateStatusResponse) String() string { func (*UpdateStatusResponse) ProtoMessage() {} func (x *UpdateStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_server_v1_server_proto_msgTypes[13] + mi := &file_server_v1_server_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -838,7 +951,7 @@ func (x *UpdateStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateStatusResponse.ProtoReflect.Descriptor instead. func (*UpdateStatusResponse) Descriptor() ([]byte, []int) { - return file_server_v1_server_proto_rawDescGZIP(), []int{13} + return file_server_v1_server_proto_rawDescGZIP(), []int{15} } func (x *UpdateStatusResponse) GetLogLines() []string { @@ -879,7 +992,7 @@ type MetricsResolutions struct { func (x *MetricsResolutions) Reset() { *x = MetricsResolutions{} if protoimpl.UnsafeEnabled { - mi := &file_server_v1_server_proto_msgTypes[14] + mi := &file_server_v1_server_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -892,7 +1005,7 @@ func (x *MetricsResolutions) String() string { func (*MetricsResolutions) ProtoMessage() {} func (x *MetricsResolutions) ProtoReflect() protoreflect.Message { - mi := &file_server_v1_server_proto_msgTypes[14] + mi := &file_server_v1_server_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -905,7 +1018,7 @@ func (x *MetricsResolutions) ProtoReflect() protoreflect.Message { // Deprecated: Use MetricsResolutions.ProtoReflect.Descriptor instead. func (*MetricsResolutions) Descriptor() ([]byte, []int) { - return file_server_v1_server_proto_rawDescGZIP(), []int{14} + return file_server_v1_server_proto_rawDescGZIP(), []int{16} } func (x *MetricsResolutions) GetHr() *durationpb.Duration { @@ -946,7 +1059,7 @@ type AdvisorRunIntervals struct { func (x *AdvisorRunIntervals) Reset() { *x = AdvisorRunIntervals{} if protoimpl.UnsafeEnabled { - mi := &file_server_v1_server_proto_msgTypes[15] + mi := &file_server_v1_server_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -959,7 +1072,7 @@ func (x *AdvisorRunIntervals) String() string { func (*AdvisorRunIntervals) ProtoMessage() {} func (x *AdvisorRunIntervals) ProtoReflect() protoreflect.Message { - mi := &file_server_v1_server_proto_msgTypes[15] + mi := &file_server_v1_server_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -972,7 +1085,7 @@ func (x *AdvisorRunIntervals) ProtoReflect() protoreflect.Message { // Deprecated: Use AdvisorRunIntervals.ProtoReflect.Descriptor instead. func (*AdvisorRunIntervals) Descriptor() ([]byte, []int) { - return file_server_v1_server_proto_rawDescGZIP(), []int{15} + return file_server_v1_server_proto_rawDescGZIP(), []int{17} } func (x *AdvisorRunIntervals) GetStandardInterval() *durationpb.Duration { @@ -1037,7 +1150,7 @@ type Settings struct { func (x *Settings) Reset() { *x = Settings{} if protoimpl.UnsafeEnabled { - mi := &file_server_v1_server_proto_msgTypes[16] + mi := &file_server_v1_server_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1050,7 +1163,7 @@ func (x *Settings) String() string { func (*Settings) ProtoMessage() {} func (x *Settings) ProtoReflect() protoreflect.Message { - mi := &file_server_v1_server_proto_msgTypes[16] + mi := &file_server_v1_server_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1063,7 +1176,7 @@ func (x *Settings) ProtoReflect() protoreflect.Message { // Deprecated: Use Settings.ProtoReflect.Descriptor instead. func (*Settings) Descriptor() ([]byte, []int) { - return file_server_v1_server_proto_rawDescGZIP(), []int{16} + return file_server_v1_server_proto_rawDescGZIP(), []int{18} } func (x *Settings) GetUpdatesEnabled() bool { @@ -1194,7 +1307,7 @@ type GetSettingsRequest struct { func (x *GetSettingsRequest) Reset() { *x = GetSettingsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_server_v1_server_proto_msgTypes[17] + mi := &file_server_v1_server_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1207,7 +1320,7 @@ func (x *GetSettingsRequest) String() string { func (*GetSettingsRequest) ProtoMessage() {} func (x *GetSettingsRequest) ProtoReflect() protoreflect.Message { - mi := &file_server_v1_server_proto_msgTypes[17] + mi := &file_server_v1_server_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1220,7 +1333,7 @@ func (x *GetSettingsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSettingsRequest.ProtoReflect.Descriptor instead. func (*GetSettingsRequest) Descriptor() ([]byte, []int) { - return file_server_v1_server_proto_rawDescGZIP(), []int{17} + return file_server_v1_server_proto_rawDescGZIP(), []int{19} } type GetSettingsResponse struct { @@ -1234,7 +1347,7 @@ type GetSettingsResponse struct { func (x *GetSettingsResponse) Reset() { *x = GetSettingsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_server_v1_server_proto_msgTypes[18] + mi := &file_server_v1_server_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1247,7 +1360,7 @@ func (x *GetSettingsResponse) String() string { func (*GetSettingsResponse) ProtoMessage() {} func (x *GetSettingsResponse) ProtoReflect() protoreflect.Message { - mi := &file_server_v1_server_proto_msgTypes[18] + mi := &file_server_v1_server_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1260,7 +1373,7 @@ func (x *GetSettingsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSettingsResponse.ProtoReflect.Descriptor instead. func (*GetSettingsResponse) Descriptor() ([]byte, []int) { - return file_server_v1_server_proto_rawDescGZIP(), []int{18} + return file_server_v1_server_proto_rawDescGZIP(), []int{20} } func (x *GetSettingsResponse) GetSettings() *Settings { @@ -1301,7 +1414,7 @@ type ChangeSettingsRequest struct { func (x *ChangeSettingsRequest) Reset() { *x = ChangeSettingsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_server_v1_server_proto_msgTypes[19] + mi := &file_server_v1_server_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1314,7 +1427,7 @@ func (x *ChangeSettingsRequest) String() string { func (*ChangeSettingsRequest) ProtoMessage() {} func (x *ChangeSettingsRequest) ProtoReflect() protoreflect.Message { - mi := &file_server_v1_server_proto_msgTypes[19] + mi := &file_server_v1_server_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1327,7 +1440,7 @@ func (x *ChangeSettingsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeSettingsRequest.ProtoReflect.Descriptor instead. func (*ChangeSettingsRequest) Descriptor() ([]byte, []int) { - return file_server_v1_server_proto_rawDescGZIP(), []int{19} + return file_server_v1_server_proto_rawDescGZIP(), []int{21} } func (x *ChangeSettingsRequest) GetEnableUpdates() bool { @@ -1432,7 +1545,7 @@ type ChangeSettingsResponse struct { func (x *ChangeSettingsResponse) Reset() { *x = ChangeSettingsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_server_v1_server_proto_msgTypes[20] + mi := &file_server_v1_server_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1445,7 +1558,7 @@ func (x *ChangeSettingsResponse) String() string { func (*ChangeSettingsResponse) ProtoMessage() {} func (x *ChangeSettingsResponse) ProtoReflect() protoreflect.Message { - mi := &file_server_v1_server_proto_msgTypes[20] + mi := &file_server_v1_server_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1458,7 +1571,7 @@ func (x *ChangeSettingsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeSettingsResponse.ProtoReflect.Descriptor instead. func (*ChangeSettingsResponse) Descriptor() ([]byte, []int) { - return file_server_v1_server_proto_rawDescGZIP(), []int{20} + return file_server_v1_server_proto_rawDescGZIP(), []int{22} } func (x *ChangeSettingsResponse) GetSettings() *Settings { @@ -1520,270 +1633,305 @@ var file_server_v1_server_proto_rawDesc = []byte{ 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x6f, 0x6e, 0x6c, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6c, 0x6c, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x79, 0x0a, 0x11, 0x44, - 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, - 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x38, 0x0a, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x90, 0x02, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x34, 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x06, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x76, 0x61, - 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, - 0x5f, 0x6e, 0x65, 0x77, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x77, 0x73, 0x55, 0x72, 0x6c, 0x12, 0x39, - 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, - 0x6c, 0x61, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x22, 0x31, 0x0a, 0x12, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x53, 0x0a, 0x13, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x4f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x22, 0x53, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x68, - 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, - 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x5f, 0x6f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x6f, 0x67, - 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x66, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, - 0x6f, 0x67, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x09, 0x6c, 0x6f, 0x67, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, - 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x22, 0x95, - 0x01, 0x0a, 0x12, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x02, 0x68, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x68, 0x72, - 0x12, 0x29, 0x0a, 0x02, 0x6d, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x6d, 0x72, 0x12, 0x29, 0x0a, 0x02, 0x6c, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x02, 0x6c, 0x72, 0x22, 0xe5, 0x01, 0x0a, 0x13, 0x41, 0x64, 0x76, 0x69, 0x73, - 0x6f, 0x72, 0x52, 0x75, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x46, - 0x0a, 0x11, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x3e, 0x0a, 0x0d, 0x72, 0x61, 0x72, 0x65, 0x5f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x6c, 0x6c, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xd3, 0x01, 0x0a, 0x11, + 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x74, + 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x38, 0x0a, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x73, + 0x55, 0x72, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, + 0x6f, 0x74, 0x65, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x10, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x54, 0x65, 0x78, + 0x74, 0x22, 0x90, 0x02, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, + 0x12, 0x34, 0x0a, 0x06, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x63, + 0x6b, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, + 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x65, 0x77, 0x73, + 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x4e, 0x65, 0x77, 0x73, 0x55, 0x72, 0x6c, 0x12, 0x39, 0x0a, 0x0a, 0x6c, 0x61, 0x73, + 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x72, 0x61, 0x72, 0x65, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x46, 0x0a, 0x11, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x66, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, 0xe1, - 0x06, 0x0a, 0x08, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, - 0x79, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x10, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x12, 0x4e, 0x0a, 0x13, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x72, 0x65, 0x73, - 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x12, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x40, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x22, 0x17, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x8b, 0x01, + 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x6f, 0x67, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, + 0x12, 0x39, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x22, 0x31, 0x0a, 0x12, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x53, + 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x5f, 0x6f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x4f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x22, 0x53, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, + 0x74, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x61, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, + 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6c, + 0x6f, 0x67, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x66, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1d, 0x0a, + 0x0a, 0x6c, 0x6f, 0x67, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, 0x6e, 0x65, + 0x22, 0x95, 0x01, 0x0a, 0x12, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x6f, + 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x02, 0x68, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, + 0x68, 0x72, 0x12, 0x29, 0x0a, 0x02, 0x6d, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x6d, 0x72, 0x12, 0x29, 0x0a, + 0x02, 0x6c, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x73, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x73, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x0e, - 0x61, 0x77, 0x73, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x77, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x5f, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x64, - 0x76, 0x69, 0x73, 0x6f, 0x72, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x6d, - 0x61, 0x69, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x61, - 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2c, - 0x0a, 0x12, 0x70, 0x6d, 0x6d, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x6d, 0x6d, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x52, 0x0a, 0x15, - 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x61, 0x6c, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x52, - 0x75, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x13, 0x61, 0x64, 0x76, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x6c, 0x72, 0x22, 0xe5, 0x01, 0x0a, 0x13, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x52, 0x75, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, - 0x12, 0x3a, 0x0a, 0x19, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x17, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x15, - 0x61, 0x7a, 0x75, 0x72, 0x65, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x7a, 0x75, - 0x72, 0x65, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x74, - 0x6f, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x6f, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x2f, 0x0a, 0x13, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, - 0x72, 0x79, 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x10, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x12, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x53, 0x75, 0x6d, - 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, - 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x12, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x6c, 0x65, - 0x49, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x46, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2f, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x22, 0xca, 0x07, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x0e, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x48, 0x00, 0x52, 0x0d, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2e, 0x0a, 0x10, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x48, 0x01, 0x52, 0x0f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, - 0x74, 0x72, 0x79, 0x88, 0x01, 0x01, 0x12, 0x4e, 0x0a, 0x13, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x12, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x6c, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x40, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, - 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x07, 0x73, 0x73, 0x68, 0x5f, - 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x06, 0x73, 0x73, 0x68, - 0x4b, 0x65, 0x79, 0x88, 0x01, 0x01, 0x12, 0x3f, 0x0a, 0x0e, 0x61, 0x77, 0x73, 0x5f, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x72, - 0x72, 0x61, 0x79, 0x48, 0x03, 0x52, 0x0d, 0x61, 0x77, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0e, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x48, - 0x04, 0x52, 0x0d, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, - 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x0f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6c, - 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x48, 0x05, 0x52, 0x0e, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x88, 0x01, - 0x01, 0x12, 0x31, 0x0a, 0x12, 0x70, 0x6d, 0x6d, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x06, 0x52, - 0x10, 0x70, 0x6d, 0x6d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x88, 0x01, 0x01, 0x12, 0x52, 0x0a, 0x15, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x5f, - 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x52, 0x75, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x73, 0x52, 0x13, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x52, 0x75, 0x6e, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x36, 0x0a, 0x14, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x48, 0x07, 0x52, 0x13, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x41, 0x7a, 0x75, 0x72, 0x65, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x88, 0x01, 0x01, - 0x12, 0x3d, 0x0a, 0x18, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x08, 0x48, 0x08, 0x52, 0x16, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, - 0x37, 0x0a, 0x15, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x48, 0x09, - 0x52, 0x13, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, - 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x42, 0x13, 0x0a, 0x11, 0x5f, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, - 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x73, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x42, 0x11, 0x0a, 0x0f, - 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, - 0x11, 0x0a, 0x0f, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x64, 0x76, 0x69, 0x73, - 0x6f, 0x72, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6c, - 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x70, 0x6d, 0x6d, 0x5f, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x17, 0x0a, - 0x15, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x64, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x42, 0x1b, 0x0a, 0x19, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x22, 0x49, 0x0a, - 0x16, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2a, 0xce, 0x01, 0x0a, 0x12, 0x44, 0x69, 0x73, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, - 0x23, 0x0a, 0x1f, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, 0x42, 0x55, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x44, 0x4f, 0x43, 0x4b, - 0x45, 0x52, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, 0x42, 0x55, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x4f, 0x56, 0x46, 0x10, - 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x41, 0x4d, 0x49, 0x10, 0x03, 0x12, 0x1d, - 0x0a, 0x19, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, - 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x04, 0x12, 0x1a, 0x0a, - 0x16, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, - 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x44, 0x4f, 0x10, 0x05, 0x32, 0x91, 0x0c, 0x0a, 0x0d, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x07, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, - 0x92, 0x41, 0x27, 0x12, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x1c, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, - 0x12, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0xab, 0x02, 0x0a, 0x09, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x12, 0x1b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xe2, 0x01, - 0x92, 0x41, 0xc5, 0x01, 0x12, 0x16, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x1a, 0xaa, 0x01, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, - 0x77, 0x68, 0x65, 0x6e, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, - 0x65, 0x61, 0x64, 0x79, 0x20, 0x79, 0x65, 0x74, 0x2e, 0x20, 0x55, 0x73, 0x65, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x41, 0x50, 0x49, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x20, 0x6f, - 0x66, 0x20, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x70, 0x72, 0x6f, 0x62, - 0x69, 0x6e, 0x67, 0x20, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x20, 0x72, - 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, - 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x72, 0x65, 0x61, 0x64, - 0x79, 0x7a, 0x12, 0x81, 0x02, 0x0a, 0x11, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x23, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0xa0, 0x01, 0x92, 0x41, 0x79, 0x12, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x20, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x1a, 0x65, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x73, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x20, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x20, 0x69, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2f, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0xa7, 0x01, 0x0a, 0x0c, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x92, 0x41, 0x39, 0x12, 0x0d, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x1a, 0x28, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, - 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, + 0x12, 0x46, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x3e, 0x0a, 0x0d, 0x72, 0x61, 0x72, 0x65, + 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x72, 0x61, 0x72, 0x65, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x46, 0x0a, 0x11, 0x66, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, + 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x22, 0xe1, 0x06, 0x0a, 0x08, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x27, 0x0a, + 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x74, 0x72, 0x79, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x10, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x13, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x72, + 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x12, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x40, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x65, 0x74, 0x65, + 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x74, 0x65, + 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x73, 0x68, 0x5f, 0x6b, 0x65, 0x79, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x73, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x25, + 0x0a, 0x0e, 0x61, 0x77, 0x73, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x77, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, + 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, + 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x25, + 0x0a, 0x0e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, + 0x67, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x6d, 0x6d, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x6d, + 0x6d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x52, + 0x0a, 0x15, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, + 0x72, 0x52, 0x75, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x13, 0x61, + 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x52, 0x75, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, + 0x6c, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x33, + 0x0a, 0x15, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, + 0x7a, 0x75, 0x72, 0x65, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x5f, 0x74, 0x6f, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x6f, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x2f, 0x0a, 0x13, 0x74, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x74, 0x72, 0x79, 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x10, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x53, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x26, 0x0a, 0x0f, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, + 0x6c, 0x65, 0x49, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x46, 0x0a, 0x13, 0x47, 0x65, + 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x22, 0xca, 0x07, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x0e, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0d, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2e, 0x0a, 0x10, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x48, 0x01, 0x52, 0x0f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x88, 0x01, 0x01, 0x12, 0x4e, 0x0a, 0x13, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x12, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x40, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, + 0x5f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x07, 0x73, 0x73, + 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x06, 0x73, + 0x73, 0x68, 0x4b, 0x65, 0x79, 0x88, 0x01, 0x01, 0x12, 0x3f, 0x0a, 0x0e, 0x61, 0x77, 0x73, 0x5f, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x41, 0x72, 0x72, 0x61, 0x79, 0x48, 0x03, 0x52, 0x0d, 0x61, 0x77, 0x73, 0x50, 0x61, 0x72, 0x74, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0e, 0x65, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x08, 0x48, 0x04, 0x52, 0x0d, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x64, 0x76, 0x69, 0x73, + 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x0f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x48, 0x05, + 0x52, 0x0e, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, + 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a, 0x12, 0x70, 0x6d, 0x6d, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x06, 0x52, 0x10, 0x70, 0x6d, 0x6d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x88, 0x01, 0x01, 0x12, 0x52, 0x0a, 0x15, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, + 0x72, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, + 0x31, 0x2e, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x52, 0x75, 0x6e, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x13, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x52, 0x75, + 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x36, 0x0a, 0x14, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x48, 0x07, 0x52, 0x13, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x88, + 0x01, 0x01, 0x12, 0x3d, 0x0a, 0x18, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x08, 0x48, 0x08, 0x52, 0x16, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, + 0x01, 0x12, 0x37, 0x0a, 0x15, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, + 0x48, 0x09, 0x52, 0x13, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x42, 0x13, 0x0a, + 0x11, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, + 0x72, 0x79, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x73, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x42, 0x11, + 0x0a, 0x0f, 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x64, 0x76, + 0x69, 0x73, 0x6f, 0x72, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x70, 0x6d, 0x6d, + 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, + 0x17, 0x0a, 0x15, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x7a, 0x75, 0x72, 0x65, + 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x42, 0x1b, 0x0a, 0x19, 0x5f, 0x65, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x22, + 0x49, 0x0a, 0x16, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x73, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2a, 0xce, 0x01, 0x0a, 0x12, 0x44, + 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x12, 0x23, 0x0a, 0x1f, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, + 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x44, 0x4f, + 0x43, 0x4b, 0x45, 0x52, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, + 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x4f, 0x56, + 0x46, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x41, 0x4d, 0x49, 0x10, 0x03, + 0x12, 0x1d, 0x0a, 0x19, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x04, 0x12, + 0x1a, 0x0a, 0x16, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x44, 0x4f, 0x10, 0x05, 0x32, 0xbf, 0x0e, 0x0a, 0x0d, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x86, 0x01, + 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x44, 0x92, 0x41, 0x27, 0x12, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x1c, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0xab, 0x02, 0x0a, 0x09, 0x52, 0x65, 0x61, 0x64, 0x69, + 0x6e, 0x65, 0x73, 0x73, 0x12, 0x1b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, + 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0xe2, 0x01, 0x92, 0x41, 0xc5, 0x01, 0x12, 0x16, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x1a, 0xaa, + 0x01, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x72, + 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, + 0x20, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x79, 0x65, 0x74, 0x2e, 0x20, 0x55, 0x73, 0x65, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x20, 0x41, 0x50, 0x49, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x20, 0x6f, 0x66, 0x20, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x70, 0x72, + 0x6f, 0x62, 0x69, 0x6e, 0x67, 0x20, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, + 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x72, 0x65, + 0x61, 0x64, 0x79, 0x7a, 0x12, 0x81, 0x02, 0x0a, 0x11, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, + 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x23, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa0, 0x01, 0x92, 0x41, 0x79, 0x12, 0x10, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x20, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x1a, 0x65, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x2e, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x20, 0x69, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x31, 0x2f, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0xa7, 0x01, 0x0a, 0x0c, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x92, 0x41, 0x39, 0x12, + 0x0d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x1a, 0x28, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, + 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x73, 0x12, 0xab, 0x02, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x6f, 0x67, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x6f, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd3, 0x01, 0x92, 0x41, 0xaa, + 0x01, 0x12, 0x53, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, + 0x74, 0x65, 0x73, 0x74, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x53, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x61, 0x6c, 0x6c, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x62, 0x65, 0x74, + 0x77, 0x65, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, + 0x65, 0x64, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x9d, 0x01, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, @@ -1852,7 +2000,7 @@ func file_server_v1_server_proto_rawDescGZIP() []byte { var ( file_server_v1_server_proto_enumTypes = make([]protoimpl.EnumInfo, 1) - file_server_v1_server_proto_msgTypes = make([]protoimpl.MessageInfo, 21) + file_server_v1_server_proto_msgTypes = make([]protoimpl.MessageInfo, 23) file_server_v1_server_proto_goTypes = []any{ (DistributionMethod)(0), // 0: server.v1.DistributionMethod (*VersionInfo)(nil), // 1: server.v1.VersionInfo @@ -1865,68 +2013,74 @@ var ( (*CheckUpdatesRequest)(nil), // 8: server.v1.CheckUpdatesRequest (*DockerVersionInfo)(nil), // 9: server.v1.DockerVersionInfo (*CheckUpdatesResponse)(nil), // 10: server.v1.CheckUpdatesResponse - (*StartUpdateRequest)(nil), // 11: server.v1.StartUpdateRequest - (*StartUpdateResponse)(nil), // 12: server.v1.StartUpdateResponse - (*UpdateStatusRequest)(nil), // 13: server.v1.UpdateStatusRequest - (*UpdateStatusResponse)(nil), // 14: server.v1.UpdateStatusResponse - (*MetricsResolutions)(nil), // 15: server.v1.MetricsResolutions - (*AdvisorRunIntervals)(nil), // 16: server.v1.AdvisorRunIntervals - (*Settings)(nil), // 17: server.v1.Settings - (*GetSettingsRequest)(nil), // 18: server.v1.GetSettingsRequest - (*GetSettingsResponse)(nil), // 19: server.v1.GetSettingsResponse - (*ChangeSettingsRequest)(nil), // 20: server.v1.ChangeSettingsRequest - (*ChangeSettingsResponse)(nil), // 21: server.v1.ChangeSettingsResponse - (*timestamppb.Timestamp)(nil), // 22: google.protobuf.Timestamp - (*durationpb.Duration)(nil), // 23: google.protobuf.Duration - (*common.StringArray)(nil), // 24: common.StringArray + (*ListChangeLogsRequest)(nil), // 11: server.v1.ListChangeLogsRequest + (*ListChangeLogsResponse)(nil), // 12: server.v1.ListChangeLogsResponse + (*StartUpdateRequest)(nil), // 13: server.v1.StartUpdateRequest + (*StartUpdateResponse)(nil), // 14: server.v1.StartUpdateResponse + (*UpdateStatusRequest)(nil), // 15: server.v1.UpdateStatusRequest + (*UpdateStatusResponse)(nil), // 16: server.v1.UpdateStatusResponse + (*MetricsResolutions)(nil), // 17: server.v1.MetricsResolutions + (*AdvisorRunIntervals)(nil), // 18: server.v1.AdvisorRunIntervals + (*Settings)(nil), // 19: server.v1.Settings + (*GetSettingsRequest)(nil), // 20: server.v1.GetSettingsRequest + (*GetSettingsResponse)(nil), // 21: server.v1.GetSettingsResponse + (*ChangeSettingsRequest)(nil), // 22: server.v1.ChangeSettingsRequest + (*ChangeSettingsResponse)(nil), // 23: server.v1.ChangeSettingsResponse + (*timestamppb.Timestamp)(nil), // 24: google.protobuf.Timestamp + (*durationpb.Duration)(nil), // 25: google.protobuf.Duration + (*common.StringArray)(nil), // 26: common.StringArray } ) var file_server_v1_server_proto_depIdxs = []int32{ - 22, // 0: server.v1.VersionInfo.timestamp:type_name -> google.protobuf.Timestamp + 24, // 0: server.v1.VersionInfo.timestamp:type_name -> google.protobuf.Timestamp 1, // 1: server.v1.VersionResponse.server:type_name -> server.v1.VersionInfo 1, // 2: server.v1.VersionResponse.managed:type_name -> server.v1.VersionInfo 0, // 3: server.v1.VersionResponse.distribution_method:type_name -> server.v1.DistributionMethod - 22, // 4: server.v1.DockerVersionInfo.timestamp:type_name -> google.protobuf.Timestamp + 24, // 4: server.v1.DockerVersionInfo.timestamp:type_name -> google.protobuf.Timestamp 1, // 5: server.v1.CheckUpdatesResponse.installed:type_name -> server.v1.VersionInfo 9, // 6: server.v1.CheckUpdatesResponse.latest:type_name -> server.v1.DockerVersionInfo - 22, // 7: server.v1.CheckUpdatesResponse.last_check:type_name -> google.protobuf.Timestamp - 23, // 8: server.v1.MetricsResolutions.hr:type_name -> google.protobuf.Duration - 23, // 9: server.v1.MetricsResolutions.mr:type_name -> google.protobuf.Duration - 23, // 10: server.v1.MetricsResolutions.lr:type_name -> google.protobuf.Duration - 23, // 11: server.v1.AdvisorRunIntervals.standard_interval:type_name -> google.protobuf.Duration - 23, // 12: server.v1.AdvisorRunIntervals.rare_interval:type_name -> google.protobuf.Duration - 23, // 13: server.v1.AdvisorRunIntervals.frequent_interval:type_name -> google.protobuf.Duration - 15, // 14: server.v1.Settings.metrics_resolutions:type_name -> server.v1.MetricsResolutions - 23, // 15: server.v1.Settings.data_retention:type_name -> google.protobuf.Duration - 16, // 16: server.v1.Settings.advisor_run_intervals:type_name -> server.v1.AdvisorRunIntervals - 17, // 17: server.v1.GetSettingsResponse.settings:type_name -> server.v1.Settings - 15, // 18: server.v1.ChangeSettingsRequest.metrics_resolutions:type_name -> server.v1.MetricsResolutions - 23, // 19: server.v1.ChangeSettingsRequest.data_retention:type_name -> google.protobuf.Duration - 24, // 20: server.v1.ChangeSettingsRequest.aws_partitions:type_name -> common.StringArray - 16, // 21: server.v1.ChangeSettingsRequest.advisor_run_intervals:type_name -> server.v1.AdvisorRunIntervals - 17, // 22: server.v1.ChangeSettingsResponse.settings:type_name -> server.v1.Settings - 2, // 23: server.v1.ServerService.Version:input_type -> server.v1.VersionRequest - 4, // 24: server.v1.ServerService.Readiness:input_type -> server.v1.ReadinessRequest - 6, // 25: server.v1.ServerService.LeaderHealthCheck:input_type -> server.v1.LeaderHealthCheckRequest - 8, // 26: server.v1.ServerService.CheckUpdates:input_type -> server.v1.CheckUpdatesRequest - 11, // 27: server.v1.ServerService.StartUpdate:input_type -> server.v1.StartUpdateRequest - 13, // 28: server.v1.ServerService.UpdateStatus:input_type -> server.v1.UpdateStatusRequest - 18, // 29: server.v1.ServerService.GetSettings:input_type -> server.v1.GetSettingsRequest - 20, // 30: server.v1.ServerService.ChangeSettings:input_type -> server.v1.ChangeSettingsRequest - 3, // 31: server.v1.ServerService.Version:output_type -> server.v1.VersionResponse - 5, // 32: server.v1.ServerService.Readiness:output_type -> server.v1.ReadinessResponse - 7, // 33: server.v1.ServerService.LeaderHealthCheck:output_type -> server.v1.LeaderHealthCheckResponse - 10, // 34: server.v1.ServerService.CheckUpdates:output_type -> server.v1.CheckUpdatesResponse - 12, // 35: server.v1.ServerService.StartUpdate:output_type -> server.v1.StartUpdateResponse - 14, // 36: server.v1.ServerService.UpdateStatus:output_type -> server.v1.UpdateStatusResponse - 19, // 37: server.v1.ServerService.GetSettings:output_type -> server.v1.GetSettingsResponse - 21, // 38: server.v1.ServerService.ChangeSettings:output_type -> server.v1.ChangeSettingsResponse - 31, // [31:39] is the sub-list for method output_type - 23, // [23:31] is the sub-list for method input_type - 23, // [23:23] is the sub-list for extension type_name - 23, // [23:23] is the sub-list for extension extendee - 0, // [0:23] is the sub-list for field type_name + 24, // 7: server.v1.CheckUpdatesResponse.last_check:type_name -> google.protobuf.Timestamp + 9, // 8: server.v1.ListChangeLogsResponse.updates:type_name -> server.v1.DockerVersionInfo + 24, // 9: server.v1.ListChangeLogsResponse.last_check:type_name -> google.protobuf.Timestamp + 25, // 10: server.v1.MetricsResolutions.hr:type_name -> google.protobuf.Duration + 25, // 11: server.v1.MetricsResolutions.mr:type_name -> google.protobuf.Duration + 25, // 12: server.v1.MetricsResolutions.lr:type_name -> google.protobuf.Duration + 25, // 13: server.v1.AdvisorRunIntervals.standard_interval:type_name -> google.protobuf.Duration + 25, // 14: server.v1.AdvisorRunIntervals.rare_interval:type_name -> google.protobuf.Duration + 25, // 15: server.v1.AdvisorRunIntervals.frequent_interval:type_name -> google.protobuf.Duration + 17, // 16: server.v1.Settings.metrics_resolutions:type_name -> server.v1.MetricsResolutions + 25, // 17: server.v1.Settings.data_retention:type_name -> google.protobuf.Duration + 18, // 18: server.v1.Settings.advisor_run_intervals:type_name -> server.v1.AdvisorRunIntervals + 19, // 19: server.v1.GetSettingsResponse.settings:type_name -> server.v1.Settings + 17, // 20: server.v1.ChangeSettingsRequest.metrics_resolutions:type_name -> server.v1.MetricsResolutions + 25, // 21: server.v1.ChangeSettingsRequest.data_retention:type_name -> google.protobuf.Duration + 26, // 22: server.v1.ChangeSettingsRequest.aws_partitions:type_name -> common.StringArray + 18, // 23: server.v1.ChangeSettingsRequest.advisor_run_intervals:type_name -> server.v1.AdvisorRunIntervals + 19, // 24: server.v1.ChangeSettingsResponse.settings:type_name -> server.v1.Settings + 2, // 25: server.v1.ServerService.Version:input_type -> server.v1.VersionRequest + 4, // 26: server.v1.ServerService.Readiness:input_type -> server.v1.ReadinessRequest + 6, // 27: server.v1.ServerService.LeaderHealthCheck:input_type -> server.v1.LeaderHealthCheckRequest + 8, // 28: server.v1.ServerService.CheckUpdates:input_type -> server.v1.CheckUpdatesRequest + 11, // 29: server.v1.ServerService.ListChangeLogs:input_type -> server.v1.ListChangeLogsRequest + 13, // 30: server.v1.ServerService.StartUpdate:input_type -> server.v1.StartUpdateRequest + 15, // 31: server.v1.ServerService.UpdateStatus:input_type -> server.v1.UpdateStatusRequest + 20, // 32: server.v1.ServerService.GetSettings:input_type -> server.v1.GetSettingsRequest + 22, // 33: server.v1.ServerService.ChangeSettings:input_type -> server.v1.ChangeSettingsRequest + 3, // 34: server.v1.ServerService.Version:output_type -> server.v1.VersionResponse + 5, // 35: server.v1.ServerService.Readiness:output_type -> server.v1.ReadinessResponse + 7, // 36: server.v1.ServerService.LeaderHealthCheck:output_type -> server.v1.LeaderHealthCheckResponse + 10, // 37: server.v1.ServerService.CheckUpdates:output_type -> server.v1.CheckUpdatesResponse + 12, // 38: server.v1.ServerService.ListChangeLogs:output_type -> server.v1.ListChangeLogsResponse + 14, // 39: server.v1.ServerService.StartUpdate:output_type -> server.v1.StartUpdateResponse + 16, // 40: server.v1.ServerService.UpdateStatus:output_type -> server.v1.UpdateStatusResponse + 21, // 41: server.v1.ServerService.GetSettings:output_type -> server.v1.GetSettingsResponse + 23, // 42: server.v1.ServerService.ChangeSettings:output_type -> server.v1.ChangeSettingsResponse + 34, // [34:43] is the sub-list for method output_type + 25, // [25:34] is the sub-list for method input_type + 25, // [25:25] is the sub-list for extension type_name + 25, // [25:25] is the sub-list for extension extendee + 0, // [0:25] is the sub-list for field type_name } func init() { file_server_v1_server_proto_init() } @@ -2056,7 +2210,7 @@ func file_server_v1_server_proto_init() { } } file_server_v1_server_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*StartUpdateRequest); i { + switch v := v.(*ListChangeLogsRequest); i { case 0: return &v.state case 1: @@ -2068,7 +2222,7 @@ func file_server_v1_server_proto_init() { } } file_server_v1_server_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*StartUpdateResponse); i { + switch v := v.(*ListChangeLogsResponse); i { case 0: return &v.state case 1: @@ -2080,7 +2234,7 @@ func file_server_v1_server_proto_init() { } } file_server_v1_server_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*UpdateStatusRequest); i { + switch v := v.(*StartUpdateRequest); i { case 0: return &v.state case 1: @@ -2092,7 +2246,7 @@ func file_server_v1_server_proto_init() { } } file_server_v1_server_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*UpdateStatusResponse); i { + switch v := v.(*StartUpdateResponse); i { case 0: return &v.state case 1: @@ -2104,7 +2258,7 @@ func file_server_v1_server_proto_init() { } } file_server_v1_server_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*MetricsResolutions); i { + switch v := v.(*UpdateStatusRequest); i { case 0: return &v.state case 1: @@ -2116,7 +2270,7 @@ func file_server_v1_server_proto_init() { } } file_server_v1_server_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*AdvisorRunIntervals); i { + switch v := v.(*UpdateStatusResponse); i { case 0: return &v.state case 1: @@ -2128,7 +2282,7 @@ func file_server_v1_server_proto_init() { } } file_server_v1_server_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*Settings); i { + switch v := v.(*MetricsResolutions); i { case 0: return &v.state case 1: @@ -2140,7 +2294,7 @@ func file_server_v1_server_proto_init() { } } file_server_v1_server_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*GetSettingsRequest); i { + switch v := v.(*AdvisorRunIntervals); i { case 0: return &v.state case 1: @@ -2152,7 +2306,7 @@ func file_server_v1_server_proto_init() { } } file_server_v1_server_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*GetSettingsResponse); i { + switch v := v.(*Settings); i { case 0: return &v.state case 1: @@ -2164,7 +2318,7 @@ func file_server_v1_server_proto_init() { } } file_server_v1_server_proto_msgTypes[19].Exporter = func(v any, i int) any { - switch v := v.(*ChangeSettingsRequest); i { + switch v := v.(*GetSettingsRequest); i { case 0: return &v.state case 1: @@ -2176,6 +2330,30 @@ func file_server_v1_server_proto_init() { } } file_server_v1_server_proto_msgTypes[20].Exporter = func(v any, i int) any { + switch v := v.(*GetSettingsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_server_v1_server_proto_msgTypes[21].Exporter = func(v any, i int) any { + switch v := v.(*ChangeSettingsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_server_v1_server_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*ChangeSettingsResponse); i { case 0: return &v.state @@ -2188,14 +2366,14 @@ func file_server_v1_server_proto_init() { } } } - file_server_v1_server_proto_msgTypes[19].OneofWrappers = []any{} + file_server_v1_server_proto_msgTypes[21].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_server_v1_server_proto_rawDesc, NumEnums: 1, - NumMessages: 21, + NumMessages: 23, NumExtensions: 0, NumServices: 1, }, diff --git a/api/server/v1/server.pb.gw.go b/api/server/v1/server.pb.gw.go index 07e35fb1ec..26253aedbb 100644 --- a/api/server/v1/server.pb.gw.go +++ b/api/server/v1/server.pb.gw.go @@ -129,6 +129,22 @@ func local_request_ServerService_CheckUpdates_0(ctx context.Context, marshaler r return msg, metadata, err } +func request_ServerService_ListChangeLogs_0(ctx context.Context, marshaler runtime.Marshaler, client ServerServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListChangeLogsRequest + var metadata runtime.ServerMetadata + + msg, err := client.ListChangeLogs(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_ServerService_ListChangeLogs_0(ctx context.Context, marshaler runtime.Marshaler, server ServerServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListChangeLogsRequest + var metadata runtime.ServerMetadata + + msg, err := server.ListChangeLogs(ctx, &protoReq) + return msg, metadata, err +} + func request_ServerService_StartUpdate_0(ctx context.Context, marshaler runtime.Marshaler, client ServerServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq StartUpdateRequest var metadata runtime.ServerMetadata @@ -319,6 +335,30 @@ func RegisterServerServiceHandlerServer(ctx context.Context, mux *runtime.ServeM forward_ServerService_CheckUpdates_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle("GET", pattern_ServerService_ListChangeLogs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/server.v1.ServerService/ListChangeLogs", runtime.WithHTTPPathPattern("/v1/server/updates/changelogs")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ServerService_ListChangeLogs_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ServerService_ListChangeLogs_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle("POST", pattern_ServerService_StartUpdate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -539,6 +579,27 @@ func RegisterServerServiceHandlerClient(ctx context.Context, mux *runtime.ServeM forward_ServerService_CheckUpdates_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle("GET", pattern_ServerService_ListChangeLogs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/server.v1.ServerService/ListChangeLogs", runtime.WithHTTPPathPattern("/v1/server/updates/changelogs")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ServerService_ListChangeLogs_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ServerService_ListChangeLogs_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle("POST", pattern_ServerService_StartUpdate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -635,6 +696,8 @@ var ( pattern_ServerService_CheckUpdates_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "server", "updates"}, "")) + pattern_ServerService_ListChangeLogs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "server", "updates", "changelogs"}, "")) + pattern_ServerService_StartUpdate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "server", "updates"}, "start")) pattern_ServerService_UpdateStatus_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "server", "updates"}, "getStatus")) @@ -653,6 +716,8 @@ var ( forward_ServerService_CheckUpdates_0 = runtime.ForwardResponseMessage + forward_ServerService_ListChangeLogs_0 = runtime.ForwardResponseMessage + forward_ServerService_StartUpdate_0 = runtime.ForwardResponseMessage forward_ServerService_UpdateStatus_0 = runtime.ForwardResponseMessage diff --git a/api/server/v1/server.pb.validate.go b/api/server/v1/server.pb.validate.go index 39897b8317..48dad7e546 100644 --- a/api/server/v1/server.pb.validate.go +++ b/api/server/v1/server.pb.validate.go @@ -998,6 +998,10 @@ func (m *DockerVersionInfo) validate(all bool) error { } } + // no validation rules for ReleaseNotesUrl + + // no validation rules for ReleaseNotesText + if len(errors) > 0 { return DockerVersionInfoMultiError(errors) } @@ -1271,6 +1275,273 @@ var _ interface { ErrorName() string } = CheckUpdatesResponseValidationError{} +// Validate checks the field values on ListChangeLogsRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *ListChangeLogsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListChangeLogsRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListChangeLogsRequestMultiError, or nil if none found. +func (m *ListChangeLogsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListChangeLogsRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(errors) > 0 { + return ListChangeLogsRequestMultiError(errors) + } + + return nil +} + +// ListChangeLogsRequestMultiError is an error wrapping multiple validation +// errors returned by ListChangeLogsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListChangeLogsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListChangeLogsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListChangeLogsRequestMultiError) AllErrors() []error { return m } + +// ListChangeLogsRequestValidationError is the validation error returned by +// ListChangeLogsRequest.Validate if the designated constraints aren't met. +type ListChangeLogsRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListChangeLogsRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListChangeLogsRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListChangeLogsRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListChangeLogsRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListChangeLogsRequestValidationError) ErrorName() string { + return "ListChangeLogsRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e ListChangeLogsRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListChangeLogsRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListChangeLogsRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListChangeLogsRequestValidationError{} + +// Validate checks the field values on ListChangeLogsResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *ListChangeLogsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListChangeLogsResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListChangeLogsResponseMultiError, or nil if none found. +func (m *ListChangeLogsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListChangeLogsResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + for idx, item := range m.GetUpdates() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListChangeLogsResponseValidationError{ + field: fmt.Sprintf("Updates[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListChangeLogsResponseValidationError{ + field: fmt.Sprintf("Updates[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListChangeLogsResponseValidationError{ + field: fmt.Sprintf("Updates[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if all { + switch v := interface{}(m.GetLastCheck()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListChangeLogsResponseValidationError{ + field: "LastCheck", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListChangeLogsResponseValidationError{ + field: "LastCheck", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetLastCheck()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListChangeLogsResponseValidationError{ + field: "LastCheck", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return ListChangeLogsResponseMultiError(errors) + } + + return nil +} + +// ListChangeLogsResponseMultiError is an error wrapping multiple validation +// errors returned by ListChangeLogsResponse.ValidateAll() if the designated +// constraints aren't met. +type ListChangeLogsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListChangeLogsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListChangeLogsResponseMultiError) AllErrors() []error { return m } + +// ListChangeLogsResponseValidationError is the validation error returned by +// ListChangeLogsResponse.Validate if the designated constraints aren't met. +type ListChangeLogsResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListChangeLogsResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListChangeLogsResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListChangeLogsResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListChangeLogsResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListChangeLogsResponseValidationError) ErrorName() string { + return "ListChangeLogsResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e ListChangeLogsResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListChangeLogsResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListChangeLogsResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListChangeLogsResponseValidationError{} + // Validate checks the field values on StartUpdateRequest with the rules // defined in the proto definition for this message. If any rules are // violated, the first error encountered is returned, or nil if there are no violations. diff --git a/api/server/v1/server.proto b/api/server/v1/server.proto index a7785f2058..79841df710 100644 --- a/api/server/v1/server.proto +++ b/api/server/v1/server.proto @@ -71,6 +71,10 @@ message DockerVersionInfo { string tag = 2; // Release date. google.protobuf.Timestamp timestamp = 3; + // Release notes URL for the version (if available). + string release_notes_url = 4; + // Release notes text for the version (if available). + string release_notes_text = 5; } message CheckUpdatesResponse { @@ -86,6 +90,16 @@ message CheckUpdatesResponse { google.protobuf.Timestamp last_check = 5; } +message ListChangeLogsRequest {} + +message ListChangeLogsResponse { + // List of available updates. + repeated DockerVersionInfo updates = 1; + + // Last check time. + google.protobuf.Timestamp last_check = 2; +} + message StartUpdateRequest { string new_image = 1; } @@ -236,6 +250,14 @@ service ServerService { description: "Checks for available PMM Server updates." }; } + + rpc ListChangeLogs(ListChangeLogsRequest) returns (ListChangeLogsResponse) { + option (google.api.http) = {get: "/v1/server/updates/changelogs"}; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "List all the changes between the installed version and the latest available version" + description: "List all the changes between the installed version and the latest available version" + }; + } // StartUpdate starts PMM Server update. rpc StartUpdate(StartUpdateRequest) returns (StartUpdateResponse) { option (google.api.http) = { diff --git a/api/server/v1/server_grpc.pb.go b/api/server/v1/server_grpc.pb.go index 708f24cadf..0a33954455 100644 --- a/api/server/v1/server_grpc.pb.go +++ b/api/server/v1/server_grpc.pb.go @@ -24,6 +24,7 @@ const ( ServerService_Readiness_FullMethodName = "/server.v1.ServerService/Readiness" ServerService_LeaderHealthCheck_FullMethodName = "/server.v1.ServerService/LeaderHealthCheck" ServerService_CheckUpdates_FullMethodName = "/server.v1.ServerService/CheckUpdates" + ServerService_ListChangeLogs_FullMethodName = "/server.v1.ServerService/ListChangeLogs" ServerService_StartUpdate_FullMethodName = "/server.v1.ServerService/StartUpdate" ServerService_UpdateStatus_FullMethodName = "/server.v1.ServerService/UpdateStatus" ServerService_GetSettings_FullMethodName = "/server.v1.ServerService/GetSettings" @@ -45,6 +46,7 @@ type ServerServiceClient interface { LeaderHealthCheck(ctx context.Context, in *LeaderHealthCheckRequest, opts ...grpc.CallOption) (*LeaderHealthCheckResponse, error) // CheckUpdates checks for available PMM Server updates. CheckUpdates(ctx context.Context, in *CheckUpdatesRequest, opts ...grpc.CallOption) (*CheckUpdatesResponse, error) + ListChangeLogs(ctx context.Context, in *ListChangeLogsRequest, opts ...grpc.CallOption) (*ListChangeLogsResponse, error) // StartUpdate starts PMM Server update. StartUpdate(ctx context.Context, in *StartUpdateRequest, opts ...grpc.CallOption) (*StartUpdateResponse, error) // UpdateStatus returns PMM Server update status. @@ -103,6 +105,16 @@ func (c *serverServiceClient) CheckUpdates(ctx context.Context, in *CheckUpdates return out, nil } +func (c *serverServiceClient) ListChangeLogs(ctx context.Context, in *ListChangeLogsRequest, opts ...grpc.CallOption) (*ListChangeLogsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListChangeLogsResponse) + err := c.cc.Invoke(ctx, ServerService_ListChangeLogs_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *serverServiceClient) StartUpdate(ctx context.Context, in *StartUpdateRequest, opts ...grpc.CallOption) (*StartUpdateResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(StartUpdateResponse) @@ -158,6 +170,7 @@ type ServerServiceServer interface { LeaderHealthCheck(context.Context, *LeaderHealthCheckRequest) (*LeaderHealthCheckResponse, error) // CheckUpdates checks for available PMM Server updates. CheckUpdates(context.Context, *CheckUpdatesRequest) (*CheckUpdatesResponse, error) + ListChangeLogs(context.Context, *ListChangeLogsRequest) (*ListChangeLogsResponse, error) // StartUpdate starts PMM Server update. StartUpdate(context.Context, *StartUpdateRequest) (*StartUpdateResponse, error) // UpdateStatus returns PMM Server update status. @@ -192,6 +205,10 @@ func (UnimplementedServerServiceServer) CheckUpdates(context.Context, *CheckUpda return nil, status.Errorf(codes.Unimplemented, "method CheckUpdates not implemented") } +func (UnimplementedServerServiceServer) ListChangeLogs(context.Context, *ListChangeLogsRequest) (*ListChangeLogsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListChangeLogs not implemented") +} + func (UnimplementedServerServiceServer) StartUpdate(context.Context, *StartUpdateRequest) (*StartUpdateResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method StartUpdate not implemented") } @@ -300,6 +317,24 @@ func _ServerService_CheckUpdates_Handler(srv interface{}, ctx context.Context, d return interceptor(ctx, in, info, handler) } +func _ServerService_ListChangeLogs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListChangeLogsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServerServiceServer).ListChangeLogs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ServerService_ListChangeLogs_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServerServiceServer).ListChangeLogs(ctx, req.(*ListChangeLogsRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _ServerService_StartUpdate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(StartUpdateRequest) if err := dec(in); err != nil { @@ -395,6 +430,10 @@ var ServerService_ServiceDesc = grpc.ServiceDesc{ MethodName: "CheckUpdates", Handler: _ServerService_CheckUpdates_Handler, }, + { + MethodName: "ListChangeLogs", + Handler: _ServerService_ListChangeLogs_Handler, + }, { MethodName: "StartUpdate", Handler: _ServerService_StartUpdate_Handler, diff --git a/api/swagger/swagger-dev.json b/api/swagger/swagger-dev.json index fa2acd03a6..c04bb18816 100644 --- a/api/swagger/swagger-dev.json +++ b/api/swagger/swagger-dev.json @@ -27418,6 +27418,16 @@ "type": "string", "format": "date-time", "x-order": 2 + }, + "release_notes_url": { + "description": "Release notes URL for the version (if available).", + "type": "string", + "x-order": 3 + }, + "release_notes_text": { + "description": "Release notes text for the version (if available).", + "type": "string", + "x-order": 4 } }, "x-order": 1 @@ -27477,6 +27487,101 @@ } } }, + "/v1/server/updates/changelogs": { + "get": { + "description": "List all the changes between the installed version and the latest available version", + "tags": [ + "ServerService" + ], + "summary": "List all the changes between the installed version and the latest available version", + "operationId": "ListChangeLogs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "updates": { + "description": "List of available updates.", + "type": "array", + "items": { + "type": "object", + "properties": { + "version": { + "description": "PMM Version.", + "type": "string", + "x-order": 0 + }, + "tag": { + "description": "Docker image tag.", + "type": "string", + "x-order": 1 + }, + "timestamp": { + "description": "Release date.", + "type": "string", + "format": "date-time", + "x-order": 2 + }, + "release_notes_url": { + "description": "Release notes URL for the version (if available).", + "type": "string", + "x-order": 3 + }, + "release_notes_text": { + "description": "Release notes text for the version (if available).", + "type": "string", + "x-order": 4 + } + } + }, + "x-order": 0 + }, + "last_check": { + "description": "Last check time.", + "type": "string", + "format": "date-time", + "x-order": 1 + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "x-order": 0 + }, + "message": { + "type": "string", + "x-order": 1 + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string", + "x-order": 0 + } + }, + "additionalProperties": false + }, + "x-order": 2 + } + } + } + } + } + } + }, "/v1/server/updates:getStatus": { "post": { "description": "Returns PMM Server update status.", diff --git a/api/swagger/swagger.json b/api/swagger/swagger.json index 1a8543e12f..d4f0128cbb 100644 --- a/api/swagger/swagger.json +++ b/api/swagger/swagger.json @@ -26460,6 +26460,16 @@ "type": "string", "format": "date-time", "x-order": 2 + }, + "release_notes_url": { + "description": "Release notes URL for the version (if available).", + "type": "string", + "x-order": 3 + }, + "release_notes_text": { + "description": "Release notes text for the version (if available).", + "type": "string", + "x-order": 4 } }, "x-order": 1 @@ -26519,6 +26529,101 @@ } } }, + "/v1/server/updates/changelogs": { + "get": { + "description": "List all the changes between the installed version and the latest available version", + "tags": [ + "ServerService" + ], + "summary": "List all the changes between the installed version and the latest available version", + "operationId": "ListChangeLogs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "updates": { + "description": "List of available updates.", + "type": "array", + "items": { + "type": "object", + "properties": { + "version": { + "description": "PMM Version.", + "type": "string", + "x-order": 0 + }, + "tag": { + "description": "Docker image tag.", + "type": "string", + "x-order": 1 + }, + "timestamp": { + "description": "Release date.", + "type": "string", + "format": "date-time", + "x-order": 2 + }, + "release_notes_url": { + "description": "Release notes URL for the version (if available).", + "type": "string", + "x-order": 3 + }, + "release_notes_text": { + "description": "Release notes text for the version (if available).", + "type": "string", + "x-order": 4 + } + } + }, + "x-order": 0 + }, + "last_check": { + "description": "Last check time.", + "type": "string", + "format": "date-time", + "x-order": 1 + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "x-order": 0 + }, + "message": { + "type": "string", + "x-order": 1 + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string", + "x-order": 0 + } + }, + "additionalProperties": false + }, + "x-order": 2 + } + } + } + } + } + } + }, "/v1/server/updates:getStatus": { "post": { "description": "Returns PMM Server update status.", diff --git a/docker-compose.yml b/docker-compose.yml index be66d5f014..06341c92cd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,8 +25,7 @@ services: - PMM_WATCHTOWER_HOST=${PMM_WATCHTOWER_HOST:-http://watchtower:8080} - PMM_WATCHTOWER_TOKEN=${PMM_WATCHTOWER_TOKEN:-INSECURE_TOKEN} - PMM_RELEASE_VERSION=3.0.0-alpha - # - PMM_DEV_PERCONA_PLATFORM_ADDRESS=https://check.localhost - # - PMM_DEV_PERCONA_PLATFORM_INSECURE=1 + # - PMM_DEV_VERSION_SERVICE_URL=http://localhost:11000 # - PMM_DEV_PERCONA_PLATFORM_PUBLIC_KEY= # - PMM_DEV_TELEMETRY_INTERVAL=10s # - PMM_DEV_TELEMETRY_DISABLE_START_DELAY=1 diff --git a/managed/services/server/server.go b/managed/services/server/server.go index 051214bf8c..2a2a358308 100644 --- a/managed/services/server/server.go +++ b/managed/services/server/server.go @@ -269,8 +269,10 @@ func (s *Server) CheckUpdates(ctx context.Context, req *serverv1.CheckUpdatesReq Timestamp: timestamppb.New(*v.Installed.BuildTime), }, Latest: &serverv1.DockerVersionInfo{ - Version: v.Latest.Version.String(), - Tag: v.Latest.DockerImage, + Version: v.Latest.Version.String(), + Tag: v.Latest.DockerImage, + ReleaseNotesUrl: v.Latest.ReleaseNotesURL, + ReleaseNotesText: v.Latest.ReleaseNotesText, }, UpdateAvailable: v.Latest.DockerImage != "", LatestNewsUrl: v.LatestNewsURL, @@ -295,6 +297,30 @@ func (s *Server) CheckUpdates(ctx context.Context, req *serverv1.CheckUpdatesReq return res, nil } +// ListChangeLogs lists PMM versions between currently installed version and the latest one. +func (s *Server) ListChangeLogs(ctx context.Context, req *serverv1.ListChangeLogsRequest) (*serverv1.ListChangeLogsResponse, error) { + versions, err := s.updater.ListUpdates(ctx) + if err != nil { + return nil, status.Error(codes.Unavailable, "failed to list available updates") + } + + updates := make([]*serverv1.DockerVersionInfo, 0, len(versions)) + for _, v := range versions { + updates = append(updates, &serverv1.DockerVersionInfo{ + Version: v.Version.String(), + Tag: v.DockerImage, + ReleaseNotesText: v.ReleaseNotesText, + ReleaseNotesUrl: v.ReleaseNotesURL, + }) + } + res := &serverv1.ListChangeLogsResponse{ + Updates: updates, + LastCheck: timestamppb.Now(), + } + + return res, nil +} + // StartUpdate starts PMM Server update. func (s *Server) StartUpdate(ctx context.Context, req *serverv1.StartUpdateRequest) (*serverv1.StartUpdateResponse, error) { s.envRW.RLock() @@ -307,7 +333,7 @@ func (s *Server) StartUpdate(ctx context.Context, req *serverv1.StartUpdateReque newImage := req.GetNewImage() if newImage == "" { - latest, err := s.updater.latest(ctx) + _, latest, err := s.updater.latest(ctx) if err != nil { s.l.WithError(err).Error("Failed to get latest version") newImage = defaultLatestPMMImage diff --git a/managed/services/server/updater.go b/managed/services/server/updater.go index 62683a7643..5f1a30fdc6 100644 --- a/managed/services/server/updater.go +++ b/managed/services/server/updater.go @@ -25,6 +25,7 @@ import ( "net/http" "net/url" "os" + "sort" "strings" "sync" "time" @@ -39,11 +40,12 @@ import ( // defaultLatestPMMImage is the default image name to use when the latest version cannot be determined. const ( - defaultLatestPMMImage = "perconalab/pmm-server:3-dev-latest" - pmmUpdatePerformLog = "/srv/logs/pmm-update-perform-init.log" - updateCheckInterval = 24 * time.Hour - updateCheckResultFresh = updateCheckInterval + 10*time.Minute - updateDefaultTimeout = 30 * time.Second + defaultLatestPMMImage = "perconalab/pmm-server:3-dev-latest" + pmmUpdatePerformLog = "/srv/logs/pmm-update-perform-init.log" + defaultVersionServiceAddress = "https://check-dev.percona.com" + updateCheckInterval = 24 * time.Hour + updateCheckResultFresh = updateCheckInterval + 10*time.Minute + updateDefaultTimeout = 30 * time.Second ) var fileName = "/etc/pmm-server-update-version.json" @@ -60,6 +62,10 @@ type Updater struct { checkRW sync.RWMutex lastCheckResult *version.DockerVersionInfo lastCheckTime time.Time + + // releaseNotes holds a map of PMM server versions to their release notes. + releaseNotes map[string]string + releaseNotesRW sync.RWMutex } // NewUpdater creates a new Updater service. @@ -68,6 +74,7 @@ func NewUpdater(watchtowerHost *url.URL, gRPCMessageMaxSize uint32) *Updater { l: logrus.WithField("service", "updater"), watchtowerHost: watchtowerHost, gRPCMessageMaxSize: gRPCMessageMaxSize, + releaseNotes: make(map[string]string), } return u } @@ -181,20 +188,29 @@ func (up *Updater) LastCheckUpdatesResult(ctx context.Context) (*version.UpdateC }, lastCheckTime } -func (up *Updater) latest(ctx context.Context) (*version.DockerVersionInfo, error) { +// ListUpdates returns the list of available versions between installed and latest. +func (up *Updater) ListUpdates(ctx context.Context) ([]*version.DockerVersionInfo, error) { + all, _, err := up.latest(ctx) + if err != nil { + return nil, err + } + return all, nil +} + +func (up *Updater) latest(ctx context.Context) ([]*version.DockerVersionInfo, *version.DockerVersionInfo, error) { info, err := up.readFromFile() if err != nil { - return nil, errors.Wrap(err, "failed to read from file") + return nil, nil, errors.Wrap(err, "failed to read from file") } if info != nil { - return info, nil + return nil, info, nil } if os.Getenv("PMM_DEV_UPDATE_DOCKER_IMAGE") != "" { return up.parseDockerTag(os.Getenv("PMM_DEV_UPDATE_DOCKER_IMAGE")) } - // If file does not exist, and ENV variable is not set, go get the latest tag from DockerHub - return up.latestAvailableFromDockerHub(ctx) + // If file does not exist, and ENV variable is not set, go get the latest versions from Percona version service. + return up.latestAvailableFromVersionService(ctx) } func (up *Updater) readFromFile() (*version.DockerVersionInfo, error) { @@ -217,104 +233,144 @@ func (up *Updater) readFromFile() (*version.DockerVersionInfo, error) { } type result struct { - Name string `json:"name"` - TagLastPushed time.Time `json:"tag_last_pushed"` + Version string `json:"version"` + ImageInfo imageInfo `json:"imageInfo"` } -// TagsResponse is a response from DockerHub. -type TagsResponse struct { - Results []result `json:"results"` +type imageInfo struct { + ImagePath string `json:"imagePath"` + ImageReleaseTimestamp time.Time `json:"imageReleaseTimestamp"` } -// latestAvailableFromDockerHub returns the latest available version from DockerHub. -// It returns the latest minor version for the current major version. -// If the current version is the latest minor version, it returns the next major version. -// If the current version is the latest version, it returns the current version. -func (up *Updater) latestAvailableFromDockerHub(ctx context.Context) (*version.DockerVersionInfo, error) { - repo := os.Getenv("PMM_DEV_UPDATE_DOCKER_REPO") - if repo == "" { - repo = "percona/pmm-server" - } - u := "https://registry.hub.docker.com/v2/repositories/" + repo + "/tags/?page_size=100" +// MetadataResponse is a response from the metadata endpoint on Percona version service. +type MetadataResponse struct { + Versions []result `json:"versions"` +} + +// ReleaseNotesResponse is a response from the release-notes endpoint on Percona version service. +type ReleaseNotesResponse struct { + ReleaseNote string `json:"releaseNote"` +} + +// latestAvailableFromVersionService queries Percona version service and returns: +// - list of versions between the installed version and the latest version (inclusive) +// - the latest available version (i.e., the latest minor version for the current major version). +// If the current version is the latest minor version, it returns the next major version as the latest. +// If the current version is the latest version, it returns the current version as the latest. +func (up *Updater) latestAvailableFromVersionService(ctx context.Context) ([]*version.DockerVersionInfo, *version.DockerVersionInfo, error) { + versionServiceUrl := os.Getenv("PMM_DEV_VERSION_SERVICE_URL") + if versionServiceUrl == "" { + versionServiceUrl = defaultVersionServiceAddress + } + u := versionServiceUrl + "/metadata/v1/pmm-server" req, err := http.NewRequestWithContext(ctx, http.MethodGet, u, nil) if err != nil { up.l.WithError(err).Error("Failed to create request") - return nil, errors.Wrap(err, "failed to create request") + return nil, nil, errors.Wrap(err, "failed to create request") } resp, err := http.DefaultClient.Do(req) if err != nil { - up.l.WithError(err).Error("Failed to get tags from DockerHub") - return nil, errors.Wrap(err, "failed to get tags from DockerHub") + up.l.WithError(err).Error("Failed to get PMM server versions") + return nil, nil, errors.Wrap(err, "failed to get PMM server versions") } defer resp.Body.Close() //nolint:errcheck - var tagsResponse TagsResponse - if err := json.NewDecoder(resp.Body).Decode(&tagsResponse); err != nil { + var metadataResponse MetadataResponse + if err := json.NewDecoder(resp.Body).Decode(&metadataResponse); err != nil { up.l.WithError(err).Error("Failed to decode response") - return nil, errors.Wrap(err, "failed to decode response") + return nil, nil, errors.Wrap(err, "failed to decode response") } - if len(tagsResponse.Results) != 0 { - up.l.Infof("Found %d tags", len(tagsResponse.Results)) - next := up.next(*up.currentVersion(), tagsResponse.Results) - if next.DockerImage != "" { - next.DockerImage = repo + ":" + next.DockerImage - } - return next, err + if len(metadataResponse.Versions) != 0 { + up.l.Infof("Found %d versions", len(metadataResponse.Versions)) + updates, next := up.next(*up.currentVersion(), metadataResponse.Versions) + return updates, next, err } - return nil, errors.New("no tags found") + return nil, nil, errors.New("no tags found") } -func (up *Updater) parseDockerTag(tag string) (*version.DockerVersionInfo, error) { +func (up *Updater) parseDockerTag(tag string) ([]*version.DockerVersionInfo, *version.DockerVersionInfo, error) { splitTag := strings.Split(tag, ":") if len(splitTag) != 2 { - return nil, fmt.Errorf("invalid tag: %s", tag) + return nil, nil, fmt.Errorf("invalid tag: %s", tag) } parsed, err := version.Parse(splitTag[1]) if err != nil { up.l.Debugf("Failed to parse version: %s", splitTag[1]) - return &version.DockerVersionInfo{DockerImage: tag}, nil //nolint:nilerr + return nil, &version.DockerVersionInfo{DockerImage: tag}, nil //nolint:nilerr } - return &version.DockerVersionInfo{ + return nil, &version.DockerVersionInfo{ Version: *parsed, DockerImage: tag, }, nil } -func (up *Updater) next(currentVersion version.Parsed, results []result) *version.DockerVersionInfo { +func (up *Updater) next(currentVersion version.Parsed, results []result) ([]*version.DockerVersionInfo, *version.DockerVersionInfo) { + repo := os.Getenv("PMM_DEV_UPDATE_DOCKER_REPO") + if repo == "" { + repo = "percona/pmm-server" + } nextMinor := &version.DockerVersionInfo{ Version: currentVersion, } + updates := version.DockerVersionsInfo{} var nextMajor *version.DockerVersionInfo for _, result := range results { - v, err := version.Parse(result.Name) + v, err := version.Parse(result.Version) if err != nil { - up.l.Debugf("Failed to parse version: %s", result.Name) + up.l.Debugf("Failed to parse version: %s", result.Version) continue } if !currentVersion.Less(v) { continue } - if v.Major == currentVersion.Major && nextMinor.Version.Less(v) { // next major + releaseNotesURL := "https://per.co.na/pmm/" + v.String() + releaseNote, err := up.getReleaseNotesText(context.Background(), *v) + if err != nil { + up.l.Errorf("Failed to get release notes for version: %s, %s", v.String(), err.Error()) + } + + dockerImage := result.ImageInfo.ImagePath + if dockerImage == "" { + dockerImage = repo + ":" + result.Version + } + // versions with pre-lease labels (e.g 2.40.1-rc) are not considered for the update diffs + if v.Rest == "" && currentVersion.Less(v) { + updates = append(updates, &version.DockerVersionInfo{ + Version: *v, + DockerImage: dockerImage, + BuildTime: result.ImageInfo.ImageReleaseTimestamp, + ReleaseNotesURL: releaseNotesURL, + ReleaseNotesText: releaseNote, + }) + } + + if v.Major == currentVersion.Major && nextMinor.Version.Less(v) { nextMinor = &version.DockerVersionInfo{ - Version: *v, - DockerImage: result.Name, - BuildTime: result.TagLastPushed, + Version: *v, + DockerImage: dockerImage, + BuildTime: result.ImageInfo.ImageReleaseTimestamp, + ReleaseNotesURL: releaseNotesURL, + ReleaseNotesText: releaseNote, } } if v.Major > currentVersion.Major && (nextMajor == nil || (nextMajor.Version.Less(v) && nextMajor.Version.Major == v.Major) || v.Major < nextMajor.Version.Major) { nextMajor = &version.DockerVersionInfo{ - Version: *v, - DockerImage: result.Name, - BuildTime: result.TagLastPushed, + Version: *v, + DockerImage: dockerImage, + BuildTime: result.ImageInfo.ImageReleaseTimestamp, + ReleaseNotesURL: releaseNotesURL, + ReleaseNotesText: releaseNote, } } } + + sort.Sort(updates) if nextMinor.Version == currentVersion && nextMajor != nil { - return nextMajor + return updates, nextMajor } - return nextMinor + return updates, nextMinor } // InstalledPMMVersion returns the currently installed PMM version. @@ -389,7 +445,7 @@ func (up *Updater) check(ctx context.Context) error { up.checkRW.Lock() defer up.checkRW.Unlock() - latest, err := up.latest(ctx) + _, latest, err := up.latest(ctx) if err != nil { return errors.Wrap(err, "failed to get latest version") } @@ -420,3 +476,48 @@ func isHostAvailable(host string, port string, timeout time.Duration) bool { } return false } + +// getReleaseNotesText is a placeholder for getting release notes in MarkDown format +// until we finalize the implementation on version service. +func (up *Updater) getReleaseNotesText(ctx context.Context, version version.Parsed) (string, error) { + if version.Rest != "" { + version.Rest = "" + } + + up.releaseNotesRW.Lock() + defer up.releaseNotesRW.Unlock() + versionString := version.String() + if releaseNotes, ok := up.releaseNotes[versionString]; ok { + return releaseNotes, nil + } + + versionServiceUrl := os.Getenv("PMM_DEV_VERSION_SERVICE_URL") + if versionServiceUrl == "" { + versionServiceUrl = defaultVersionServiceAddress + } + u := versionServiceUrl + "/release-notes/v1/pmm/" + versionString + req, err := http.NewRequestWithContext(ctx, http.MethodGet, u, nil) + if err != nil { + up.l.WithError(err).Error("Failed to create request") + return "", errors.Wrap(err, "failed to create request") + } + resp, err := http.DefaultClient.Do(req) + if err != nil { + up.l.WithError(err).Errorf("Failed to get release note for version: %s", versionString) + return "", errors.Wrapf(err, "failed to get release notes for version: %s", versionString) + } + + if resp.StatusCode != http.StatusOK { + up.l.Errorf("Failed to get release notes for PMM %s, got HTTP %d", version.String(), resp.StatusCode) + return "", nil + } + defer resp.Body.Close() //nolint:errcheck + var rnResponse ReleaseNotesResponse + if err := json.NewDecoder(resp.Body).Decode(&rnResponse); err != nil { + up.l.WithError(err).Error("Failed to decode response") + return "", errors.Wrap(err, "failed to decode response") + } + + up.releaseNotes[versionString] = rnResponse.ReleaseNote + return rnResponse.ReleaseNote, nil +} diff --git a/managed/services/server/updater_test.go b/managed/services/server/updater_test.go index 3f033bfbb9..8d5ff848c7 100644 --- a/managed/services/server/updater_test.go +++ b/managed/services/server/updater_test.go @@ -20,6 +20,7 @@ import ( "net/url" "os" "path/filepath" + "sort" "strings" "testing" "time" @@ -66,7 +67,7 @@ func TestUpdater(t *testing.T) { args: args{ currentVersion: "3.0.0", results: []result{ - {Name: "3.0.0"}, + {Version: "3.0.0"}, }, }, want: &versionInfo{ @@ -79,14 +80,14 @@ func TestUpdater(t *testing.T) { args: args{ currentVersion: "3.0.0", results: []result{ - {Name: "3.2.0"}, - {Name: "3.1.0"}, - {Name: "3.0.0"}, + {Version: "3.2.0"}, + {Version: "3.1.0"}, + {Version: "3.0.0"}, }, }, want: &versionInfo{ Version: "3.2.0", - DockerImage: "3.2.0", + DockerImage: "percona/pmm-server:3.2.0", }, }, { @@ -94,13 +95,18 @@ func TestUpdater(t *testing.T) { args: args{ currentVersion: "3.0.0", results: []result{ - {Name: "3.0.0"}, - {Name: "3.0.1", TagLastPushed: time.Date(2024, 3, 20, 15, 48, 7, 145620000, time.UTC)}, + {Version: "3.0.0"}, + { + Version: "3.0.1", + ImageInfo: imageInfo{ + ImageReleaseTimestamp: time.Date(2024, 3, 20, 15, 48, 7, 145620000, time.UTC), + }, + }, }, }, want: &versionInfo{ Version: "3.0.1", - DockerImage: "3.0.1", + DockerImage: "percona/pmm-server:3.0.1", BuildTime: pointer.To(time.Date(2024, 3, 20, 15, 48, 7, 145620000, time.UTC)), }, }, @@ -109,13 +115,13 @@ func TestUpdater(t *testing.T) { args: args{ currentVersion: "3.0.0", results: []result{ - {Name: "4.0.0"}, - {Name: "3.0.0"}, + {Version: "4.0.0"}, + {Version: "3.0.0"}, }, }, want: &versionInfo{ Version: "4.0.0", - DockerImage: "4.0.0", + DockerImage: "percona/pmm-server:4.0.0", }, }, { @@ -123,14 +129,14 @@ func TestUpdater(t *testing.T) { args: args{ currentVersion: "3.0.0", results: []result{ - {Name: "4.0.0"}, - {Name: "3.0.0"}, - {Name: "4.0.0-rc"}, + {Version: "4.0.0"}, + {Version: "3.0.0"}, + {Version: "4.0.0-rc"}, }, }, want: &versionInfo{ Version: "4.0.0", - DockerImage: "4.0.0", + DockerImage: "percona/pmm-server:4.0.0", }, }, { @@ -138,15 +144,15 @@ func TestUpdater(t *testing.T) { args: args{ currentVersion: "3.3.0", results: []result{ - {Name: "4.1.0"}, - {Name: "4.0.0"}, - {Name: "3.0.0"}, - {Name: "5.1.0"}, + {Version: "4.1.0"}, + {Version: "4.0.0"}, + {Version: "3.0.0"}, + {Version: "5.1.0"}, }, }, want: &versionInfo{ Version: "4.1.0", - DockerImage: "4.1.0", + DockerImage: "percona/pmm-server:4.1.0", }, }, { @@ -154,15 +160,15 @@ func TestUpdater(t *testing.T) { args: args{ currentVersion: "3.0.0", results: []result{ - {Name: "4.1.0"}, - {Name: "4.0.0"}, - {Name: "3.0.0"}, - {Name: "3.1.0"}, + {Version: "4.1.0"}, + {Version: "4.0.0"}, + {Version: "3.0.0"}, + {Version: "3.1.0"}, }, }, want: &versionInfo{ Version: "3.1.0", - DockerImage: "3.1.0", + DockerImage: "percona/pmm-server:3.1.0", }, }, { @@ -170,14 +176,14 @@ func TestUpdater(t *testing.T) { args: args{ currentVersion: "3.0.0", results: []result{ - {Name: "3.0.0"}, - {Name: "3.1.0"}, - {Name: "invalid"}, + {Version: "3.0.0"}, + {Version: "3.1.0"}, + {Version: "invalid"}, }, }, want: &versionInfo{ Version: "3.1.0", - DockerImage: "3.1.0", + DockerImage: "percona/pmm-server:3.1.0", }, }, { @@ -185,8 +191,8 @@ func TestUpdater(t *testing.T) { args: args{ currentVersion: "3.0.0", results: []result{ - {Name: "3.0.0"}, - {Name: "3.1"}, + {Version: "3.0.0"}, + {Version: "3.1"}, }, }, want: &versionInfo{ @@ -199,14 +205,14 @@ func TestUpdater(t *testing.T) { args: args{ currentVersion: "3.0.0", results: []result{ - {Name: "3.0.0"}, - {Name: "3.1.0-rc"}, - {Name: "3.1.0-rc757"}, + {Version: "3.0.0"}, + {Version: "3.1.0-rc"}, + {Version: "3.1.0-rc757"}, }, }, want: &versionInfo{ Version: "3.1.0-rc757", - DockerImage: "3.1.0-rc757", + DockerImage: "percona/pmm-server:3.1.0-rc757", }, }, { @@ -214,15 +220,15 @@ func TestUpdater(t *testing.T) { args: args{ currentVersion: "3.0.0", results: []result{ - {Name: "3.0.0"}, - {Name: "3.1.0"}, - {Name: "3.1.0-rc"}, - {Name: "3.1.0-rc757"}, + {Version: "3.0.0"}, + {Version: "3.1.0"}, + {Version: "3.1.0-rc"}, + {Version: "3.1.0-rc757"}, }, }, want: &versionInfo{ Version: "3.1.0", - DockerImage: "3.1.0", + DockerImage: "percona/pmm-server:3.1.0", }, }, } @@ -233,7 +239,7 @@ func TestUpdater(t *testing.T) { u := NewUpdater(watchtowerURL, gRPCMessageMaxSize) parsed, err := version.Parse(tt.args.currentVersion) require.NoError(t, err) - next := u.next(*parsed, tt.args.results) + _, next := u.next(*parsed, tt.args.results) require.NoError(t, err) assert.Equal(t, tt.want.Version, next.Version.String()) assert.Equal(t, tt.want.DockerImage, next.DockerImage) @@ -245,14 +251,29 @@ func TestUpdater(t *testing.T) { } }) + t.Run("TestSortedVersionList", func(t *testing.T) { + versions := version.DockerVersionsInfo{ + {Version: *version.MustParse("3.0.0")}, + {Version: *version.MustParse("3.1.0")}, + {Version: *version.MustParse("3.0.1")}, + {Version: *version.MustParse("3.0.0-rc")}, + } + + sort.Sort(versions) + assert.Equal(t, "3.0.0-rc", versions[0].Version.String()) + assert.Equal(t, "3.0.0", versions[1].Version.String()) + assert.Equal(t, "3.0.1", versions[2].Version.String()) + assert.Equal(t, "3.1.0", versions[3].Version.String()) + }) + t.Run("TestLatest", func(t *testing.T) { version.Version = "2.41.0" u := NewUpdater(watchtowerURL, gRPCMessageMaxSize) - latest, err := u.latest(context.Background()) + _, latest, err := u.latest(context.Background()) require.NoError(t, err) assert.NotNil(t, latest) assert.True(t, strings.HasPrefix(latest.Version.String(), "2.") || strings.HasPrefix(latest.Version.String(), "3."), - "latest version of PMM 2 should have prefix 2.") + "latest version of PMM should have either a '2.' or '3.' prefix") }) t.Run("TestParseFile", func(t *testing.T) { @@ -265,7 +286,7 @@ func TestUpdater(t *testing.T) { require.NoError(t, err) u := NewUpdater(watchtowerURL, gRPCMessageMaxSize) - latest, err := u.latest(context.Background()) + _, latest, err := u.latest(context.Background()) require.NoError(t, err) assert.Equal(t, "2.41.1", latest.Version.String()) assert.Equal(t, "2.41.1", latest.DockerImage) diff --git a/version/update.go b/version/update.go index 235004df4d..8c1e4967f3 100644 --- a/version/update.go +++ b/version/update.go @@ -40,7 +40,22 @@ type UpdateCheckResult struct { // DockerVersionInfo describes the version of the Docker image. type DockerVersionInfo struct { - Version Parsed `json:"version"` - DockerImage string `json:"docker_image"` - BuildTime time.Time `json:"build_time"` + Version Parsed `json:"version"` + DockerImage string `json:"docker_image"` + BuildTime time.Time `json:"build_time"` + ReleaseNotesURL string `json:"release_notes_url"` + ReleaseNotesText string `json:"release_notes_text"` +} + +// DockerVersionsInfo is a wrapper around a DockerVersionInfo array to implement sorting. +type DockerVersionsInfo []*DockerVersionInfo + +func (d DockerVersionsInfo) Len() int { return len(d) } + +func (d DockerVersionsInfo) Less(i, j int) bool { + return d[i].Version.Less(&d[j].Version) +} + +func (d DockerVersionsInfo) Swap(i, j int) { + d[i], d[j] = d[j], d[i] } From 79a2310beda7ca985d1ac746825e0a5c3db9c44d Mon Sep 17 00:00:00 2001 From: Nurlan Moldomurov Date: Sat, 14 Sep 2024 00:29:23 +0300 Subject: [PATCH 24/35] PMM-13141 enable fcv collector (#3142) * PMM-12848 Enable currentopmetrics collector in mongodb_exporter. * PMM-7 fix golint. * PMM-12848 Add currentopmetrics to scrape config. * PMM-12848 collect currentopmetrics in low resolution. * PMM-12848 Fix tests. * PMM-13141 Enable fcv collector. * PMM-13141 Enable fcv by default. * PMM-13141 fix test --------- Co-authored-by: Alex Demidoff --- managed/services/agents/mongodb.go | 3 +++ managed/services/agents/mongodb_test.go | 2 ++ managed/services/victoriametrics/scrape_configs.go | 10 ++++++++-- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/managed/services/agents/mongodb.go b/managed/services/agents/mongodb.go index a9c39c14f3..919c89dc15 100644 --- a/managed/services/agents/mongodb.go +++ b/managed/services/agents/mongodb.go @@ -110,6 +110,9 @@ func getArgs(exporter *models.Agent, tdp *models.DelimiterPair, listenAddress st if !pmmAgentVersion.Less(v2_42_0) && collectAll { // >= 2.42.0 args = append(args, "--collector.currentopmetrics") } + if !pmmAgentVersion.Less(v2_43_0) { // >= 2.43.0, enable by default + args = append(args, "--collector.fcv") + } if !pmmAgentVersion.Less(v2_43_0) { // >= 2.43.0, enable pbm collector by default args = append(args, "--collector.pbm") } diff --git a/managed/services/agents/mongodb_test.go b/managed/services/agents/mongodb_test.go index 74c9fc4a6e..b33ffd2d13 100644 --- a/managed/services/agents/mongodb_test.go +++ b/managed/services/agents/mongodb_test.go @@ -438,6 +438,7 @@ func TestMongodbExporterConfig2430(t *testing.T) { TemplateRightDelim: "}}", Args: []string{ "--collector.diagnosticdata", + "--collector.fcv", "--collector.pbm", "--collector.replicasetstatus", "--compatible-mode", @@ -472,6 +473,7 @@ func TestMongodbExporterConfig2430(t *testing.T) { "--collector.currentopmetrics", "--collector.dbstats", "--collector.diagnosticdata", + "--collector.fcv", "--collector.indexstats", "--collector.pbm", "--collector.replicasetstatus", diff --git a/managed/services/victoriametrics/scrape_configs.go b/managed/services/victoriametrics/scrape_configs.go index 4106a1fd62..cc12a4f732 100644 --- a/managed/services/victoriametrics/scrape_configs.go +++ b/managed/services/victoriametrics/scrape_configs.go @@ -400,11 +400,13 @@ func scrapeConfigsForMongoDBExporter(params *scrapeConfigParams) ([]*config.Scra } return r, nil } - hr, err := scrapeConfigForStandardExporter("hr", params.metricsResolution.HR, params, []string{ + hrOptions := []string{ "diagnosticdata", "replicasetstatus", "topmetrics", - }) + } + hrOptions = collectors.FilterOutCollectors("", hrOptions, params.agent.DisabledCollectors) + hr, err := scrapeConfigForStandardExporter("hr", params.metricsResolution.HR, params, hrOptions) if err != nil { return nil, err } @@ -425,10 +427,14 @@ func scrapeConfigsForMongoDBExporter(params *scrapeConfigParams) ([]*config.Scra if !params.pmmAgentVersion.Less(version.MustParse("2.42.0-0")) { defaultCollectors = append(defaultCollectors, "currentopmetrics") } + if !params.pmmAgentVersion.Less(version.MustParse("2.43.0-0")) { + defaultCollectors = append(defaultCollectors, "fcv") + } if !params.pmmAgentVersion.Less(version.MustParse("2.43.0-0")) { defaultCollectors = append(defaultCollectors, "pbm") } + defaultCollectors = collectors.FilterOutCollectors("", defaultCollectors, params.agent.DisabledCollectors) lr, err := scrapeConfigForStandardExporter("lr", params.metricsResolution.LR, params, defaultCollectors) if err != nil { return nil, err From 8ad46db529170cfa68774a9384b3f7e95489d699 Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Mon, 16 Sep 2024 12:35:30 +0300 Subject: [PATCH 25/35] PMM-13146 Fix v3 telemetry issues (#3154) * PMM-13146 Fix the collection of server settings * PMM-13146 remove a non-existent field * PMM-13146 update telemetry configuration * PMM-13146 rename the envvar for backups * PMM-13146 fix the error not being used * Update managed/services/telemetry/config.default.yml Co-authored-by: Nurlan Moldomurov * PMM-13146 put back PMMServerHAEnabled metric * PMM-13146 simplify boolean logic when reporting feature toggles * PMM-13146 add a test for a missing metric * Update managed/services/telemetry/config.default.yml Co-authored-by: Michael Okoko <10512379+idoqo@users.noreply.github.com> * Update managed/services/telemetry/config.default.yml Co-authored-by: Nurlan Moldomurov * Update managed/services/telemetry/config.default.yml Co-authored-by: Nurlan Moldomurov --------- Co-authored-by: Nurlan Moldomurov Co-authored-by: Michael Okoko <10512379+idoqo@users.noreply.github.com> --- .../process/v2_to_v3_environment_variables.md | 2 +- managed/services/telemetry/config.default.yml | 58 ++++++++++--------- managed/services/telemetry/transform_test.go | 29 +++++++++- managed/utils/envvars/parser.go | 4 +- 4 files changed, 62 insertions(+), 31 deletions(-) diff --git a/docs/process/v2_to_v3_environment_variables.md b/docs/process/v2_to_v3_environment_variables.md index 7b841c9135..fb0503494e 100644 --- a/docs/process/v2_to_v3_environment_variables.md +++ b/docs/process/v2_to_v3_environment_variables.md @@ -9,7 +9,7 @@ Below is a list of affected variables and their new names. | `DISABLE_UPDATES` | `PMM_ENABLE_UPDATES` | | | `DISABLE_TELEMETRY` | `PMM_ENABLE_TELEMETRY` | | | `PERCONA_PLATFORM_API_TIMEOUT` | `PMM_DEV_PERCONA_PLATFORM_API_TIMEOUT` | | -| `DISABLE_BACKUP_MANAGEMENT` | `PMM_DISABLE_BACKUP_MANAGEMENT` | | +| `DISABLE_BACKUP_MANAGEMENT` | `PMM_ENABLE_BACKUP_MANAGEMENT` | Note the reverted boolean | | `ENABLE_AZUREDISCOVER` | `PMM_ENABLE_AZURE_DISCOVER` | | | `ENABLE_RBAC` | `PMM_ENABLE_ACCESS_CONTROL` | | | `LESS_LOG_NOISE` | | Removed in PMM v3 | diff --git a/managed/services/telemetry/config.default.yml b/managed/services/telemetry/config.default.yml index 13f7bdac7b..2f11dfec59 100644 --- a/managed/services/telemetry/config.default.yml +++ b/managed/services/telemetry/config.default.yml @@ -1,12 +1,12 @@ telemetry: # PMM - generic information - - id: PMMServerIAEnabled + - id: PMMServerAlertingEnabled source: PMMDB_SELECT - query: (CASE WHEN alerting->'disabled' = 'false' THEN '1' ELSE '0' END) AS ia_enabled FROM settings s, jsonb_extract_path(s.settings, 'alerting') AS alerting + query: (CASE WHEN alerting->'enabled' = 'false' THEN '0' ELSE '1' END) AS alerting_enabled FROM settings s, jsonb_extract_path(s.settings, 'alerting') AS alerting summary: "PMM Server Integration Alerting feature enabled/disabled" data: - - metric_name: "pmm_server_ia_enabled" - column: "ia_enabled" + - metric_name: "pmm_server_alerting_enabled" + column: "alerting_enabled" - id: PMMServerAlertsFire source: VM @@ -24,25 +24,17 @@ telemetry: - metric_name: "pmm_server_alert_rules_number" value: 1 - - id: PMMServerSTTEnabled + - id: PMMServerAdvisorsEnabled source: PMMDB_SELECT - query: (CASE WHEN stt->'stt_disabled' = 'false' THEN '1' ELSE '0' END) AS stt_enabled FROM settings s, jsonb_extract_path(s.settings, 'sass') AS stt - summary: "PMM Server Security Thread Tool feature enabled/disabled" + query: (CASE WHEN advisors->'enabled' = 'false' THEN '0' ELSE '1' END) AS advisors_enabled FROM settings s, jsonb_extract_path(s.settings, 'sass') AS advisors + summary: "PMM Advisors Enabled" data: - - metric_name: "pmm_server_stt_enabled" - column: "stt_enabled" - - - id: PMMServerAdvisorsDisabled - source: PMMDB_SELECT - query: (CASE WHEN advisors->'enabled' = 'true' THEN '0' ELSE '1' END) AS advisors_disabled FROM settings s, jsonb_extract_path(s.settings, 'sass') AS advisors - summary: "PMM Advisors Disabled" - data: - - metric_name: "pmm_server_advisors_disabled" - column: "advisors_disabled" + - metric_name: "pmm_server_advisors_enabled" + column: "advisors_enabled" - id: PMMServerBackupManagementEnabled source: PMMDB_SELECT - query: (CASE WHEN backup_management->'disabled' = 'false' THEN '1' ELSE '0' END) AS backup_management_enabled FROM settings s, jsonb_extract_path(s.settings, 'backup_management') AS backup_management + query: (CASE WHEN backup_management->'enabled' = 'false' THEN '0' ELSE '1' END) AS backup_management_enabled FROM settings s, jsonb_extract_path(s.settings, 'backup_management') AS backup_management summary: "PMM Server Backup Management feature enabled" data: - metric_name: "pmm_server_backup_management_enabled" @@ -51,18 +43,26 @@ telemetry: - id: PMMServerAccessControlEnabled source: PMMDB_SELECT query: (CASE WHEN access_control->'enabled' = 'true' THEN '1' ELSE '0' END) AS access_control_enabled FROM settings s, jsonb_extract_path(s.settings, 'access_control') AS access_control - summary: "PMM Server Access Control feature enabled/disabled" + summary: "PMM Server Access Control feature enabled" data: - metric_name: "pmm_server_access_control_enabled" column: "access_control_enabled" - - id: PMMServerUpdatesDisabled + - id: PMMServerUpdatesEnabled + source: PMMDB_SELECT + query: (CASE WHEN updates->'enabled' = 'true' THEN '1' ELSE '0' END) AS updates_enabled FROM settings s, jsonb_extract_path(s.settings, 'updates') AS updates + summary: "PMM Server Check Updates feature enabled" + data: + - metric_name: "pmm_server_updates_enabled" + column: "updates_enabled" + + - id: PMMAzureMonitoringEnabled source: PMMDB_SELECT - query: (CASE WHEN updates->'disabled' = 'true' THEN '1' ELSE '0' END) AS updates_disabled FROM settings s, jsonb_extract_path(s.settings, 'updates') AS updates - summary: "PMM Server Check Updates feature disabled" + query: (CASE WHEN azure->'enabled' = 'true' THEN '1' ELSE '0' END) AS azure_enabled FROM settings s, jsonb_extract_path(s.settings, 'azure') AS azure + summary: "PMM Azure monitoring feature enabled" data: - - metric_name: "pmm_server_updates_disabled" - column: "updates_disabled" + - metric_name: "pmm_server_azure_enabled" + column: "azure_enabled" - id: PMMServerFirstServiceAdded source: PMMDB_SELECT @@ -911,7 +911,6 @@ telemetry: from dumps where created_at BETWEEN NOW() - INTERVAL '24 HOURS' AND NOW() group by status, services_count, timerange, ignore_load, export_qan; - transform: type: JSON metric: pmm_dumps_performed @@ -956,7 +955,14 @@ telemetry: summary: "Use of HA feature" data: - metric_name: "pmm_server_ha_enable" - column: "PERCONA_TEST_HA_ENABLE" + column: "PMM_TEST_HA_ENABLE" + + - id: PMMServerBuiltinDatabaseDisabled + source: ENV_VARS + summary: "Use of external PMM database" + data: + - metric_name: "pmm_server_builtin_postgres_disable" + column: "PMM_DISABLE_BUILTIN_POSTGRES" - id: PMMServerHAUseOfDBs source: ENV_VARS diff --git a/managed/services/telemetry/transform_test.go b/managed/services/telemetry/transform_test.go index 65a59fe6bd..a991333b27 100644 --- a/managed/services/telemetry/transform_test.go +++ b/managed/services/telemetry/transform_test.go @@ -125,10 +125,31 @@ func TestTransformToJSON(t *testing.T) { }, wantErr: assert.NoError, }, + { + name: "test_mysql_plugins_with_an_missing_metric", + args: args{ + config: configJSON().changeData([]ConfigData{ + {MetricName: "1", Label: "library"}, // this metric will be missing in the output + {MetricName: "2", Label: "licence"}, + {MetricName: "3", Label: "name"}, + {MetricName: "4", Label: "status"}, + {MetricName: "5", Label: "type"}, + }), + metrics: []*pmmv1.ServerMetric_Metric{ + {Key: "licence", Value: `GPL`}, + {Key: "name", Value: `INNODB_TABLES`}, + {Key: "status", Value: `ACTIVE`}, + {Key: "type", Value: `INFORMATION SCHEMA`}, + }, + }, + want: []*pmmv1.ServerMetric_Metric{ + {Key: "metric", Value: `{"v":[{"licence":"GPL","name":"INNODB_TABLES","status":"ACTIVE","type":"INFORMATION SCHEMA"}]}`}, + }, + wantErr: assert.NoError, + }, } for _, tt := range tests { - tt := tt t.Run(tt.name, func(t *testing.T) { got, err := transformToJSON(tt.args.config, tt.args.metrics) if !tt.wantErr(t, err) { @@ -220,7 +241,6 @@ func TestTransformExportValues(t *testing.T) { } for _, tt := range tests { - tt := tt t.Run(tt.name, func(t *testing.T) { got, err := transformExportValues(tt.args.config, tt.args.metrics) if !tt.wantErr(t, err) { @@ -273,6 +293,11 @@ func (c *Config) changeDataSource(s DataSourceName) *Config { return c } +func (c *Config) changeData(d []ConfigData) *Config { + c.Data = d + return c +} + func TestRemoveEmpty(t *testing.T) { type args struct { metrics []*pmmv1.ServerMetric_Metric diff --git a/managed/utils/envvars/parser.go b/managed/utils/envvars/parser.go index 6d68a85187..cd3bd4ca69 100644 --- a/managed/utils/envvars/parser.go +++ b/managed/utils/envvars/parser.go @@ -159,7 +159,7 @@ func ParseEnvVars(envs []string) (*models.ChangeSettingsParams, []error, []strin } envSettings.EnableAzurediscover = &b - case "ENABLE_BACKUP_MANAGEMENT": + case "PMM_ENABLE_BACKUP_MANAGEMENT": b, err := strconv.ParseBool(v) if err != nil { errs = append(errs, fmt.Errorf("invalid value %q for environment variable %q", v, k)) @@ -173,7 +173,7 @@ func ParseEnvVars(envs []string) (*models.ChangeSettingsParams, []error, []strin case "PMM_VM_URL": _, err = url.Parse(v) if err != nil { - err = fmt.Errorf("invalid value %q for environment variable %q", v, k) + errs = append(errs, fmt.Errorf("invalid value %q for environment variable %q", v, k)) } case "PMM_INSTALL_METHOD", "PMM_DISTRIBUTION_METHOD": From a0683941630bc4ca27a084f637e712adef80eed2 Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Wed, 18 Sep 2024 09:56:28 +0300 Subject: [PATCH 26/35] PMM-13285 Short agent status in pmm-admin list output (#3123) --- admin/commands/list.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/admin/commands/list.go b/admin/commands/list.go index 193bebd3d7..e274d17da7 100644 --- a/admin/commands/list.go +++ b/admin/commands/list.go @@ -61,7 +61,7 @@ func (a listResultAgent) HumanReadableAgentType() string { } func (a listResultAgent) NiceAgentStatus() string { - res := a.Status + res, _ := strings.CutPrefix(a.Status, "AGENT_STATUS_") if res == "" { res = "unknown" //nolint:goconst } From 6d2825b7c4b1e833af99c0b0f19cfe8884b01002 Mon Sep 17 00:00:00 2001 From: Nurlan Moldomurov Date: Wed, 18 Sep 2024 11:48:47 +0300 Subject: [PATCH 27/35] PMM-7 fix SSH key test. (#3203) --- api-tests/Makefile | 3 +++ api-tests/server/settings_test.go | 6 +++--- managed/services/server/server.go | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/api-tests/Makefile b/api-tests/Makefile index 85af0f3609..4cbd6a120c 100644 --- a/api-tests/Makefile +++ b/api-tests/Makefile @@ -15,6 +15,9 @@ run: go test -count=1 -p 1 -v ./... 2>&1 | tee pmm-api-tests-output.txt cat pmm-api-tests-output.txt | bin/go-junit-report > pmm-api-tests-junit-report.xml +run-dev: + go test -count=1 -p 1 -v ./... + run-race: go test -count=1 -p 1 -v -race ./... 2>&1 | tee pmm-api-tests-output.txt cat pmm-api-tests-output.txt | bin/go-junit-report > pmm-api-tests-junit-report.xml diff --git a/api-tests/server/settings_test.go b/api-tests/server/settings_test.go index cae52f07ac..be972eee17 100644 --- a/api-tests/server/settings_test.go +++ b/api-tests/server/settings_test.go @@ -521,7 +521,7 @@ func TestSettings(t *testing.T) { assert.Empty(t, res) }) - t.Run("ChangeSSHKey", func(t *testing.T) { + t.Run("ChangeSSHKey only on AMI and OVF", func(t *testing.T) { defer restoreSettingsDefaults(t) sshKey := "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClY/8sz3w03vA2bY6mBFgUzrvb2FIoHw8ZjUXGGClJzJg5HC" + @@ -535,8 +535,8 @@ func TestSettings(t *testing.T) { }, Context: pmmapitests.Context, }) - require.NoError(t, err) - assert.Equal(t, sshKey, res.Payload.Settings.SSHKey) + pmmapitests.AssertAPIErrorf(t, err, 500, codes.Internal, `SSH key can be set only on AMI and OVF distributions`) + assert.Empty(t, res) }) t.Run("OK", func(t *testing.T) { diff --git a/managed/services/server/server.go b/managed/services/server/server.go index 2a2a358308..9573164b66 100644 --- a/managed/services/server/server.go +++ b/managed/services/server/server.go @@ -600,7 +600,8 @@ func (s *Server) ChangeSettings(ctx context.Context, req *serverv1.ChangeSetting // absent value means "do not change" if req.SshKey != nil { if err = s.writeSSHKey(pointer.GetString(req.SshKey)); err != nil { - return errors.WithStack(err) + s.l.Error(errors.WithStack(err)) + return status.Errorf(codes.Internal, err.Error()) } } From 7e516593563bb6b011f0fcdc8e196d62bbde7cf7 Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Wed, 18 Sep 2024 12:39:26 +0000 Subject: [PATCH 28/35] Merge branch 'main' into v3 --- agent/agents/process/process.go | 2 +- agent/agents/process/process_test.go | 6 +- .../agent_local_service/status2_responses.go | 10 +- .../agent_local_service/status_responses.go | 10 +- api/agentlocal/v1/json/v1.json | 8 +- api/descriptor.bin | Bin 705189 -> 705738 bytes api/inventory/v1/agent_status.pb.go | 83 +++--- api/inventory/v1/agent_status.proto | 12 +- .../agents_service/add_agent_responses.go | 96 +++++-- .../agents_service/change_agent_responses.go | 96 +++++-- .../agents_service/get_agent_responses.go | 130 ++++----- .../agents_service/list_agents_responses.go | 130 ++++----- api/inventory/v1/json/v1.json | 200 +++++++------- .../add_service_responses.go | 112 ++++++-- api/management/v1/json/v1.json | 42 ++- api/swagger/swagger-dev.json | 256 +++++++++--------- api/swagger/swagger.json | 256 +++++++++--------- descriptor.bin | Bin 811632 -> 0 bytes 18 files changed, 811 insertions(+), 638 deletions(-) delete mode 100644 descriptor.bin diff --git a/agent/agents/process/process.go b/agent/agents/process/process.go index 937db66658..3e701c55d6 100644 --- a/agent/agents/process/process.go +++ b/agent/agents/process/process.go @@ -210,7 +210,7 @@ func (p *Process) toWaiting() { // FAILING -> DONE. func (p *Process) toFailing(err error) { p.l.Tracef("Process: failing") - p.changes <- inventorypb.AgentStatus_INITIALIZATION_ERROR + p.changes <- inventoryv1.AgentStatus_AGENT_STATUS_INITIALIZATION_ERROR p.l.Infof("Process: exited: %s.", p.cmd.ProcessState) go p.toDone() p.err = err diff --git a/agent/agents/process/process_test.go b/agent/agents/process/process_test.go index d1cea27b3b..6163565986 100644 --- a/agent/agents/process/process_test.go +++ b/agent/agents/process/process_test.go @@ -85,7 +85,7 @@ func TestProcess(t *testing.T) { go p.Run(ctx) assertStates(t, p, inventoryv1.AgentStatus_AGENT_STATUS_STARTING, inventoryv1.AgentStatus_AGENT_STATUS_INITIALIZATION_ERROR, - inventoryv1.AgentStatus_AGENT_STATUS_DONE, inventoryv1.AgentStatus_AGENT_STATUS_INVALID) + inventoryv1.AgentStatus_AGENT_STATUS_DONE, inventoryv1.AgentStatus_AGENT_STATUS_UNSPECIFIED) }) t.Run("ExitedEarly", func(t *testing.T) { @@ -94,8 +94,8 @@ func TestProcess(t *testing.T) { p := New(&Params{Path: "sleep", Args: []string{sleep}}, nil, l) go p.Run(ctx) - assertStates(t, p, inventoryv1.AgentStatus_STARTING, inventoryv1.AgentStatus_INITIALIZATION_ERROR, - inventoryv1.AgentStatus_DONE, inventoryv1.AgentStatus_AGENT_STATUS_INVALID) + assertStates(t, p, inventoryv1.AgentStatus_AGENT_STATUS_STARTING, inventoryv1.AgentStatus_AGENT_STATUS_INITIALIZATION_ERROR, + inventoryv1.AgentStatus_AGENT_STATUS_DONE, inventoryv1.AgentStatus_AGENT_STATUS_UNSPECIFIED) }) t.Run("Exited", func(t *testing.T) { diff --git a/api/agentlocal/v1/json/client/agent_local_service/status2_responses.go b/api/agentlocal/v1/json/client/agent_local_service/status2_responses.go index 96858ab675..f913007749 100644 --- a/api/agentlocal/v1/json/client/agent_local_service/status2_responses.go +++ b/api/agentlocal/v1/json/client/agent_local_service/status2_responses.go @@ -437,13 +437,13 @@ type Status2OKBodyAgentsInfoItems0 struct { // AgentStatus represents actual Agent status. // // - AGENT_STATUS_STARTING: Agent is starting. - // - INITIALIZATION_ERROR: Agent encountered error when starting. + // - AGENT_STATUS_INITIALIZATION_ERROR: Agent encountered error when starting. // - AGENT_STATUS_RUNNING: Agent is running. // - AGENT_STATUS_WAITING: Agent encountered error and will be restarted automatically soon. // - AGENT_STATUS_STOPPING: Agent is stopping. // - AGENT_STATUS_DONE: Agent finished. // - AGENT_STATUS_UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_UNSPECIFIED AGENT_STATUS_STARTING INITIALIZATION_ERROR AGENT_STATUS_RUNNING AGENT_STATUS_WAITING AGENT_STATUS_STOPPING AGENT_STATUS_DONE AGENT_STATUS_UNKNOWN] + // Enum: [AGENT_STATUS_UNSPECIFIED AGENT_STATUS_STARTING AGENT_STATUS_INITIALIZATION_ERROR AGENT_STATUS_RUNNING AGENT_STATUS_WAITING AGENT_STATUS_STOPPING AGENT_STATUS_DONE AGENT_STATUS_UNKNOWN] Status *string `json:"status,omitempty"` // The current listen port of this Agent (exporter or vmagent). @@ -560,7 +560,7 @@ var status2OkBodyAgentsInfoItems0TypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","AGENT_STATUS_INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -576,8 +576,8 @@ const ( // Status2OKBodyAgentsInfoItems0StatusAGENTSTATUSSTARTING captures enum value "AGENT_STATUS_STARTING" Status2OKBodyAgentsInfoItems0StatusAGENTSTATUSSTARTING string = "AGENT_STATUS_STARTING" - // Status2OKBodyAgentsInfoItems0StatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" - Status2OKBodyAgentsInfoItems0StatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // Status2OKBodyAgentsInfoItems0StatusAGENTSTATUSINITIALIZATIONERROR captures enum value "AGENT_STATUS_INITIALIZATION_ERROR" + Status2OKBodyAgentsInfoItems0StatusAGENTSTATUSINITIALIZATIONERROR string = "AGENT_STATUS_INITIALIZATION_ERROR" // Status2OKBodyAgentsInfoItems0StatusAGENTSTATUSRUNNING captures enum value "AGENT_STATUS_RUNNING" Status2OKBodyAgentsInfoItems0StatusAGENTSTATUSRUNNING string = "AGENT_STATUS_RUNNING" diff --git a/api/agentlocal/v1/json/client/agent_local_service/status_responses.go b/api/agentlocal/v1/json/client/agent_local_service/status_responses.go index feea703b57..d78bbc428d 100644 --- a/api/agentlocal/v1/json/client/agent_local_service/status_responses.go +++ b/api/agentlocal/v1/json/client/agent_local_service/status_responses.go @@ -474,13 +474,13 @@ type StatusOKBodyAgentsInfoItems0 struct { // AgentStatus represents actual Agent status. // // - AGENT_STATUS_STARTING: Agent is starting. - // - INITIALIZATION_ERROR: Agent encountered error when starting. + // - AGENT_STATUS_INITIALIZATION_ERROR: Agent encountered error when starting. // - AGENT_STATUS_RUNNING: Agent is running. // - AGENT_STATUS_WAITING: Agent encountered error and will be restarted automatically soon. // - AGENT_STATUS_STOPPING: Agent is stopping. // - AGENT_STATUS_DONE: Agent finished. // - AGENT_STATUS_UNKNOWN: Agent is not connected, we don't know anything about it's state. - // Enum: [AGENT_STATUS_UNSPECIFIED AGENT_STATUS_STARTING INITIALIZATION_ERROR AGENT_STATUS_RUNNING AGENT_STATUS_WAITING AGENT_STATUS_STOPPING AGENT_STATUS_DONE AGENT_STATUS_UNKNOWN] + // Enum: [AGENT_STATUS_UNSPECIFIED AGENT_STATUS_STARTING AGENT_STATUS_INITIALIZATION_ERROR AGENT_STATUS_RUNNING AGENT_STATUS_WAITING AGENT_STATUS_STOPPING AGENT_STATUS_DONE AGENT_STATUS_UNKNOWN] Status *string `json:"status,omitempty"` // The current listen port of this Agent (exporter or vmagent). @@ -597,7 +597,7 @@ var statusOkBodyAgentsInfoItems0TypeStatusPropEnum []interface{} func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","AGENT_STATUS_INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -613,8 +613,8 @@ const ( // StatusOKBodyAgentsInfoItems0StatusAGENTSTATUSSTARTING captures enum value "AGENT_STATUS_STARTING" StatusOKBodyAgentsInfoItems0StatusAGENTSTATUSSTARTING string = "AGENT_STATUS_STARTING" - // StatusOKBodyAgentsInfoItems0StatusINITIALIZATIONERROR captures enum value "INITIALIZATION_ERROR" - StatusOKBodyAgentsInfoItems0StatusINITIALIZATIONERROR string = "INITIALIZATION_ERROR" + // StatusOKBodyAgentsInfoItems0StatusAGENTSTATUSINITIALIZATIONERROR captures enum value "AGENT_STATUS_INITIALIZATION_ERROR" + StatusOKBodyAgentsInfoItems0StatusAGENTSTATUSINITIALIZATIONERROR string = "AGENT_STATUS_INITIALIZATION_ERROR" // StatusOKBodyAgentsInfoItems0StatusAGENTSTATUSRUNNING captures enum value "AGENT_STATUS_RUNNING" StatusOKBodyAgentsInfoItems0StatusAGENTSTATUSRUNNING string = "AGENT_STATUS_RUNNING" diff --git a/api/agentlocal/v1/json/v1.json b/api/agentlocal/v1/json/v1.json index 542f1845a6..b67762d07b 100644 --- a/api/agentlocal/v1/json/v1.json +++ b/api/agentlocal/v1/json/v1.json @@ -149,13 +149,13 @@ "x-order": 4 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - AGENT_STATUS_STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - AGENT_STATUS_RUNNING: Agent is running.\n - AGENT_STATUS_WAITING: Agent encountered error and will be restarted automatically soon.\n - AGENT_STATUS_STOPPING: Agent is stopping.\n - AGENT_STATUS_DONE: Agent finished.\n - AGENT_STATUS_UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - AGENT_STATUS_STARTING: Agent is starting.\n - AGENT_STATUS_INITIALIZATION_ERROR: Agent encountered error when starting.\n - AGENT_STATUS_RUNNING: Agent is running.\n - AGENT_STATUS_WAITING: Agent encountered error and will be restarted automatically soon.\n - AGENT_STATUS_STOPPING: Agent is stopping.\n - AGENT_STATUS_DONE: Agent finished.\n - AGENT_STATUS_UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_UNSPECIFIED", "enum": [ "AGENT_STATUS_UNSPECIFIED", "AGENT_STATUS_STARTING", - "INITIALIZATION_ERROR", + "AGENT_STATUS_INITIALIZATION_ERROR", "AGENT_STATUS_RUNNING", "AGENT_STATUS_WAITING", "AGENT_STATUS_STOPPING", @@ -344,13 +344,13 @@ "x-order": 4 }, "status": { - "description": "AgentStatus represents actual Agent status.\n\n - AGENT_STATUS_STARTING: Agent is starting.\n - INITIALIZATION_ERROR: Agent encountered error when starting.\n - AGENT_STATUS_RUNNING: Agent is running.\n - AGENT_STATUS_WAITING: Agent encountered error and will be restarted automatically soon.\n - AGENT_STATUS_STOPPING: Agent is stopping.\n - AGENT_STATUS_DONE: Agent finished.\n - AGENT_STATUS_UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "description": "AgentStatus represents actual Agent status.\n\n - AGENT_STATUS_STARTING: Agent is starting.\n - AGENT_STATUS_INITIALIZATION_ERROR: Agent encountered error when starting.\n - AGENT_STATUS_RUNNING: Agent is running.\n - AGENT_STATUS_WAITING: Agent encountered error and will be restarted automatically soon.\n - AGENT_STATUS_STOPPING: Agent is stopping.\n - AGENT_STATUS_DONE: Agent finished.\n - AGENT_STATUS_UNKNOWN: Agent is not connected, we don't know anything about it's state.", "type": "string", "default": "AGENT_STATUS_UNSPECIFIED", "enum": [ "AGENT_STATUS_UNSPECIFIED", "AGENT_STATUS_STARTING", - "INITIALIZATION_ERROR", + "AGENT_STATUS_INITIALIZATION_ERROR", "AGENT_STATUS_RUNNING", "AGENT_STATUS_WAITING", "AGENT_STATUS_STOPPING", diff --git a/api/descriptor.bin b/api/descriptor.bin index 140f0af2728968e990965d413afe506aa707bb19..2b5e4a8770aa51df00da06e705c2165d7059bbe7 100644 GIT binary patch delta 8573 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 z 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%0DrEFP7A?uPKJN`XLqC^fF3}>|2Y~Mv0e+ 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 z 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 FKX}Z>|!$JRo2bT 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 Date: Wed, 18 Sep 2024 12:53:02 +0000 Subject: [PATCH 29/35] PMM-7 fix supervisor_test after merging --- agent/agents/supervisor/supervisor_test.go | 5 ++--- api/buf.yaml | 8 ++++---- managed/services/agents/mongodb_test.go | 4 ++-- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/agent/agents/supervisor/supervisor_test.go b/agent/agents/supervisor/supervisor_test.go index 9e85b92585..7d35888db6 100644 --- a/agent/agents/supervisor/supervisor_test.go +++ b/agent/agents/supervisor/supervisor_test.go @@ -77,7 +77,7 @@ func TestSupervisor(t *testing.T) { &agentv1.StateChangedRequest{AgentId: "sleep1", Status: inventoryv1.AgentStatus_AGENT_STATUS_RUNNING, ListenPort: 65000, ProcessExecPath: "sleep"}) expectedList = []*agentlocal.AgentInfo{ {AgentType: type_TEST_NOOP, AgentId: "noop3", Status: inventoryv1.AgentStatus_AGENT_STATUS_STARTING}, - {AgentType: type_TEST_SLEEP, AgentId: "sleep1", Status: inventoryv1.AgentStatus_AGENT_STATUS_STARTING, ListenPort: 65000, ProcessExecPath: "sleep"}, + {AgentType: type_TEST_SLEEP, AgentId: "sleep1", Status: inventoryv1.AgentStatus_AGENT_STATUS_RUNNING, ListenPort: 65000, ProcessExecPath: "sleep"}, } assert.Equal(t, expectedList, s.AgentsList()) @@ -116,8 +116,7 @@ func TestSupervisor(t *testing.T) { &agentv1.StateChangedRequest{AgentId: "sleep1", Status: inventoryv1.AgentStatus_AGENT_STATUS_STARTING, ListenPort: 65000, ProcessExecPath: "sleep"}, &agentv1.StateChangedRequest{AgentId: "sleep1", Status: inventoryv1.AgentStatus_AGENT_STATUS_RUNNING, ListenPort: 65000, ProcessExecPath: "sleep"}, &agentv1.StateChangedRequest{AgentId: "sleep2", Status: inventoryv1.AgentStatus_AGENT_STATUS_STARTING, ListenPort: 65001, ProcessExecPath: "sleep"}, - &agentv1.StateChangedRequest{AgentId: "sleep2", Status: inventoryv1.AgentStatus_AGENT_STATUS_RUNNING, ListenPort: 65001, ProcessExecPath: "sleep"}, - ) + &agentv1.StateChangedRequest{AgentId: "sleep2", Status: inventoryv1.AgentStatus_AGENT_STATUS_RUNNING, ListenPort: 65001, ProcessExecPath: "sleep"}) expectedList = []*agentlocal.AgentInfo{ {AgentType: type_TEST_NOOP, AgentId: "noop3", Status: inventoryv1.AgentStatus_AGENT_STATUS_RUNNING}, {AgentType: type_TEST_SLEEP, AgentId: "sleep1", Status: inventoryv1.AgentStatus_AGENT_STATUS_RUNNING, ListenPort: 65000, ProcessExecPath: "sleep"}, diff --git a/api/buf.yaml b/api/buf.yaml index b130c4ee02..7bca40f52a 100644 --- a/api/buf.yaml +++ b/api/buf.yaml @@ -13,12 +13,12 @@ lint: - PACKAGE_NO_IMPORT_CYCLE ignore_only: PACKAGE_VERSION_SUFFIX: - - api/common/common.proto - - api/common/metrics_resolutions.proto + - common/common.proto + - common/metrics_resolutions.proto RPC_REQUEST_STANDARD_NAME: - - api/agent/v1/agent.proto + - agent/v1/agent.proto RPC_RESPONSE_STANDARD_NAME: - - api/agent/v1/agent.proto + - agent/v1/agent.proto disallow_comment_ignores: true breaking: use: diff --git a/managed/services/agents/mongodb_test.go b/managed/services/agents/mongodb_test.go index 4e1bbc1fe2..c0357e7464 100644 --- a/managed/services/agents/mongodb_test.go +++ b/managed/services/agents/mongodb_test.go @@ -433,8 +433,8 @@ func TestMongodbExporterConfig2430(t *testing.T) { AgentPassword: pointer.ToString("agent-password"), } actual, err := mongodbExporterConfig(node, mongodb, exporter, redactSecrets, pmmAgentVersion) - expected := &agentpb.SetStateRequest_AgentProcess{ - Type: inventorypb.AgentType_MONGODB_EXPORTER, + expected := &agentv1.SetStateRequest_AgentProcess{ + Type: inventoryv1.AgentType_AGENT_TYPE_MONGODB_EXPORTER, TemplateLeftDelim: "{{", TemplateRightDelim: "}}", Args: []string{ From 9dcabbd904de1245e0725ca19d354f6085c74030 Mon Sep 17 00:00:00 2001 From: Matej Kubinec <32638572+matejkubinec@users.noreply.github.com> Date: Thu, 19 Sep 2024 09:48:33 +0200 Subject: [PATCH 30/35] PMM-13235 Grafana 11 (#3075) * PMM-13235 Update grafana spec file to 11.1 * PMM-13235 Update spec and contributing grafana repo url * PMM-13235 Bump grafana version to 11.1.4 * PMM-13235 Bump grafana version to 11.1.5 * PMM-13235 Add commit hash --- build/packages/rpm/server/SPECS/grafana.spec | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/build/packages/rpm/server/SPECS/grafana.spec b/build/packages/rpm/server/SPECS/grafana.spec index 71ea12301d..a90b2f40ac 100644 --- a/build/packages/rpm/server/SPECS/grafana.spec +++ b/build/packages/rpm/server/SPECS/grafana.spec @@ -1,9 +1,9 @@ %global debug_package %{nil} -%global commit f2a6d70344f94674f731e6e9b031a6f147de46cc +%global commit 7dd51483f34ce324e603160f415395fce0bc55a1 %global shortcommit %(c=%{commit}; echo ${c:0:7}) %define build_timestamp %(date -u +"%y%m%d%H%M") -%define release 105 -%define grafana_version 10.4.2 +%define release 106 +%define grafana_version 11.1.5 %define full_pmm_version 2.0.0 %define full_version v%{grafana_version}-%{full_pmm_version} %define rpm_release %{release}.%{build_timestamp}.%{shortcommit}%{?dist} @@ -17,8 +17,8 @@ Version: %{grafana_version} Release: %{rpm_release} Summary: Grafana is an open source, feature rich metrics dashboard and graph editor License: AGPLv3 -URL: https://github.com/percona-platform/grafana -Source0: https://github.com/percona-platform/grafana/archive/%{commit}.tar.gz +URL: https://github.com/percona/grafana +Source0: https://github.com/percona/grafana/archive/%{commit}.tar.gz ExclusiveArch: %{ix86} x86_64 %{arm} BuildRequires: fontconfig @@ -82,6 +82,15 @@ getent passwd pmm >/dev/null || echo "User pmm does not exist. Please create it exit 0 %changelog +* Fri Sep 06 2024 Matej Kubinec - 11.1.5-1 +- PMM-13235 Grafana 11.1.5 + +* Thu Aug 15 2024 Matej Kubinec - 11.1.4-1 +- PMM-13235 Grafana 11.1.4 + +* Wed Jul 17 2024 Matej Kubinec - 11.1.0-1 +- PMM-13235 Grafana 11.1.0 + * Tue Apr 16 2024 Matej Kubinec - 10.4.2-1 - PMM-13059 Grafana 10.4.2 From af602ceb626477ba00a9aef662e57be2911219e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 10:16:52 +0000 Subject: [PATCH 31/35] Bump typescript from 5.5.2 to 5.6.2 in /cli-tests (#3197) Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.5.2 to 5.6.2. - [Release notes](https://github.com/microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml) - [Commits](https://github.com/microsoft/TypeScript/compare/v5.5.2...v5.6.2) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- cli-tests/package-lock.json | 8 ++++---- cli-tests/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cli-tests/package-lock.json b/cli-tests/package-lock.json index 7b791008fb..2a3b93fde7 100644 --- a/cli-tests/package-lock.json +++ b/cli-tests/package-lock.json @@ -15,7 +15,7 @@ "playwright": "^1.41.2", "promise-retry": "^2.0.1", "shelljs": "^0.8.5", - "typescript": "^5.5.2" + "typescript": "^5.6.2" }, "devDependencies": { "@types/promise-retry": "^1.1.3", @@ -3318,9 +3318,9 @@ } }, "node_modules/typescript": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", - "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/cli-tests/package.json b/cli-tests/package.json index 527d9d1d75..28af8ab9c9 100644 --- a/cli-tests/package.json +++ b/cli-tests/package.json @@ -19,7 +19,7 @@ "playwright": "^1.41.2", "promise-retry": "^2.0.1", "shelljs": "^0.8.5", - "typescript": "^5.5.2" + "typescript": "^5.6.2" }, "devDependencies": { "@types/promise-retry": "^1.1.3", From 74c91d6866fcfad306cd3612205a2c6f46d26aae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 11:58:58 +0000 Subject: [PATCH 32/35] Bump github.com/vektra/mockery/v2 from 2.45.0 to 2.46.0 in /tools (#3206) Bumps [github.com/vektra/mockery/v2](https://github.com/vektra/mockery) from 2.45.0 to 2.46.0. - [Release notes](https://github.com/vektra/mockery/releases) - [Changelog](https://github.com/vektra/mockery/blob/master/docs/changelog.md) - [Commits](https://github.com/vektra/mockery/compare/v2.45.0...v2.46.0) --- updated-dependencies: - dependency-name: github.com/vektra/mockery/v2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tools/go.mod | 2 +- tools/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/go.mod b/tools/go.mod index bfa9350bf8..1e9870d0ce 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -22,7 +22,7 @@ require ( github.com/quasilyte/go-consistent v0.6.0 github.com/reviewdog/reviewdog v0.20.1 github.com/vburenin/ifacemaker v1.2.1 - github.com/vektra/mockery/v2 v2.45.0 + github.com/vektra/mockery/v2 v2.46.0 golang.org/x/perf v0.0.0-20230717203022-1ba3a21238c9 golang.org/x/tools v0.24.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 diff --git a/tools/go.sum b/tools/go.sum index 20fe5baa8e..06be7c2d10 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -727,8 +727,8 @@ github.com/vbatts/tar-split v0.11.5 h1:3bHCTIheBm1qFTcgh9oPu+nNBtX+XJIupG/vacinC github.com/vbatts/tar-split v0.11.5/go.mod h1:yZbwRsSeGjusneWgA781EKej9HF8vme8okylkAeNKLk= github.com/vburenin/ifacemaker v1.2.1 h1:3Vq8B/bfBgjWTkv+jDg4dVL1KHt3k1K4lO7XRxYA2sk= github.com/vburenin/ifacemaker v1.2.1/go.mod h1:5WqrzX2aD7/hi+okBjcaEQJMg4lDGrpuEX3B8L4Wgrs= -github.com/vektra/mockery/v2 v2.45.0 h1:TDKO9y0CPv+/gm7KVBOJfzMcBeK7Y044jvaNdgBBVik= -github.com/vektra/mockery/v2 v2.45.0/go.mod h1:XNTE9RIu3deGAGQRVjP1VZxGpQNm0YedZx4oDs3prr8= +github.com/vektra/mockery/v2 v2.46.0 h1:DKIFj6hAPGwmOYiWfWzdsQtBgU8ozPXo3Bwbmf+Ku80= +github.com/vektra/mockery/v2 v2.46.0/go.mod h1:XNTE9RIu3deGAGQRVjP1VZxGpQNm0YedZx4oDs3prr8= github.com/xanzy/go-gitlab v0.106.0 h1:EDfD03K74cIlQo2EducfiupVrip+Oj02bq9ofw5F8sA= github.com/xanzy/go-gitlab v0.106.0/go.mod h1:ETg8tcj4OhrB84UEgeE8dSuV/0h4BBL1uOV/qK0vlyI= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= From 0734b9297d38341bc5240c78cda82debe3f5508e Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Thu, 19 Sep 2024 20:47:36 +0300 Subject: [PATCH 33/35] PMM-13282 Migrate pmm-dump to v3 (#3143) * PMM-13282 Migrate pmm-dump to v3 * PMM-13282 align pmm-dump version with PMM Server * PMM-13282 fix the author name ) * PMM-13282 fix pmm-url parameter for pmm-dump to connect to --- build/packages/rpm/server/SPECS/pmm-dump.spec | 7 +++++-- managed/services/dump/dump.go | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/build/packages/rpm/server/SPECS/pmm-dump.spec b/build/packages/rpm/server/SPECS/pmm-dump.spec index c8882aa25b..9a5e04cf14 100644 --- a/build/packages/rpm/server/SPECS/pmm-dump.spec +++ b/build/packages/rpm/server/SPECS/pmm-dump.spec @@ -2,14 +2,14 @@ %global repo pmm-dump %global provider github.com/percona/%{repo} -%global commit 0d49b27729506dc62950f9fa59147d63df194db2 +%global commit f226dbb3afb62ac4b9b39032935b5694a48d526f %global shortcommit %(c=%{commit}; echo ${c:0:7}) %define build_timestamp %(date -u +"%y%m%d%H%M") %define release 1 %define rpm_release %{release}.%{build_timestamp}.%{shortcommit}%{?dist} Name: pmm-dump -Version: 0.7.0 +Version: 3.0.0 Release: %{rpm_release} Summary: Percona PMM Dump allows to export and import monitoring metrics and query analytics. @@ -37,6 +37,9 @@ install -p -m 0755 pmm-dump %{buildroot}%{_sbindir}/pmm-dump %changelog +* Thu Aug 8 2024 Alex Demidoff - 3.0.0-1 +- PMM-13282 Migrate pmm-dump to v3 API + * Tue Nov 23 2023 Artem Gavrilov - 0.7.0-ga - PMM-12460 Update pmm-dump to v0.7.0-ga version diff --git a/managed/services/dump/dump.go b/managed/services/dump/dump.go index 8b2baf8978..8a0d97a961 100644 --- a/managed/services/dump/dump.go +++ b/managed/services/dump/dump.go @@ -108,7 +108,7 @@ func (s *Service) StartDump(params *Params) (string, error) { pmmDumpCmd := exec.CommandContext(ctx, //nolint:gosec pmmDumpBin, "export", - "--pmm-url=http://127.0.0.1", + "--pmm-url=http://127.0.0.1:8080", fmt.Sprintf("--dump-path=%s", getDumpFilePath(dump.ID))) if params.APIKey != "" { From 8e02b30ebc1aa2f9c553c94b2f8390516dc99bb5 Mon Sep 17 00:00:00 2001 From: Nurlan Moldomurov Date: Fri, 20 Sep 2024 15:14:55 +0300 Subject: [PATCH 34/35] PMM-13384 enable percona telemetry repo (#3208) --- update/ansible/playbook/tasks/update.yml | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/update/ansible/playbook/tasks/update.yml b/update/ansible/playbook/tasks/update.yml index be8f18e4bb..68147d0430 100644 --- a/update/ansible/playbook/tasks/update.yml +++ b/update/ansible/playbook/tasks/update.yml @@ -10,6 +10,9 @@ vars: pmm_packages: + - percona-dashboards + - percona-grafana + - percona-release - percona-victoriametrics - percona-qan-api2 - percona-alertmanager @@ -94,25 +97,12 @@ state: absent register: experimental_repo_existed - - name: Update percona-dashboards package - yum: - name: - - percona-dashboards - - percona-grafana - state: latest - - - name: Cleanup yum metadata - command: yum clean metadata - register: yum_clean_result - changed_when: "'Cleaning repos' in yum_clean_result.stdout" - when: experimental_repo_existed.changed - tags: - - skip_ansible_lint # '503 Tasks that run when changed should likely be handlers'. - # The handler looks bad in this case + - name: Enable percona telemetry repo + command: percona-release enable telemetry release + when: not ansible_check_mode - # TODO: join with the command above - name: Cleanup yum metadata - command: yum clean metadata + command: yum clean all become: true tags: - skip_ansible_lint From 330f78a9b4a3f8e2365d78ec01bebda8ca34f916 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:53:49 +0200 Subject: [PATCH 35/35] Bump github.com/bufbuild/buf from 1.39.0 to 1.42.0 in /tools (#3205) * Bump github.com/bufbuild/buf from 1.39.0 to 1.42.0 in /tools Bumps [github.com/bufbuild/buf](https://github.com/bufbuild/buf) from 1.39.0 to 1.42.0. - [Release notes](https://github.com/bufbuild/buf/releases) - [Changelog](https://github.com/bufbuild/buf/blob/main/CHANGELOG.md) - [Commits](https://github.com/bufbuild/buf/compare/v1.39.0...v1.42.0) --- updated-dependencies: - dependency-name: github.com/bufbuild/buf dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * chore: pin go version * chore: re-generate code --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alex Demidoff --- api/agentlocalpb/agentlocal.pb.go | 2 +- api/agentpb/agent.pb.go | 2 +- api/agentpb/collector.pb.go | 2 +- api/common/metrics_resolutions.pb.go | 2 +- api/inventorypb/agent_status.pb.go | 2 +- api/inventorypb/agents.pb.go | 2 +- api/inventorypb/log_level.pb.go | 2 +- api/inventorypb/nodes.pb.go | 2 +- api/inventorypb/services.pb.go | 2 +- api/managementpb/actions.pb.go | 2 +- api/managementpb/agent/agent.pb.go | 2 +- api/managementpb/alerting/alerting.pb.go | 2 +- api/managementpb/alerting/params.pb.go | 2 +- api/managementpb/annotation.pb.go | 2 +- api/managementpb/azure/azure.pb.go | 2 +- api/managementpb/backup/artifacts.pb.go | 2 +- api/managementpb/backup/backups.pb.go | 2 +- api/managementpb/backup/common.pb.go | 2 +- api/managementpb/backup/errors.pb.go | 2 +- api/managementpb/backup/locations.pb.go | 2 +- api/managementpb/backup/restores.pb.go | 2 +- api/managementpb/boolean_flag.pb.go | 2 +- api/managementpb/checks.pb.go | 2 +- api/managementpb/dbaas/components.pb.go | 2 +- api/managementpb/dbaas/db_clusters.pb.go | 2 +- api/managementpb/dbaas/dbaas.pb.go | 2 +- api/managementpb/dbaas/kubernetes.pb.go | 2 +- api/managementpb/dbaas/logs.pb.go | 2 +- api/managementpb/dbaas/psmdb_clusters.pb.go | 2 +- api/managementpb/dbaas/pxc_clusters.pb.go | 2 +- api/managementpb/dbaas/templates.pb.go | 2 +- api/managementpb/dump/dump.pb.go | 2 +- api/managementpb/external.pb.go | 2 +- api/managementpb/haproxy.pb.go | 2 +- api/managementpb/ia/alerts.pb.go | 2 +- api/managementpb/ia/channels.pb.go | 2 +- api/managementpb/ia/rules.pb.go | 2 +- api/managementpb/ia/status.pb.go | 2 +- api/managementpb/metrics.pb.go | 2 +- api/managementpb/mongodb.pb.go | 2 +- api/managementpb/mysql.pb.go | 2 +- api/managementpb/node.pb.go | 2 +- api/managementpb/node/node.pb.go | 2 +- api/managementpb/pagination.pb.go | 2 +- api/managementpb/postgresql.pb.go | 2 +- api/managementpb/proxysql.pb.go | 2 +- api/managementpb/rds.pb.go | 2 +- api/managementpb/role/role.pb.go | 2 +- api/managementpb/service.pb.go | 2 +- api/managementpb/service/service.pb.go | 2 +- api/managementpb/severity.pb.go | 2 +- api/platformpb/platform.pb.go | 2 +- api/qanpb/collector.pb.go | 2 +- api/qanpb/filters.pb.go | 2 +- api/qanpb/metrics_names.pb.go | 2 +- api/qanpb/object_details.pb.go | 2 +- api/qanpb/profile.pb.go | 2 +- api/qanpb/qan.pb.go | 2 +- api/serverpb/httperror.pb.go | 2 +- api/serverpb/server.pb.go | 2 +- api/uieventspb/server.pb.go | 2 +- api/userpb/user.pb.go | 2 +- go.mod | 4 +- tools/go.mod | 74 +++++----- tools/go.sum | 146 ++++++++++---------- 65 files changed, 177 insertions(+), 171 deletions(-) diff --git a/api/agentlocalpb/agentlocal.pb.go b/api/agentlocalpb/agentlocal.pb.go index 176067addd..62d691f161 100644 --- a/api/agentlocalpb/agentlocal.pb.go +++ b/api/agentlocalpb/agentlocal.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: agentlocalpb/agentlocal.proto diff --git a/api/agentpb/agent.pb.go b/api/agentpb/agent.pb.go index 26d2f8421f..a60bdc9633 100644 --- a/api/agentpb/agent.pb.go +++ b/api/agentpb/agent.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: agentpb/agent.proto diff --git a/api/agentpb/collector.pb.go b/api/agentpb/collector.pb.go index 8a59648c83..3bbf8ce9fa 100644 --- a/api/agentpb/collector.pb.go +++ b/api/agentpb/collector.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: agentpb/collector.proto diff --git a/api/common/metrics_resolutions.pb.go b/api/common/metrics_resolutions.pb.go index 21bba35401..b4366af83d 100644 --- a/api/common/metrics_resolutions.pb.go +++ b/api/common/metrics_resolutions.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: common/metrics_resolutions.proto diff --git a/api/inventorypb/agent_status.pb.go b/api/inventorypb/agent_status.pb.go index 5635f48d1b..3a7605efeb 100644 --- a/api/inventorypb/agent_status.pb.go +++ b/api/inventorypb/agent_status.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: inventorypb/agent_status.proto diff --git a/api/inventorypb/agents.pb.go b/api/inventorypb/agents.pb.go index d0b141e01c..8bbba903d0 100644 --- a/api/inventorypb/agents.pb.go +++ b/api/inventorypb/agents.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: inventorypb/agents.proto diff --git a/api/inventorypb/log_level.pb.go b/api/inventorypb/log_level.pb.go index 0c900f9127..edd263da39 100644 --- a/api/inventorypb/log_level.pb.go +++ b/api/inventorypb/log_level.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: inventorypb/log_level.proto diff --git a/api/inventorypb/nodes.pb.go b/api/inventorypb/nodes.pb.go index ca7495fab4..58ff6ea809 100644 --- a/api/inventorypb/nodes.pb.go +++ b/api/inventorypb/nodes.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: inventorypb/nodes.proto diff --git a/api/inventorypb/services.pb.go b/api/inventorypb/services.pb.go index 5c4eddb93b..25542e9d90 100644 --- a/api/inventorypb/services.pb.go +++ b/api/inventorypb/services.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: inventorypb/services.proto diff --git a/api/managementpb/actions.pb.go b/api/managementpb/actions.pb.go index fdaa3ed566..69961f4760 100644 --- a/api/managementpb/actions.pb.go +++ b/api/managementpb/actions.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/actions.proto diff --git a/api/managementpb/agent/agent.pb.go b/api/managementpb/agent/agent.pb.go index 66f35734d2..8b02007645 100644 --- a/api/managementpb/agent/agent.pb.go +++ b/api/managementpb/agent/agent.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/agent/agent.proto diff --git a/api/managementpb/alerting/alerting.pb.go b/api/managementpb/alerting/alerting.pb.go index 206de153e6..2ed989fcc8 100644 --- a/api/managementpb/alerting/alerting.pb.go +++ b/api/managementpb/alerting/alerting.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/alerting/alerting.proto diff --git a/api/managementpb/alerting/params.pb.go b/api/managementpb/alerting/params.pb.go index d2fda9fff6..c41159738e 100644 --- a/api/managementpb/alerting/params.pb.go +++ b/api/managementpb/alerting/params.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/alerting/params.proto diff --git a/api/managementpb/annotation.pb.go b/api/managementpb/annotation.pb.go index 4bca0accae..55cce63d9c 100644 --- a/api/managementpb/annotation.pb.go +++ b/api/managementpb/annotation.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/annotation.proto diff --git a/api/managementpb/azure/azure.pb.go b/api/managementpb/azure/azure.pb.go index 842acab0a6..44def7fbef 100644 --- a/api/managementpb/azure/azure.pb.go +++ b/api/managementpb/azure/azure.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/azure/azure.proto diff --git a/api/managementpb/backup/artifacts.pb.go b/api/managementpb/backup/artifacts.pb.go index 28edd7e308..0f42250ba8 100644 --- a/api/managementpb/backup/artifacts.pb.go +++ b/api/managementpb/backup/artifacts.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/backup/artifacts.proto diff --git a/api/managementpb/backup/backups.pb.go b/api/managementpb/backup/backups.pb.go index f5bd12876f..19a3ff9ee4 100644 --- a/api/managementpb/backup/backups.pb.go +++ b/api/managementpb/backup/backups.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/backup/backups.proto diff --git a/api/managementpb/backup/common.pb.go b/api/managementpb/backup/common.pb.go index 021f3be1fe..f2b715febb 100644 --- a/api/managementpb/backup/common.pb.go +++ b/api/managementpb/backup/common.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/backup/common.proto diff --git a/api/managementpb/backup/errors.pb.go b/api/managementpb/backup/errors.pb.go index de8e75fa1c..7f38b469bf 100644 --- a/api/managementpb/backup/errors.pb.go +++ b/api/managementpb/backup/errors.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/backup/errors.proto diff --git a/api/managementpb/backup/locations.pb.go b/api/managementpb/backup/locations.pb.go index 9310429d0b..657e2db3fd 100644 --- a/api/managementpb/backup/locations.pb.go +++ b/api/managementpb/backup/locations.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/backup/locations.proto diff --git a/api/managementpb/backup/restores.pb.go b/api/managementpb/backup/restores.pb.go index ea8a52ba4b..37f246b1d1 100644 --- a/api/managementpb/backup/restores.pb.go +++ b/api/managementpb/backup/restores.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/backup/restores.proto diff --git a/api/managementpb/boolean_flag.pb.go b/api/managementpb/boolean_flag.pb.go index af77f1f62b..d4a88e8603 100644 --- a/api/managementpb/boolean_flag.pb.go +++ b/api/managementpb/boolean_flag.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/boolean_flag.proto diff --git a/api/managementpb/checks.pb.go b/api/managementpb/checks.pb.go index 5f7f473eb9..24282515d8 100644 --- a/api/managementpb/checks.pb.go +++ b/api/managementpb/checks.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/checks.proto diff --git a/api/managementpb/dbaas/components.pb.go b/api/managementpb/dbaas/components.pb.go index 76c1026ccb..9aaa8e3e24 100644 --- a/api/managementpb/dbaas/components.pb.go +++ b/api/managementpb/dbaas/components.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/dbaas/components.proto diff --git a/api/managementpb/dbaas/db_clusters.pb.go b/api/managementpb/dbaas/db_clusters.pb.go index 2f47d7abc1..6becac3718 100644 --- a/api/managementpb/dbaas/db_clusters.pb.go +++ b/api/managementpb/dbaas/db_clusters.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/dbaas/db_clusters.proto diff --git a/api/managementpb/dbaas/dbaas.pb.go b/api/managementpb/dbaas/dbaas.pb.go index 0ac35b8832..24f5c5864e 100644 --- a/api/managementpb/dbaas/dbaas.pb.go +++ b/api/managementpb/dbaas/dbaas.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/dbaas/dbaas.proto diff --git a/api/managementpb/dbaas/kubernetes.pb.go b/api/managementpb/dbaas/kubernetes.pb.go index c0424b058a..51c64bcbef 100644 --- a/api/managementpb/dbaas/kubernetes.pb.go +++ b/api/managementpb/dbaas/kubernetes.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/dbaas/kubernetes.proto diff --git a/api/managementpb/dbaas/logs.pb.go b/api/managementpb/dbaas/logs.pb.go index 334b57c808..2eb8f1a58e 100644 --- a/api/managementpb/dbaas/logs.pb.go +++ b/api/managementpb/dbaas/logs.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/dbaas/logs.proto diff --git a/api/managementpb/dbaas/psmdb_clusters.pb.go b/api/managementpb/dbaas/psmdb_clusters.pb.go index 24cefe86bb..d5a9d9c996 100644 --- a/api/managementpb/dbaas/psmdb_clusters.pb.go +++ b/api/managementpb/dbaas/psmdb_clusters.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/dbaas/psmdb_clusters.proto diff --git a/api/managementpb/dbaas/pxc_clusters.pb.go b/api/managementpb/dbaas/pxc_clusters.pb.go index 0742176a98..667888c862 100644 --- a/api/managementpb/dbaas/pxc_clusters.pb.go +++ b/api/managementpb/dbaas/pxc_clusters.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/dbaas/pxc_clusters.proto diff --git a/api/managementpb/dbaas/templates.pb.go b/api/managementpb/dbaas/templates.pb.go index 2e85aed5e3..afff992ee7 100644 --- a/api/managementpb/dbaas/templates.pb.go +++ b/api/managementpb/dbaas/templates.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/dbaas/templates.proto diff --git a/api/managementpb/dump/dump.pb.go b/api/managementpb/dump/dump.pb.go index 83d242c415..7847bab284 100644 --- a/api/managementpb/dump/dump.pb.go +++ b/api/managementpb/dump/dump.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/dump/dump.proto diff --git a/api/managementpb/external.pb.go b/api/managementpb/external.pb.go index 5264add28d..63cf3a2eba 100644 --- a/api/managementpb/external.pb.go +++ b/api/managementpb/external.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/external.proto diff --git a/api/managementpb/haproxy.pb.go b/api/managementpb/haproxy.pb.go index d6b50c5d8b..b31a93b774 100644 --- a/api/managementpb/haproxy.pb.go +++ b/api/managementpb/haproxy.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/haproxy.proto diff --git a/api/managementpb/ia/alerts.pb.go b/api/managementpb/ia/alerts.pb.go index 9738858c74..e2b30c762b 100644 --- a/api/managementpb/ia/alerts.pb.go +++ b/api/managementpb/ia/alerts.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/ia/alerts.proto diff --git a/api/managementpb/ia/channels.pb.go b/api/managementpb/ia/channels.pb.go index dca729e2ca..9af59a6e3f 100644 --- a/api/managementpb/ia/channels.pb.go +++ b/api/managementpb/ia/channels.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/ia/channels.proto diff --git a/api/managementpb/ia/rules.pb.go b/api/managementpb/ia/rules.pb.go index e38d8a376e..70beaaaa22 100644 --- a/api/managementpb/ia/rules.pb.go +++ b/api/managementpb/ia/rules.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/ia/rules.proto diff --git a/api/managementpb/ia/status.pb.go b/api/managementpb/ia/status.pb.go index 282e07a3f5..fb51129ec3 100644 --- a/api/managementpb/ia/status.pb.go +++ b/api/managementpb/ia/status.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/ia/status.proto diff --git a/api/managementpb/metrics.pb.go b/api/managementpb/metrics.pb.go index 51eead4fd3..0c18932eb0 100644 --- a/api/managementpb/metrics.pb.go +++ b/api/managementpb/metrics.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/metrics.proto diff --git a/api/managementpb/mongodb.pb.go b/api/managementpb/mongodb.pb.go index e820ae0a79..1878b85126 100644 --- a/api/managementpb/mongodb.pb.go +++ b/api/managementpb/mongodb.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/mongodb.proto diff --git a/api/managementpb/mysql.pb.go b/api/managementpb/mysql.pb.go index f2a9447eb8..d6295c8020 100644 --- a/api/managementpb/mysql.pb.go +++ b/api/managementpb/mysql.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/mysql.proto diff --git a/api/managementpb/node.pb.go b/api/managementpb/node.pb.go index 035271bd06..829defd5ab 100644 --- a/api/managementpb/node.pb.go +++ b/api/managementpb/node.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/node.proto diff --git a/api/managementpb/node/node.pb.go b/api/managementpb/node/node.pb.go index 45c015de56..9bf4d67518 100644 --- a/api/managementpb/node/node.pb.go +++ b/api/managementpb/node/node.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/node/node.proto diff --git a/api/managementpb/pagination.pb.go b/api/managementpb/pagination.pb.go index 265f5c6888..52743b17dd 100644 --- a/api/managementpb/pagination.pb.go +++ b/api/managementpb/pagination.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/pagination.proto diff --git a/api/managementpb/postgresql.pb.go b/api/managementpb/postgresql.pb.go index 0b0d7ca1be..bcdae0d374 100644 --- a/api/managementpb/postgresql.pb.go +++ b/api/managementpb/postgresql.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/postgresql.proto diff --git a/api/managementpb/proxysql.pb.go b/api/managementpb/proxysql.pb.go index 90f40520be..617f94c8ae 100644 --- a/api/managementpb/proxysql.pb.go +++ b/api/managementpb/proxysql.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/proxysql.proto diff --git a/api/managementpb/rds.pb.go b/api/managementpb/rds.pb.go index b93e50e43b..b87b8c6fdd 100644 --- a/api/managementpb/rds.pb.go +++ b/api/managementpb/rds.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/rds.proto diff --git a/api/managementpb/role/role.pb.go b/api/managementpb/role/role.pb.go index 6bf69db813..7a7dc7a3b8 100644 --- a/api/managementpb/role/role.pb.go +++ b/api/managementpb/role/role.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/role/role.proto diff --git a/api/managementpb/service.pb.go b/api/managementpb/service.pb.go index 2bd52da246..79b8bb727b 100644 --- a/api/managementpb/service.pb.go +++ b/api/managementpb/service.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/service.proto diff --git a/api/managementpb/service/service.pb.go b/api/managementpb/service/service.pb.go index 0775fbb609..ffe1fed9a0 100644 --- a/api/managementpb/service/service.pb.go +++ b/api/managementpb/service/service.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/service/service.proto diff --git a/api/managementpb/severity.pb.go b/api/managementpb/severity.pb.go index 096e764c2a..b9753b5f40 100644 --- a/api/managementpb/severity.pb.go +++ b/api/managementpb/severity.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: managementpb/severity.proto diff --git a/api/platformpb/platform.pb.go b/api/platformpb/platform.pb.go index 326da2b1e5..606ddc6975 100644 --- a/api/platformpb/platform.pb.go +++ b/api/platformpb/platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: platformpb/platform.proto diff --git a/api/qanpb/collector.pb.go b/api/qanpb/collector.pb.go index 426fd33b0f..2a0dd00dd4 100644 --- a/api/qanpb/collector.pb.go +++ b/api/qanpb/collector.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: qanpb/collector.proto diff --git a/api/qanpb/filters.pb.go b/api/qanpb/filters.pb.go index 46984fceae..c61e6b2158 100644 --- a/api/qanpb/filters.pb.go +++ b/api/qanpb/filters.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: qanpb/filters.proto diff --git a/api/qanpb/metrics_names.pb.go b/api/qanpb/metrics_names.pb.go index 8b0b9aedb7..ea814c2caf 100644 --- a/api/qanpb/metrics_names.pb.go +++ b/api/qanpb/metrics_names.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: qanpb/metrics_names.proto diff --git a/api/qanpb/object_details.pb.go b/api/qanpb/object_details.pb.go index ece89214b0..42728d28b2 100644 --- a/api/qanpb/object_details.pb.go +++ b/api/qanpb/object_details.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: qanpb/object_details.proto diff --git a/api/qanpb/profile.pb.go b/api/qanpb/profile.pb.go index c59103d912..25dc675d82 100644 --- a/api/qanpb/profile.pb.go +++ b/api/qanpb/profile.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: qanpb/profile.proto diff --git a/api/qanpb/qan.pb.go b/api/qanpb/qan.pb.go index 8ecf238221..ac838e17fc 100644 --- a/api/qanpb/qan.pb.go +++ b/api/qanpb/qan.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: qanpb/qan.proto diff --git a/api/serverpb/httperror.pb.go b/api/serverpb/httperror.pb.go index de03a86510..0012fae02f 100644 --- a/api/serverpb/httperror.pb.go +++ b/api/serverpb/httperror.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: serverpb/httperror.proto diff --git a/api/serverpb/server.pb.go b/api/serverpb/server.pb.go index 2f29bd6030..473dfbb8b6 100644 --- a/api/serverpb/server.pb.go +++ b/api/serverpb/server.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: serverpb/server.proto diff --git a/api/uieventspb/server.pb.go b/api/uieventspb/server.pb.go index 0630f43618..75eeb4256e 100644 --- a/api/uieventspb/server.pb.go +++ b/api/uieventspb/server.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: uieventspb/server.proto diff --git a/api/userpb/user.pb.go b/api/userpb/user.pb.go index 4a0edebccc..c9839596db 100644 --- a/api/userpb/user.pb.go +++ b/api/userpb/user.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.34.2-devel // protoc (unknown) // source: userpb/user.proto diff --git a/go.mod b/go.mod index 6e4617f2a1..72e1127899 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,6 @@ module github.com/percona/pmm -go 1.22.0 - -toolchain go1.22.5 +go 1.22.7 // Update saas with // go get -v github.com/percona-platform/saas@latest diff --git a/tools/go.mod b/tools/go.mod index 1e9870d0ce..181fbf4b81 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -1,8 +1,6 @@ module github.com/percona/pmm/tools -go 1.22 - -toolchain go1.22.5 +go 1.22.7 replace github.com/go-openapi/spec => github.com/Percona-Lab/spec v0.20.5-percona @@ -10,7 +8,7 @@ require ( github.com/BurntSushi/go-sumtype v0.0.0-20190304192233-fcb4a6205bdc github.com/Percona-Lab/swagger-order v0.0.0-20191002141859-166b3973d026 github.com/apache/skywalking-eyes v0.6.0 - github.com/bufbuild/buf v1.39.0 + github.com/bufbuild/buf v1.42.0 github.com/daixiang0/gci v0.13.0 github.com/envoyproxy/protoc-gen-validate v1.1.0 github.com/go-delve/delve v1.23.0 @@ -24,17 +22,21 @@ require ( github.com/vburenin/ifacemaker v1.2.1 github.com/vektra/mockery/v2 v2.46.0 golang.org/x/perf v0.0.0-20230717203022-1ba3a21238c9 - golang.org/x/tools v0.24.0 + golang.org/x/tools v0.25.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 - google.golang.org/protobuf v1.34.2 + google.golang.org/protobuf v1.34.3-0.20240816073751-94ecbc261689 gopkg.in/reform.v1 v1.5.1 mvdan.cc/gofumpt v0.7.0 ) require ( + buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go v1.34.2-20240904181154-a0be11449112.2 // indirect buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240717164558-a6c49f84cc0f.2 // indirect buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240821192916-45ba72cdd479.1 // indirect buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240821192916-45ba72cdd479.2 // indirect + buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.34.2-20240828222655-5345c0a56177.2 // indirect + buf.build/go/bufplugin v0.2.0 // indirect + buf.build/go/protoyaml v0.2.0 // indirect code.gitea.io/sdk/gitea v0.18.0 // indirect connectrpc.com/connect v1.16.2 // indirect connectrpc.com/otelconnect v0.7.1 // indirect @@ -49,20 +51,19 @@ require ( github.com/aclements/go-moremath v0.0.0-20210112150236-f10218a38794 // indirect github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect - github.com/antlr4-go/antlr/v4 v4.13.0 // indirect + github.com/antlr4-go/antlr/v4 v4.13.1 // indirect github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect github.com/bmatcuk/doublestar/v2 v2.0.4 // indirect - github.com/bufbuild/protocompile v0.14.0 // indirect - github.com/bufbuild/protoplugin v0.0.0-20240323223605-e2735f6c31ee // indirect - github.com/bufbuild/protovalidate-go v0.6.4 // indirect - github.com/bufbuild/protoyaml-go v0.1.11 // indirect + github.com/bufbuild/protocompile v0.14.1 // indirect + github.com/bufbuild/protoplugin v0.0.0-20240911180120-7bb73e41a54a // indirect + github.com/bufbuild/protovalidate-go v0.6.5 // indirect github.com/chigopher/pathlib v0.19.1 // indirect github.com/cilium/ebpf v0.11.0 // indirect github.com/cloudflare/circl v1.3.7 // indirect github.com/containerd/cgroups/v3 v3.0.3 // indirect - github.com/containerd/containerd v1.7.20 // indirect + github.com/containerd/containerd v1.7.22 // indirect github.com/containerd/continuity v0.4.3 // indirect - github.com/containerd/errdefs v0.1.0 // indirect + github.com/containerd/errdefs v0.2.0 // indirect github.com/containerd/log v0.1.0 // indirect github.com/containerd/platforms v0.2.1 // indirect github.com/containerd/stargz-snapshotter/estargz v0.15.1 // indirect @@ -75,14 +76,14 @@ require ( github.com/denisenkom/go-mssqldb v0.9.0 // indirect github.com/derekparker/trie v0.0.0-20230829180723-39f4de51ef7d // indirect github.com/distribution/reference v0.6.0 // indirect - github.com/docker/cli v27.1.2+incompatible // indirect + github.com/docker/cli v27.2.1+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker v27.1.2+incompatible // indirect + github.com/docker/docker v27.2.1+incompatible // indirect github.com/docker/docker-credential-helpers v0.8.2 // indirect github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect - github.com/felixge/fgprof v0.9.4 // indirect + github.com/felixge/fgprof v0.9.5 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-chi/chi/v5 v5.1.0 // indirect @@ -124,7 +125,7 @@ require ( github.com/google/go-github/v62 v62.0.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/licensecheck v0.3.1 // indirect - github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect + github.com/google/pprof v0.0.0-20240910150728-a0b0bb1d4134 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect @@ -176,7 +177,7 @@ require ( github.com/moby/term v0.5.0 // indirect github.com/morikuni/aec v1.0.0 // indirect github.com/oklog/ulid v1.3.1 // indirect - github.com/onsi/ginkgo/v2 v2.20.1 // indirect + github.com/onsi/ginkgo/v2 v2.20.2 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0 // indirect github.com/opencontainers/runtime-spec v1.2.0 // indirect @@ -186,14 +187,14 @@ require ( github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pkg/profile v1.7.0 // indirect - github.com/quic-go/qpack v0.4.0 // indirect - github.com/quic-go/quic-go v0.46.0 // indirect + github.com/quic-go/qpack v0.5.1 // indirect + github.com/quic-go/quic-go v0.47.0 // indirect github.com/reva2/bitbucket-insights-api v1.0.0 // indirect github.com/reviewdog/errorformat v0.0.0-20240608101709-1d3280ed6bd4 // indirect github.com/reviewdog/go-bitbucket v0.0.0-20201024094602-708c3f6a7de0 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect - github.com/rs/cors v1.11.0 // indirect + github.com/rs/cors v1.11.1 // indirect github.com/rs/zerolog v1.29.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sergi/go-diff v1.3.1 // indirect @@ -214,12 +215,12 @@ require ( github.com/xanzy/ssh-agent v0.3.3 // indirect go.mongodb.org/mongo-driver v1.9.0 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect - go.opentelemetry.io/otel v1.29.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 // indirect + go.opentelemetry.io/otel v1.30.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0 // indirect - go.opentelemetry.io/otel/metric v1.29.0 // indirect - go.opentelemetry.io/otel/sdk v1.29.0 // indirect - go.opentelemetry.io/otel/trace v1.29.0 // indirect + go.opentelemetry.io/otel/metric v1.30.0 // indirect + go.opentelemetry.io/otel/sdk v1.30.0 // indirect + go.opentelemetry.io/otel/trace v1.30.0 // indirect go.starlark.net v0.0.0-20231101134539-556fd59b42f6 // indirect go.uber.org/atomic v1.11.0 // indirect go.uber.org/mock v0.4.0 // indirect @@ -227,22 +228,23 @@ require ( go.uber.org/zap v1.27.0 // indirect golang.org/x/arch v0.6.0 // indirect golang.org/x/build v0.0.0-20240712162709-0b82a206aadf // indirect - golang.org/x/crypto v0.26.0 // indirect - golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 // indirect - golang.org/x/mod v0.20.0 // indirect - golang.org/x/net v0.28.0 // indirect + golang.org/x/crypto v0.27.0 // indirect + golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect + golang.org/x/mod v0.21.0 // indirect + golang.org/x/net v0.29.0 // indirect golang.org/x/oauth2 v0.22.0 // indirect golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.24.0 // indirect - golang.org/x/term v0.23.0 // indirect - golang.org/x/text v0.17.0 // indirect + golang.org/x/sys v0.25.0 // indirect + golang.org/x/term v0.24.0 // indirect + golang.org/x/text v0.18.0 // indirect golang.org/x/time v0.5.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240823204242-4ba0660f739c // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240823204242-4ba0660f739c // indirect - google.golang.org/grpc v1.65.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/grpc v1.66.2 // indirect gopkg.in/alecthomas/kingpin.v2 v2.2.6 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + pluginrpc.com/pluginrpc v0.3.0 // indirect ) diff --git a/tools/go.sum b/tools/go.sum index 06be7c2d10..0921193dfe 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -1,9 +1,17 @@ +buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go v1.34.2-20240904181154-a0be11449112.2 h1:X9qBPcvWGOJs/CeRVLoxxLJwC/eKyWDS/G4nj+3KGMY= +buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go v1.34.2-20240904181154-a0be11449112.2/go.mod h1:B+9TKHRYqoAUW57pLjhkLOnBCu0DQYMV+f7imQ9nXwI= buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240717164558-a6c49f84cc0f.2 h1:SZRVx928rbYZ6hEKUIN+vtGDkl7uotABRWGY4OAg5gM= buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240717164558-a6c49f84cc0f.2/go.mod h1:ylS4c28ACSI59oJrOdW4pHS4n0Hw4TgSPHn8rpHl4Yw= buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240821192916-45ba72cdd479.1 h1:QaJ6UkpvlGo4dBXR41vLRfPiKungbg7brjmbBC/k6Ig= buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240821192916-45ba72cdd479.1/go.mod h1:oQsMFNU3YzxxjRS6O68UkcF/A+pXdXqQNcUfQEBTWcw= buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240821192916-45ba72cdd479.2 h1:C3CTZTucEUm7i0O2tAM8GSlg23GnQYcljX1b1Jcpsro= buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240821192916-45ba72cdd479.2/go.mod h1:psseUmlKRo9v5LZJtR/aTpdTLuyp9o3X7rnLT87SZEo= +buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.34.2-20240828222655-5345c0a56177.2 h1:oSi+Adw4xvIjXrW8eY8QGR3sBdfWeY5HN/RefnRt52M= +buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.34.2-20240828222655-5345c0a56177.2/go.mod h1:GjH0gjlY/ns16X8d6eaXV2W+6IFwsO5Ly9WVnzyd1E0= +buf.build/go/bufplugin v0.2.0 h1:nnNvWzUgQXitRDmjWWIkuXj9klreAAE94sVCsL+0v5g= +buf.build/go/bufplugin v0.2.0/go.mod h1:ZZYGt6PDcjbBSywdz/G8NdXkIuWi2rzR8CduGzbCPdk= +buf.build/go/protoyaml v0.2.0 h1:2g3OHjtLDqXBREIOjpZGHmQ+U/4mkN1YiQjxNB68Ip8= +buf.build/go/protoyaml v0.2.0/go.mod h1:L/9QvTDkTWcDTzAL6HMfN+mYC6CmZRm2KnsUA054iL0= cloud.google.com/go v0.0.0-20170206221025-ce650573d812/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= @@ -93,8 +101,8 @@ github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8V github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= -github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI= -github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g= +github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ= +github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw= github.com/apache/skywalking-eyes v0.6.0 h1:qlEE8Wgy6fKXusxAOrI7ANNdO9vKfiGNczI6kygMR4o= github.com/apache/skywalking-eyes v0.6.0/go.mod h1:rwVEbfh8GovISedSOc7nHGrcnkQ7sfTc31iYU5hSpEE= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= @@ -108,16 +116,14 @@ github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/brianvoe/gofakeit v3.18.0+incompatible h1:wDOmHc9DLG4nRjUVVaxA+CEglKOW72Y5+4WNxUIkjM8= github.com/brianvoe/gofakeit v3.18.0+incompatible/go.mod h1:kfwdRA90vvNhPutZWfH7WPaDzUjz+CZFqG+rPkOjGOc= -github.com/bufbuild/buf v1.39.0 h1:f8bpK/8+cpgbppSyK4RKe0L1FxLqWcbgnHnWgXpVM7s= -github.com/bufbuild/buf v1.39.0/go.mod h1:1P0U+x/ky1KhpK7o7mGraDAYjQUG7710wk5lEZFWsTA= -github.com/bufbuild/protocompile v0.14.0 h1:z3DW4IvXE5G/uTOnSQn+qwQQxvhckkTWLS/0No/o7KU= -github.com/bufbuild/protocompile v0.14.0/go.mod h1:N6J1NYzkspJo3ZwyL4Xjvli86XOj1xq4qAasUFxGups= -github.com/bufbuild/protoplugin v0.0.0-20240323223605-e2735f6c31ee h1:E6ET8YUcYJ1lAe6ctR3as7yqzW2BNItDFnaB5zQq/8M= -github.com/bufbuild/protoplugin v0.0.0-20240323223605-e2735f6c31ee/go.mod h1:HjGFxsck9RObrTJp2hXQZfWhPgZqnR6sR1U5fCA/Kus= -github.com/bufbuild/protovalidate-go v0.6.4 h1:QtNIz4LGclM3UArQv/R1AKNF7MO8wriT9v7b8Gnmqak= -github.com/bufbuild/protovalidate-go v0.6.4/go.mod h1:HlkVnkE/zVYZvHIG/a7QZuzqC9bSqHaOOTeRomYF0Q8= -github.com/bufbuild/protoyaml-go v0.1.11 h1:Iyixd6Y5dx6ws6Uh8APgC1lMyvXt710NayoY8cY0Vj8= -github.com/bufbuild/protoyaml-go v0.1.11/go.mod h1:KCBItkvZOK/zwGueLdH1Wx1RLyFn5rCH7YjQrdty2Wc= +github.com/bufbuild/buf v1.42.0 h1:awh6dZ1qjC468Wq9FN/3WAeBLoe6LV8GeFSHlL3ltvE= +github.com/bufbuild/buf v1.42.0/go.mod h1:AKKOqvsTLjeFXTEc7h9KsxsVBY/hETalmy7k8e0FVEo= +github.com/bufbuild/protocompile v0.14.1 h1:iA73zAf/fyljNjQKwYzUHD6AD4R8KMasmwa/FBatYVw= +github.com/bufbuild/protocompile v0.14.1/go.mod h1:ppVdAIhbr2H8asPk6k4pY7t9zB1OU5DoEw9xY/FUi1c= +github.com/bufbuild/protoplugin v0.0.0-20240911180120-7bb73e41a54a h1:l3RhVoG0RtC61h6TVWnkniGj4TgBebuyPQRdleFAmTg= +github.com/bufbuild/protoplugin v0.0.0-20240911180120-7bb73e41a54a/go.mod h1:c5D8gWRIZ2HLWO3gXYTtUfw/hbJyD8xikv2ooPxnklQ= +github.com/bufbuild/protovalidate-go v0.6.5 h1:WucDKXIbK22WjkO8A8J6Yyxxy0jl91Oe9LSMduq3YEE= +github.com/bufbuild/protovalidate-go v0.6.5/go.mod h1:LHDiGCWSM3GagZEnyEZ1sPtFwi6Ja4tVTi/DCc+iDFI= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= @@ -146,12 +152,12 @@ github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0= github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0= -github.com/containerd/containerd v1.7.20 h1:Sl6jQYk3TRavaU83h66QMbI2Nqg9Jm6qzwX57Vsn1SQ= -github.com/containerd/containerd v1.7.20/go.mod h1:52GsS5CwquuqPuLncsXwG0t2CiUce+KsNHJZQJvAgR0= +github.com/containerd/containerd v1.7.22 h1:nZuNnNRA6T6jB975rx2RRNqqH2k6ELYKDZfqTHqwyy0= +github.com/containerd/containerd v1.7.22/go.mod h1:e3Jz1rYRUZ2Lt51YrH9Rz0zPyJBOlSvB3ghr2jbVD8g= github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8= github.com/containerd/continuity v0.4.3/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= -github.com/containerd/errdefs v0.1.0 h1:m0wCRBiu1WJT/Fr+iOoQHMQS/eP5myQ8lCv4Dz5ZURM= -github.com/containerd/errdefs v0.1.0/go.mod h1:YgWiiHtLmSeBrvpw+UfPijzbLaB77mEG1WwJTDETIV0= +github.com/containerd/errdefs v0.2.0 h1:XllDESRfJtVrMwMmR2mCabxyvBK4UlbyyiWI3MvRw0o= +github.com/containerd/errdefs v0.2.0/go.mod h1:C28ixlj3dKhQS9hsQ13b+HIb4X7+s2G4FYhbSPcRDLM= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= @@ -185,12 +191,12 @@ github.com/derekparker/trie v0.0.0-20230829180723-39f4de51ef7d h1:hUWoLdw5kvo2xC github.com/derekparker/trie v0.0.0-20230829180723-39f4de51ef7d/go.mod h1:C7Es+DLenIpPc9J6IYw4jrK0h7S9bKj4DNl8+KxGEXU= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/cli v27.1.2+incompatible h1:nYviRv5Y+YAKx3dFrTvS1ErkyVVunKOhoweCTE1BsnI= -github.com/docker/cli v27.1.2+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v27.2.1+incompatible h1:U5BPtiD0viUzjGAjV1p0MGB8eVA3L3cbIrnyWmSJI70= +github.com/docker/cli v27.2.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v27.1.2+incompatible h1:AhGzR1xaQIy53qCkxARaFluI00WPGtXn0AJuoQsVYTY= -github.com/docker/docker v27.1.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v27.2.1+incompatible h1:fQdiLfW7VLscyoeYEBz7/J8soYFDZV1u6VW6gJEjNMI= +github.com/docker/docker v27.2.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= @@ -212,8 +218,8 @@ github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9 github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= -github.com/felixge/fgprof v0.9.4 h1:ocDNwMFlnA0NU0zSB3I52xkO4sFXk80VK9lXjLClu88= -github.com/felixge/fgprof v0.9.4/go.mod h1:yKl+ERSa++RYOs32d8K6WEXCB4uXdLls4ZaZPpayhMM= +github.com/felixge/fgprof v0.9.5 h1:8+vR6yu2vvSKn08urWyEuxx75NWPEvybbkBirEpsbVY= +github.com/felixge/fgprof v0.9.5/go.mod h1:yKl+ERSa++RYOs32d8K6WEXCB4uXdLls4ZaZPpayhMM= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -379,8 +385,6 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= @@ -431,8 +435,8 @@ github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= -github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k= -github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= +github.com/google/pprof v0.0.0-20240910150728-a0b0bb1d4134 h1:c5FlPPgxOn7kJz3VoPLkQYQXGBS3EklQ4Zfi57uOuqQ= +github.com/google/pprof v0.0.0-20240910150728-a0b0bb1d4134/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/safehtml v0.0.2/go.mod h1:L4KWwDsUJdECRAEpZoBn3O64bQaywRscowZjJAzjHnU= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= @@ -497,8 +501,8 @@ github.com/jdx/go-netrc v1.0.0 h1:QbLMLyCZGj0NA8glAhxUpf1zDg6cxnWgMBbjq40W0gQ= github.com/jdx/go-netrc v1.0.0/go.mod h1:Gh9eFQJnoTNIRHXl2j5bJXA1u84hQWJWgGh569zF3v8= github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= -github.com/jhump/protoreflect v1.16.0 h1:54fZg+49widqXYQ0b+usAFHbMkBGR4PpXrsHc8+TBDg= -github.com/jhump/protoreflect v1.16.0/go.mod h1:oYPd7nPvcBw/5wlDfm/AVmU9zH9BgqGCI469pGxfj/8= +github.com/jhump/protoreflect/v2 v2.0.0-beta.2 h1:qZU+rEZUOYTz1Bnhi3xbwn+VxdXkLVeEpAeZzVXLY88= +github.com/jhump/protoreflect/v2 v2.0.0-beta.2/go.mod h1:4tnOYkB/mq7QTyS3YKtVtNrJv4Psqout8HA1U+hZtgM= github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg= github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= @@ -601,8 +605,8 @@ github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7P github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/onsi/ginkgo/v2 v2.20.1 h1:YlVIbqct+ZmnEph770q9Q7NVAz4wwIiVNahee6JyUzo= -github.com/onsi/ginkgo/v2 v2.20.1/go.mod h1:lG9ey2Z29hR41WMVthyJBGUBcBhGOtoPF2VFMvBXFCI= +github.com/onsi/ginkgo/v2 v2.20.2 h1:7NVCeyIWROIAheY21RLS+3j2bb52W0W82tkberYytp4= +github.com/onsi/ginkgo/v2 v2.20.2/go.mod h1:K9gyxPIlb+aIvnZ8bd9Ak+YP18w3APlR+5coaZoE2ag= github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= @@ -641,10 +645,10 @@ github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/quasilyte/go-consistent v0.6.0 h1:tY8DYfgM+7ADpOyr5X47i8hV/XbMNoucqnqZWVjI+rU= github.com/quasilyte/go-consistent v0.6.0/go.mod h1:dKYK1JZl3150J1+Jh4cDYPCIu2MqybUBi0YVW2b2E6c= -github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= -github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= -github.com/quic-go/quic-go v0.46.0 h1:uuwLClEEyk1DNvchH8uCByQVjo3yKL9opKulExNDs7Y= -github.com/quic-go/quic-go v0.46.0/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI= +github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= +github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= +github.com/quic-go/quic-go v0.47.0 h1:yXs3v7r2bm1wmPTYNLKAAJTHMYkPEsfYJmTazXrCZ7Y= +github.com/quic-go/quic-go v0.47.0/go.mod h1:3bCapYsJvXGZcipOHuu7plYtaV6tnF+z7wIFsU0WK9E= github.com/reva2/bitbucket-insights-api v1.0.0 h1:lpQ/Q7OmnG04w/EM77piOwZBxP41PeTlbytXxVrnplA= github.com/reva2/bitbucket-insights-api v1.0.0/go.mod h1:pLs+ki3MKUntrPryxaGIvpRLiEtBhwfJ/uvxQIMfqHU= github.com/reviewdog/errorformat v0.0.0-20240608101709-1d3280ed6bd4 h1:wFzV+/KigR9v01F8+cK/QyaMg6NgyfOOZaSquborhpY= @@ -661,8 +665,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/rs/cors v1.11.0 h1:0B9GE/r9Bc2UxRMMtymBkHTenPkHDv0CW4Y98GBY+po= -github.com/rs/cors v1.11.0/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= +github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.29.0 h1:Zes4hju04hjbvkVkOhdl2HpZa+0PmVwigmo8XoORE5w= github.com/rs/zerolog v1.29.0/go.mod h1:NILgTygv/Uej1ra5XxGf82ZFSLk58MFGAUS2o6usyD0= @@ -754,22 +758,22 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= -go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw= -go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 h1:ZIg3ZT/aQ7AfKqdwp7ECpOK6vHqquXXuyTjIO8ZdmPs= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0/go.mod h1:DQAwmETtZV00skUwgD6+0U89g80NKsJE3DCKeLLPQMI= +go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts= +go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0 h1:9M3+rhx7kZCIQQhQRYaZCdNu1V73tm4TvXs2ntl98C4= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0/go.mod h1:noq80iT8rrHP1SfybmPiRGc9dc5M8RPmGvtwo7Oo7tc= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 h1:IeMeyr1aBvBiPVYihXIaeIZba6b8E1bYp7lbdxK8CQg= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0/go.mod h1:oVdCUtjq9MK9BlS7TtucsQwUcXcymNiEDjgDD2jMtZU= -go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc= -go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= -go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo= -go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok= +go.opentelemetry.io/otel/metric v1.30.0 h1:4xNulvn9gjzo4hjg+wzIKG7iNFEaBMX00Qd4QIZs7+w= +go.opentelemetry.io/otel/metric v1.30.0/go.mod h1:aXTfST94tswhWEb+5QjlSqG+cZlmyXy/u8jFpor3WqQ= +go.opentelemetry.io/otel/sdk v1.30.0 h1:cHdik6irO49R5IysVhdn8oaiR9m8XluDaJAs4DfOrYE= +go.opentelemetry.io/otel/sdk v1.30.0/go.mod h1:p14X4Ok8S+sygzblytT1nqG98QG2KYKv++HE0LY/mhg= go.opentelemetry.io/otel/sdk/metric v1.19.0 h1:EJoTO5qysMsYCa+w4UghwFV/ptQgqSL/8Ni+hx+8i1k= go.opentelemetry.io/otel/sdk/metric v1.19.0/go.mod h1:XjG0jQyFJrv2PbMvwND7LwCEhsJzCzV5210euduKcKY= -go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= -go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= +go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc= +go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o= go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= go.starlark.net v0.0.0-20231101134539-556fd59b42f6 h1:+eC0F/k4aBLC4szgOcjd7bDTEnpxADJyWJE0yowgM3E= @@ -806,8 +810,8 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= -golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= +golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= +golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -822,8 +826,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 h1:kx6Ds3MlpiUHKj7syVnbp57++8WpuKPcR5yjLBjvLEA= -golang.org/x/exp v0.0.0-20240823005443-9b4947da3948/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= +golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk= +golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -858,8 +862,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= -golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= +golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -898,8 +902,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= -golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= +golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= +golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= golang.org/x/oauth2 v0.0.0-20170207211851-4464e7848382/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -989,16 +993,16 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= -golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU= -golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk= +golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM= +golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1011,8 +1015,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= -golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1077,8 +1081,8 @@ golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= -golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= +golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE= +golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1153,10 +1157,10 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto/googleapis/api v0.0.0-20240823204242-4ba0660f739c h1:e0zB268kOca6FbuJkYUGxfwG4DKFZG/8DLyv9Zv66cE= -google.golang.org/genproto/googleapis/api v0.0.0-20240823204242-4ba0660f739c/go.mod h1:fO8wJzT2zbQbAjbIoos1285VfEIYKDDY+Dt+WpTkh6g= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240823204242-4ba0660f739c h1:Kqjm4WpoWvwhMPcrAczoTyMySQmYa9Wy2iL6Con4zn8= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240823204242-4ba0660f739c/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v0.0.0-20170208002647-2a6bf6142e96/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -1174,8 +1178,8 @@ google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= -google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= +google.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo= +google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1/go.mod h1:5KF+wpkbTSbGcR9zteSqZV6fqFOWBl4Yde8En8MryZA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -1188,8 +1192,8 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.34.3-0.20240816073751-94ecbc261689 h1:hNwajDgT0MlsxZzlUajZVmUYFpts8/CYe4BSNx503ZE= +google.golang.org/protobuf v1.34.3-0.20240816073751-94ecbc261689/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1227,6 +1231,8 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= mvdan.cc/gofumpt v0.7.0 h1:bg91ttqXmi9y2xawvkuMXyvAA/1ZGJqYAEGjXuP0JXU= mvdan.cc/gofumpt v0.7.0/go.mod h1:txVFJy/Sc/mvaycET54pV8SW8gWxTlUuGHVEcncmNUo= +pluginrpc.com/pluginrpc v0.3.0 h1:9BSGRIdNLf/+EU3JrkISLwgIAuYxBrMEzSfNyeQ/Gp0= +pluginrpc.com/pluginrpc v0.3.0/go.mod h1:UNWZ941hcVAoOZUn8YZsMmOZBzbUjQa3XMns8RQLp9o= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=

+a+MT6`-qT`m_id@iWhMlK$JP~m=WW)7n*O9YDnNM68Ozg{EuGX zz+~SXao0a(GwJ zXdqAlO}7ADuGeTlP~R0ax*`F;J7_czsDP%?fS|rRXfz>gbF9LVP90HJ&j&)7JP0EDG`BBn#WFn;cyXwvb{ z&ynl>+&$6cHkxk3>wg2D?#hM3~13 zEmR>5`AEbR%;!3y%)zwFJX{*`F|pihv)amP>O*dzB!&4{&a4#XV`6ryqeR(Hh}qs7 z)<%jsoU#Kc=1+hbQ_SK3VQQWug`R#Y+V{-RsOp6aN(QRTivXD$`dp}fDq?cD&{5^a z@x9C>_Pc#$$irZQ;x@_*cQG>VjhG+$Tu9$*Q;RqqQ7!*l)bs`KjdUsZ-y)v1)?hn= zO8-3~(4Bnc2;F1OAsNo+BOi2mg!4pz7S96^GM|qKC8Y`hLH)dZ!ZfUNWVQU|sOh^{ z=V)i0*&eFdr|$NCIbuyD`y8oi?mIa91Q!8=Yyt*^@_oTR0b%OCV4r{($bG>+1)71} z7wmJSwEh0U+b89z9)wW6?DPI$pX5^g{lPu~ss8?8p8~D=`(>XBjyh6K`0G;kq1yCT z*FY5}Asd)fBflQ3gj|^Xx~!z#u>kZ<`uw@s_%?oI|I`uqk^O%&V(Z)IIu1~z8IB+9 z|ADCg&2K9&A3%vfO+Mg(i0yBm3$+I{K+2nplq9}AfHxu2aswr~fN$q=k_-5D@FpWQ zKt4E-Hz5~NWCv2R`v-$JAs12)25&M_v2Pw4gg2oeR4Ey#YD)i5@FwI!^`YQRMk*}M z!-MrEl%_ot51pVn_`|`QkPGRDgEtvfEk6=9{m^?8UABKD;;l@1lTkF~`@x%x5<@v8 zGk-LSZDlvgc@seM`hbvmG#X>`NI*~@jiydx*EUW^SIa+%nx4U%jBwt>_QK7T=)(R_ zqUNd2m5f#$j~|>X0T=0lY|;gU^5emk0K(DZ!Ic0a-p7M05oosjcyJ}7Wo1tc-jz_E z>OlzA%auG4TnV{U|3q*lfK>lPa3un*`X}T{r0JvON}e1*)5)YRazkC>^~s>=yZ7pIa-7HuLhy%6oe`z163LIuY#tN3)No*O&_hs zJUv)Vr!<;Qanp1_NIxAk9T3t_2TdPSE&nEJ`h(YW1$g+4W|h+PF=+a4gQky>rst5f z@b}2xxu7vl(*f-bVL-_IJ|YmL926j^zn8G5qv>O-i}{++n2`^p6|tlAzTsfe*!ty83H9ky)uL=Vn2Z-mwK;={RDEXntNqD$O$B+F$9X6 zApk=9%GggJ0U>>5?DnQGTQ+ForoFLk&{QdTRqS1U6+^f>_7lje3?YZ4px4H+t;?&< z5CF~P148CnWZ;Ab2p*@2X7;?`gj5*6RPDqmqLe z6TrDMX185CyAwqJE@|C?pVyP~0w0M%z@!TZ^}B*H0>aT<vbmtn31=#~gWhaFRZsY3ic$f{KfUt0P zJbDaY8sc;!TOM(fjmZw_^N#aCI}q<@WdMzwaF|I*PnZqhDd8f|U}o8*ENg%2V6 zg2!0z!Xy1_On9W{`|wERkH+z58lVIu7arqFvAnH?)_PufWaJ@J{3eUd$dmP_K;}6xh z1^@9hG`;VIi_moWw11DYXiuE41svt}xkZ&q{ym6S**zmPXw)czw*zmhdQO4W3qWDQjkEPW{^Y;~RjS6^1sm%66&*uwpB z{6A@WU1O4KI_F0@dzM1J@no?04^q6+Yx!#{QT8{btywUQm_vekq|CPTMr{ByP z9s5T6L~FDq(&(?}jkYuz{f)fQqV}yg{dU&q*frWGSre56OAq9YRtjAGXI!3HInp(n zH!1%sj(=c>_uo3+sP##G8O{*o({35ZBLgaf#Z`7O$}m7Jh_k_kac21GV zDpS|RNv2rZhq^e)6pOfx>Fbls4vFgMVUrix%1IDVC)n zugj8bKoYgflk`fc*??4b^72V0FC`(bH>d%53T?O|VX(_nXvP~8tbVPN7oWecO5(R7 zuak0lHJs1sN6Q*l7L9IP`)pSwyv$(MISdA_N@kuMKx)4#S=|*tntpXI#9OVP1$n(S&G;P`WlLKi?~zr6I(UP`iYwpnr!kSfA#g}XjOA(qq# z4kd4*iQ9LIwu|kuzCv1?k}R$yA^vyl+UdhTlnvqzbIQTy4nkx_tuy)P=H8R{%nZ3^j4vicik1C7$RI{MJ1n|tBCk>K3NFiqSlyQaUr?F1U%sC! z5jo*dJCCINA0?uG_#PS&y+5khYs7A>kQS|Cr|6acI}7LB%FIUnY2bKh#Pac|a+s@R zU02Ue9>Lsj#_9hDS=hG9!oe{=G{X8&RGHgPeGT2>B8>Ez{T%$XV<;Ta`QCvx_HhH- zLnELoGb6J{cAw)Z*|df!S?-^0ZZ<2kpMIGcniij3Im9$#^oFgCmN2-5=ETbQMr7k@ z!TY$mVDwx(tVxw|ZOb>VTDzuqL@dq;uYL*Q+qClRb*B>ri&GYdR3=%{h8L|pYt!=e zE8B>KMQp3nSB{B$WxCW&8#cCWJaYptZj7&tDPXQzvts4hV^UoE)OBk&Y&>QCO4ZYs zXo)r9gx)0#xy<*=(W}?4Ic4pNlQRy7RYz4S>o#uMaOUdOZR=k$rdjm@`>K6vOO>XP zy6%*$V1*|Zsw(IS1_HyEePKFLr`$5Xr+Pcly0WD^F=6s;2cA`E+zcQlO#ivo3A2bl zw6t0Qt8T<=v-sWP-^=USwRNXHSrGV%R|B{EA{L=4j}ep8U*Z{D0*&g$L^yQbsP96) zx}eC^0EI$0qQeGN);H%(MD2NT)tqd7o~ya;)n;C3;Zd%_o&mD$x)YE4hJ{|;wlJ*K zixe5BRgrP}X?355RIiTxP*RjZzH+QC-e=qLf#JmP?Gya2C3fa|Na zybl7DORbxqt~-yMDPC)%>eZ-fU-|S|lkQ7CeF_gkKKi^^&BHme)rupDUEXejE=;rnTR zp=^*?Uq{u*K?91H)s@IM{#J{ncVn=v&moU8Nt zDnVn3(Ad`f7xe9X<=(cHRr6W&_r|(kTV)O-8&=kJbaSMly}q%lYwLwPf!(X1HFbfy zdG0>DIWSy(eO#I7TiI(3T%F$!`@PD9miC5E zARJ_IvJ%JzdK5&#k!)I6L4Z-*xH5{IMg&qA0vE& zsu_KbD5#@X~MJ(8ismW9yod<}1 zoC?>}Pxwj>XD3s+v@?dN8-m=~>|`o;c64%@BReyi78noGp&6VY7Y{B#uo#pxJr5Rxawa@1ceEfpo7<#E`y zT0Nc{Lcv-b%6S|WR7U|pb>1)wW@>RL=W(ZJv7?H?&5y^`X4Y4BcN3d-8_{Yxp;I7# zUVG=(0%a~ofMDuD97!n8Z*ftLsfUB4$$X+3tNS?*wXo?}>wdLrVe_Fn@=L5HRB$m} z*4l5Eb-93qJ1;<9)^lD^7C~^auh=38F7};d5d;_0Ns1caWVkdwu{N*1!M|jTM(EAr zB2^BZy<%5qch)elXxP$>zLa38kN!j+4O_}hE{PKey&+G2m<~EpJX?Tt=pi76R}ESw+&u7kF*A5P&a0+tnBjFfMO8 z!x|%TFXxJo%*;iCTY11{W)a{*piYYbx6)T^5#UyOGjkE(PB~CBv*2$bMkf#~pOOVx zlbN03&5S(E>=bWig3QcL@n(h!Rg+VP!puw=PxZnEf~QlxnE}Dmsou<7__)*eX=WBh z?(~e96zp`bh89KcbZ=%ZirkvPnHgm!`U&pA*t0}J}+Wc1arbG(_6N5jtXW(I_ro#V|+ zkeS&z-pmL`S54Z7!pxuqPwg2`YFN8BGxFf6-J6+W-X)v&X=W6G*yfCw%xtq)L-K_0 z&8)1^tYdIyMp;+b%nXP+I=qOMbfpUmuh zZ)TiU|GTCx(@ZT|{;v5bXJ!h)mu%ganYkc)6tOy7jJ;&5H!~pW*y_z}nEGn_L7N%q zG-i8Nk+gBU*LL!#XuCHvZhO9>=~dPkEv#PAyx5tU!tfC)^FSw!piyy;uh@m_BXXt% zymZm}k{)kn3f4#D%mbV>f(89u8GSWump3!=XxJ`qW_-F;cyEvUXsn5OEJ>d-izOIMk;)Y|o3q3g7opGk-?anxpeeKRT zQ=IhO8E3KQY&V>p?l`0H9(4Ppea+M~t+lWGOksCk!1F2DQQ7)=ogG`l%7lP~@Uos|*3cXgm&z5TG)lC-@8bk3uwRV1W^Ae}niV&E*W?za;2`YJwufzonOkU#^ z+r?j z-z5?H&Ar!@Kzr5nGKEDN{HjPbfJglx+HGn;s9qLg9RX7RWvX9OLKnX8^5{U6-0Dyp z!3%Y$jhBaLE*9tSas?Rig|XqwBh*Q;ILS42A_;xs{uD{946hIuL!jzbC8{opfj{-> z6*+$>J7C72;uc+z^XJu_B=}qH_@g|LM~6V+jXM-x^a6KiJRmCXb6sudyrMc1bdWfu z*ZFubiZV!?(j`8&9vX5@G?3bhm<1E0j8$d91g{AZhAf!iHHt7K%_n@HqJ|!nPq)gX z6%YuONh|gS&4W7a+8Z>V_;5EwO}F}XDL&i{QFE)){QsZ5H;<1iyY4&dy((gPSO^pd z5(Kv*xU)%sWbf=18%eOabpdRO-D;sh03@LX0SW~)o01n8RmeBl&=kxVbM!4fh$z z2lh>XtE=gJvQSh&a3u)=5L_+J7D`>g!$Y@I8eE@K%zBo?GpZq_Cg! zk`K1o*P_g?yLJiN>}yfOVI%o~l7T03_ma7z-AfipB zn_3S`=K}#JwAa-npDYwb9$OSi2>hm(e3BIPn_lvPcFX5}`}OO5zNat<_`)O=zwITD zw-ol@tcJJTHT)dbi@lca;Cnefbs^?4SGc zNmBklSNZ$t$PH@jzW~s(ySrd88fx68*$yQqWXWoqMbdofz!ynE_Fo8NRC^uJ#{OlL z`B$!4!WjFPQNwOC`oa0i=l*Qf?jj3Ck;fKA5(0nbyNe`6{h9ABAieUrKY#t*#rG5j z0biKf_2-^lyrr-|x1&#hVRipD%KV2Y;{NfhyG&i2FK`jar7$6a&C&z1x1}J1QDLUP(d~kXNfFNK(;%r;6S~zit#)420{p)hwL)ZV`@c)Y@&d_ zh`2P?e6UFj0aSGbqX8)hvQR_v*iIq|f&b(sf+RKkPhKK6sqKIH`Xz$zDGUO>FtOt= zJ)?O`VSgz`E3#)7z&%msf547IX?CO};)X0Cr>@ixi!SK?w}?AEof3743x9R@V!?OR zmJe-hNka9nd~Hcm+rRQ+(IwXWwUB-9KrF}%WpaDU;=^D2)d+8){MVW@PQi!G`MP(- znZFT7-N(~>SWzri=E`PDc~{JRl4N7Exbp6JHQ68w)g+ItCP@gq+aqt1q?+#*@}^Ek zHj4qT#IJjQ$oCWm0biJS@=ELmA#W+{l^EH02%dE3>wYNC{4hK@nC3}ZHg1>RHd{k7 zx}o|*v0GPkiwEyfo$v1akngA~AKJQ-gz9^IT}e{c_o%K?7~Nvb`vm-X2a-W%D3jY$ z78l;^1)T*f-F>$ zJhqY~A@D&j7bL0V2fbWuQS(3a`sIS}DGUO>FmdEVp4Yskun&pXnjN?1>pl`^UUlG~ zTgmy6xM7RwhOKJXM+HHpUvNqTzjMdBzbAY`KN6 ztnO#x+-m{2En@(r+#?GYrAJihGs}=MKO2LX^%jGe1v2Ir;`rxj{<#!vMTI{-CT3WX zl$-&t^IUZOv7%?9XOYD53vt~x$08wUej(oes81p&Ux-g$O(AH0G0uHCu*f55x`&n> z0YURiaoq!sMFBzce=4&`2%2Asb3YeYWDzvoBg-O(p!wCf?y$qy(i3X+vvJ*1$#aH9 zAZR+|)TfrSNUmD67S2dxh5Fu@Ez83ckIsRy~^0oNRgb6=;Hn;UO;4y5;HpE(g5eKf zo8PqHs#litr^+kvPFb~*U!rH5P5=OAJ>>W#q|R@~ho1$DQv;C$fpy=Er++kZd=q+R z1v0D0;;cYs4OpBYvkp7H1uV|rD$A9qRUorkEY1pKRz0FlAhSO1!UTQ6<1#k2qn`6KVxi z>;uUa!w;}C|6?5gSNKu1{3tsXtvZ~_*_Qh+R=98!a0Sj)clN$?|=^j}= zIe5&!jO%1NFBohGj|l?oKyuOW33$x^9>?zn9&@-BpK1tCHHVBlVl``oqX|0fZpRvR z*ME=qoc2lj>c7Vq-{B-k$d`W==l)0FjK|S*4=rZ`jwXn*k2%iRXN)M&YW;{3wRdK7 z-(Q8J=^j}=I2=s?W$$;K(GzO*u58^S$!WtGLQTGsjei)<9CstC!i}&>(NuaURmK}OTmEM!B>vQbT6KeHdG3ZId4gx{GKO6rz>^R~C#k(3-a)NUw zf9PaigegddD8Rs)Fd4`q{w5^1m>{4^Qr!Eq{m(m@NT~J)vI2W`Oh_CP+(XL*`w%7o zLwm223HuBte6Y*}QTtFf_mRMa#4y1K9&p{CSW)5YBv69 zm~g*mLU1-*#)j1KTNNi{aPexk&V$C|P(yOtaW^`eDD&0q@TB8J6LtTIZ0=)$6HSg2 z?xE#`eF!H&l)c|^!ajo&Ak=zs5VfDm<~|uX(PTK`9$8N45mf?H){hQ7p;lnio^sg4 zSXz8K8-EE-JmERvJQba1<1%(spR!c(M8+DQ&W2TQGZpxBHmrJ^DgD#guYuu?2C)DZ- zSyqO24#u|N%h~vs;E9`qD}4@^bEM*Qp^6_eP55$IWwcQEm&+=ng_6HqRv9g{;49hO z&jo(8IDWW?mLK*Z{P=2FW!Pu%<7dnK5VfDr=6*5oqs8#UJ+l1JBdYWZ*)Rv|3AOrK zmU*ksj23JXzMhSL6MpO{q&+HGhE)1Q`X#)~7QRl{RW}e6TKVhQ4inNA4bckquV;@A zyK&JX>)G6Igf_RDHoHf*&3Z(Y z{%#q4Sx>0dH?wtn0{ZeFUP!j5{WSaVa++JT|Mpq{<`(m)_obs(rWYrUu7Sb4x}Ui zr*Au4;%1)qn}<(L-_9Sg<&v>9J;}+PGMaMN8PMi-%Dq(@HLu97V$UZn6K`Kym>zdL zF=)w6#}4+IqJ1~?RyMuY0I8q1Tr4&l0xp$*I7uj3?pEUyi(U1U+jOkE*Y=a;CH>Sp z=KHDG=yLZj=Estj$tC3f#`x^SmFd}1S3@Do*L|zkWzc+b#(Xh6x43Y-*lelTM+VDz zrX)+)sjf!DhK4DZ&i5r9{`dIg{Os)XEb7zZwj0@|?QO&Xg9X=f-c& zFD!O7L9eBl*hd$5BJl0m`D^2|T(Qh{HS-$iXdawVI=??@yD{s>A6 zSyyc3xp5jhW1i*-LXgS{!P3mzr@LCon=P&ndFQW<@;JXUX}+OroypSp%?U`ZH^nx& zXBT*s-;=cZETzfoz?*lqnM^J2>8N>_e})QbwKhI=B?v@28JmtBTD=q8{N_cX)leC_ z;)Mb!yCH=hh~^E^HKfe=w0n}xhJYuSf@kb74RP>{`Mt?{Mqb63+dzhfV#`b^J>04R z$U6;{GywTqlKf4JiIT4PMpN-MM6$dM@U?F*lk!bCn6#s|%y6E5d3w@z-6m6w_3p(m z&rSEy!#9^o*T-FNb#<90HR;(|+w=Jcl1)~wre8+=%}$rbz4&%*Hn}^^>tXkH$Paz!V8^XI6+ZGhur~KtU^W`R=;evf1zI`O=UYIJ46Q*ru($}s0aku@L90SVWDjGiS zPqyjf>ACBIC7fFR{TB1RN*H!|s!8lg*5k=r8lRsVpCcrX6!BI*0?l2I&(GWw=Fy#<>@o#q4XP$tP67!4C-BEK;ihbl=0F{O=m_K@8<0q%Gl*b8FwZ1 zn(UY-yY?8WJ}Gs>5Cf5A4t0rA-D_&qG*coNj(wEhm#m+D8IhkJ*MIm_E_CfTxmxXG z4$RHd?kAGw^eE5oN?M_SMDdJ7=BFHAHPO|Hf_E?%x5cB0U>P0Z-1( zAkO7!xxqd_68e%2s=9serpWTN%=9>DUfCH^(<6G5YmND(g~@5#scvR&@lQ<`s=cM9 zE2YVW88auUXoX2=EViZ}Qvqtn>u_%S(+H~ZBY zIWh;{2)?+XxY6)tu>9Ul?PJOQ6~4WSGkK+s6vk~sv8M*56XZ=R&WDq(i6x8&<`z{K z#Djr5$q=3?-EeK*RQdj_f1Q6Ysd_c;y=Gkeh>ewB4mqb}X2W(nuG}20#TyG1P10@V zg`1)ET$xkZ+#u9CWL>c>^}-IjV@W67AwYTjdD2UO2E&jJ`?7y_)|J5O0Kv<)<+=eb zZ(pY8o&1(cv!RcI{En7pUB?_rHqcNe*_qNLfmRl7yGlxA))n)5hnBRjY&9QBy0jed zgUJs*!v{&xy5dIO`%&e_q25-El_!$+Ws4;#9)?<%M5(c;pNgnqyvto|5Sut2KNR(x zPTJ0}`Y~%)2mMl|TrHWDa!pOtlCj33$5B3=w5MoUl$iYeNu61DmZ*=Ge%n@EbrfCZ zV_%7qb*57J&)}*Q$d&-Esa(c}S7qRu6*D;C8qigb=9~0k!4y&I?kR>SfD9yb8xHZa zdXI~~&0=wPwhNAFb2S{3+3<+mz@BG!RfE{rozNquPHqQu`oj-cD4Wk=rPYu`&G~F5 zlh-et)#A*?nou?e%u_PdWgap=@#(71?9^BInKfpPdsG|!l%rQBzpg3s!;~OLFYalx zO$`DV$>lP@Or*+I9WkfxMPg`LS>R|?$QoZH^L$yMCXY6Y`^3Cscn1-hG4wO92vH*F4d zxp~cQ20v(@qf2s2Zbx^Qqnn-uE7^jnGC9j^;ifXXrKvj*=58{(g?Pc9)3^q2OL5xH zos}fzFuW~AQZB>WQk<64@HRMYJC;L>LVUz`tlCvTDvy|UfN7G?_T=^h%;I}N;*^?- zt9yViD7`220BI=pG_tNSJwTe$dx*IFxGRCzyK@h8_pMlhCTp;4>>zIQ{}10 zcQ+ml<*CPa-*>+ouo#_W_tY4$u?Fm(FwRIqrXr1`C~e1?F5a{IV9e$K+NP-+GZMEH z2%AxE#)-C4{zV$bOSMS^Vz=K zu9R+2kX=^*E0lt4TbH;_WeN zWYvBaDZ1B4kybiowa?7Liy%cL`K%(1*eGq)zR28X)V?8;Qu|r?8sC>9B&n`QLr7^W zj?9Dk>;reA_Q?qs9td0@4dn-d+9wSc9zg9sXru<5mwfgic&#YFbeiUPFN!6DXQb8I z;joem?B+uXdMI=%X;Df%yGc{fL$G_y6-0}UBlp92nZG=9W9dd=Zt2FA=>?VO_F59r zf`Q)g3&8?L&E-XCVP+1IW;30tg+|};R4vq=#ZspSKh+_@A~2AuCbc0*7Z!0vIo zp+aIP-rC(>=)W||?WB%m3M|z_W2I<@0woQFAq2+Km691kTn-ybD2)>|wh$UCigq_C zie>F>KbBHC5gIC$aw0TT3grY16`GdfsAf+=cwfPt9uG+=R&cdM1ZV|LX`6S)$iP_ThfdXJ-j7xLyTiCw{T-$+A zW&`{@7Z@*)i*xlB?~PI@^Bj0@#Dk_xRMZ6+v&#elH>2N^4EokUK4|W+jNww5PeO{4 zE;#fOs8P}d4i#KZO1iNBpeqUZ!6LT9wj?4o=!C@dFvkk)6X;)e`WH${pj`}dDa68J zqX8nM-dq`HivSVsHLU=#aEx)Xxo~FwTEU!68_Hgd1d2^i919c$Z8+v28!|Chui3HA zP00a6k!{E`@pk4ns}{}KB9wKcjT$OE-G43+ZHDMGalLCacbVB|Kti-E;O;W}%$99V zZd&r$H^l|yrh+I{*6DXO*%rvYDUjt#F#9H=!dtRj0cPK{ZHKHC;6*D?LGhOE#|k=2 zEi4gVYyoh>nMtiz%(1zhFwKG0)FC^x7)$KbrWZJFDO@a$gvPW|>a&4ET*_si#i-nt z$|YR(*{<$n$dtNX*h1U7A1v6jb&bw6MWsFeLp`SFrf$y9a1Ua z*FEbg@6Fv?lP64hZNeJb*L|#@CF;c7RAC-X%k*JyX=>;Sw+sqJwJ{Li61Ta=;4GSb zOFL(MX0#J_CHt1$dll6ghPLOkFT_0rhgVUn6d(xOK)xOFF9c&u6bN3vDU%(^)f!7Jz+I^#Af{C=Yk8gx<(Q^9qhmw#s>EUg_vGNOzgIBcGi@ z#}5Y093~%u5~h`Cn4ah$%~gK7uU6h2lsy%62(E6~sd^8}*+JP;o42_3Y{+M?B7a*7 zWAeGVapUlc)9MCjUJdQR%`AI0NY@5vUPZbdGCbBGB7No!=Vjj0;uvt&M&h zZiL=j8HW!VdYkgu*?2RC<9;a+~fOXmCw$_yCsBo>Hir1rricYbux-eee0DKDm}-cM@K-Twl(L0V z7DFkxdt?{uce{pcp_Ija2b_>@&1YX?lDNmZESAS_8XDHGSp_*-R(o41o)R?2vZIm518w&k-gBUGKieXd+g;LA3sy&S0FGm(8cECshg?PcU=m+9c``RvdM$Gkhi`QVFl z^S4-7sn5_j+#m&tJD~VoVJ_PN#qVnH0=@%^-$e!gA~H2Bz~EcF2mkm0f>480hnN`VISy1%bo{S)1R2VHF3LC zUU$vS+np`ztirkJYpf&jGc-rZcSq3I8}`VlFcTMWpP|w9KFML+JLQk(-m+DFXLPvF zZ8&!3bMK0P=-pMgSeiEKQ5rsIaj)v_cHdIi34Ok)a|Cxn|6NhNFMTKU-xam2H<+TC zxF?@`cf?fESI{M#DIk3yq?z|R_r|)9Q{!b#!g@NirH8Wk-j~%wS?`XRIBZRNDC^x3 zGY5u+G<;V+_lg`Yj}=ahja_g$z?_F@No|U-)0aKMs8}Ofg1aaV64vtwf)w|PhXNo; zaj!%hHacu4+RZuM<@!{ zVLF?okLzT%2+UfVajnsjPD5-R_fjZ?d@t;!(Dy{lDef(Wz9(YLVY@~z?8^fIMUOug z3T5zwxyw!Fj03xXEUhNA5=5^(u zm^sKM>70;MY7+d&IonV9CRjKCYUZ}#hNKORGFjMAKo1~KwbEr+yxwPYc z^y5+HC%DQG4^;k-M}VI1pf)wE`z5|=dHBYxIc!S#-AyFNcr zk{pMBJYw1JlC<#S(V@qjS)sh>J`v?U6?wyB?~~^qTC>97llRG}Zl5!^wa+js{OKr| z+ltz!qughq)}GX>aAQ{J9$B+O=acs{5eC8KC)DaQQQd>VtnfdtOL{8J3TJg2K6kCp z43mQ6tpDUNJEEqfesp;7{JEjgw)o(XqhRdw6!Xzg7`uF7I7Oi$$qk%8e}-=xlXWM~ zobMk~EQO?QbgVdX?qpkbVDGcLm)`=qdOqSS{L<0We=CWQ#_wT-ppBUNyz--Pyt(pIc|6O(A}RZZ?~U z-(Yi-Xo*|NZPCu5tuxG)xY3oQtB9877SmXSxg8Gq#;Rx5XsoO)U1L>=b{gA6C8aKj zQDMVl7#&B-26-SwiFsOMGxAkOY+(KQN;Eo9?qUKdGIlg-7>gnaAESZ<88_G!pI+%5 z*=$A@e4TNNqoL!*PP^D7W0s7aP0c~_e;+hlt=5&UG_a{vQ zHqQyND17PA`SEk-$HoUw^`Aq?GkHXItawr4E|Kj&GfG6(wIiMj*h)hc%y3QfB!sYm7|CbvRqo`scbrZ%HD8S1z7Qb&A;xI&&U zm;=B=Islw_X?|v^pi8N1Qmkg0^WUUoykT9NR(Dp$6V4cq6o%$am;m$X^748KD{yr} z?#^a?TOsyI2pb|nNjOT};KjZSJkRltw8}m|)0E zTQk&17AGdGcXwRK6dUx$7^3b?*3EFb_Oh`YSvS!3-v(N`n+pHK|A~tBbZ$etxJk4E&QoIwSZEOD1XRV=M7oPTTGD#|kz4ai$a)FGUN2x{Qm zR6n0G781Ee>Cq?9qn<5gG3E4vr=*#~S%(E>YG--g`5rKO)mT_GHsq6IW_^jOX^J1< zI&b;S4~s{H4CzSg6=D4c%|GwD~&8 z?xZCzuV~dmKvk+mOUF@mI>rIl=#k?>lnaen8ls6pJJ(f}49V~Ub z2^oiArS`avpRNI9qyZhS0and-xQ#a{8qmQ)c8^=gqK3QJ8dZ}NfBe}1Dj$NKfuL&D z83>9aof|iWk@|P)k}c(-c=JkM2`ll1nZ?^qai_-VLF^nGM%`;gq8=T7X1F*qb~&}w zUFIwOPqXE@_cXB{pU&ld@-oi6NB zfAO4_E$dKf>jMF1kCDM)j*pp4!o!hsC(gIkS5O=p9=Le2tzqrq`qx=IT-$5SB^|Zr zl5>8o(;jsXuxqiLObe0cuDbwn8z~ImCtoC+#jaq+(Ao?6C@+6n%(QHlKMf&}ltvs5 zFK!JYMc)8)jplEp+pLq^D~UjPA*2<77D6^7i6lgv(r1Z1e%BgD@7U7Vj2h6fIsf97 zRs>D<09Pq8HX)@pBV(!@PfQnz&4HpKcQpr!X5gBO1Ze1H5GN{EV@2+2360^jxHSai z(xqQ(h`Oc7U9IRDTQrw`>%)Ri*Lds0JgCTB>k%275lzq*TCKacwopennr-XY5Jt$q zzntu@7$JT^+~H7Kv-UTU&4aI~LTs_~tEb}I zn!Ult?wf&nXJFj(?Of6@<~E?r6e;#Pt|CemTrK*fa&z9c;LP#O?>wfHH?^fN!8TbB zZ>^|RRd*I$UhKuQoS{1IZC>W7HsrKJQMquiYw**EVO#654XLrz>!+P!$OV_{oHtv& zsZ=GKed~ME{%h`o{HdfV<)P@j;r3QEDtzBxc4ZtkPH^c@(ExSUiNSclwI172lgOy? zbD*2d|5cuR2~xj?^GMl~kKVaGabwo_$2Ats@9u|_rc@*E#_qfuP?+lW-Ocws*OCo7 zD)Y=LdE0e7e>n4;pO`Xw5glVwI4U%0RVRNaNt3i#69cw96ER->9-x>gs}ZhJ&vzxA zRRuZ2_Iu^`VNY7TZF^_UJ}8#+<$IGlv+!N924*Q*D!N=f_a&Xid}rD>)VCAOWxAtU zbLnAESF*ACD`)!tbkcdzcn{T}x3VVmg&A}Il$!K~Rg-juQTd_iSx&U?rZ82$`YT6o zGO0UZjy@USR+p;vt;aT1u-#@!DN~#u%y6|@yl4}05nGtPhQe|B#-(~bg~7b(`e!C) zm!|RVNvW_@)5WZy(#4mxR5}L+Mx|%T+Yl5s#+O!Mn|ZRVjk|(2HXcQ_H0>W{@%=Dv zxy7Z~X)hPMk`^zO&5n^1z|sDG&bad}N#n)Q;o|s-ku$^W56NbdKnAwu4nCeF zdX@jY_J*<0m|<5ysPo>iqj(a66qN?I#*V!pDZ%9p-2yDB=m zI*+T)y{0;cRh|87SH}`D6{^&mRTZjyS-V2jd0tnAED=+oO2u1Mp~{!FD^#85bydg` z$$w9hSYAoL<+s=9iIn2&#xJaV71Ue)usH4N&}Vw-fO={7O1&h4r9S)d9be=8=%dz~ z>(9BMT<*=a!8mJi9#|2We7||h*0?TX9lJOVsLvcSPucJ{xTkFC8#DXNQ#S2MW{>&F zw!A6h&ox`h_e1)5-kxi6<{xzrn)7#~h1tlttz-K5L=zG>3+1!TeHb}a9fEuBu{K~* z+3f3_QZd2zxg)_0^=h|~v-OItfBP2s8<=BC8r6;=`djRAU}vT$0-mhaHY8msGas&8 zC3CH6?y3q4TmiV79^H&{EVnf|WKQ;|;wEe?c7)sgidI#c{n-=4P4>KA2aQnLRBujB zl%frrI60BcHb;TDL~--Iukxxu#yF|{v&ie>BAiI-0CBUu?-30VaVCwVpud?ToMVPQ z0~ev=hluOl zLqI>(IFv{WuiZkgEWP#=QZ@|PJq_E8w915m0OWTlt>mWGJ_Nb3Umygzl~z*JdY_Y4 zb02x&Zl#s4pzi~blcJ^voV1dH{sE+Q0IqOje>n3*gc-;x8V0KqjubGCvqqaYy@`wC zgXHIM!zRIv5!x9(^u-Set9oMc`pn$)VOF=s9MYKM7xs?~9kADZ3^0tPOjvK77+{TK z&9S6*tUFMj>sIRw)YoWlFsv(3pS!^z#kpl4TSMJoC}mKYvwa;87+84xdGgt#@gv;_ z3ScN=xqp3$?P9r7p)mz_py38Q-@(G8p$1~%QO82-BXkrN+Pdlv<)rs; zZYLf+I=M<;uIe47KAf}G@1*$d;V$dWLW)u!#+`*N7&&3-BRFlf+WDi3jJ#qV$ysYs zvO?yO&DPwP6l5O3DQl}CL&nE)d%D-VpS+8iOoJ?gzyZxZhGo$G z_Eusbb0$JE{4&$7$TfQ+xafaxgJBO|thlceUk29sLvzG^FgCU1yk4&copAyw`h5`J z+kSufFdVP%zAqFOMnUQN%*~q&gj+LsL0mX{)|hr7BOH26PgoN*Di3+d;IQ>zQ3~?I zxY{u-kRoxCOYHlXlb^!4Rc9%bU~UP`#Y!(1ml)$s^m2)Bdt5Z2e==No8aDOz?InVXI>U0p6;a!y!8d}pLy!l_(i zlN6;~+G6eEZ8Z2xyZ0CiSmL(lvzOyt7;Li!Hs&4va;ReLlMjlQ-Aa}e6fbYFI)oHe zy^Id>f(u&q1*%TuFu=lpcD{Ild9m9U9MV^faW0o`c3lLxYUZ_NuxG+lgb8Q@ zL)fvhpgWai?NhxXD>-?e^24hz$;JWW)Flf>WL)#iVPD7*D$_t^CY%>iF4pznM7ve_ zq^QgU&Xx)ho0DtaB*w~5mMddM8MC`FS?(K4?bAph2SyA~ovCEm(l)Wo<><8&4W&-KP!1B%A# zCD4iBBtg#&C&{bKUDl(M6m(|s=u~5{XPnQJY-1$6^DJ_;YphdaZpL=>T zQV?8V7^=1yuP$X?wzbt5S)#U5+a|{QEtaC&R+9(o4{D>m`-tE++WRfn(Kg!qEw|nz z#bCST)|*P%_2wj=_1bW2jJ&;JJFKf2u-n$s1?*NW*PL8xhwiqL;6iu1 zT9Tq7-{Wejl&$6WP)m;8Lul_cnIrq^mEw4}7;|ghvWa+SM9D5QVN%{1QM6)Q^VSy4 zBg$5PC3!-7!y=i1yExzKRuka)2cpd1h^&RU@P>aNqAvw|KzwH7F7c2l!^UzB-V-*K zGu{)nLN=E3E51S`sn9FFLQ2}WEwA_rH7n+|tB??V|7Jv|$wU`B|Mx_hAHj6|aG`vl znqFP7($Q-E#>ArbI@mE>~;HY+h179AVI5=`yyIG-mSTWhp?Cb<(4-7o^`GjWRz* zYkFO4(k%&lJl7=j<&>Gb(H`n4LHqt_)Sxp77j^i9IFFd_AcQa)gQTgkLK2hrgHekW z2peGdgORa&)2F<|OToHy*l@wYX@R79>!KWzM6~|4q8!>%Y0iftY*{2|Ehg3{N$c-G zl21Pr;qc|&^67^nj9Z3iJE*=mAN&k$cN^VjbT3r1{R=Dt%d42Mybuor^^4O&-uS$j z2*tQ0d?#C7)zn5ThLCNCjadAu7iJr=_*E~=BoXFUy)Y|jh51zpvwSHCFbtlyJUi0c zO(&POJQS;PG#N&b-+aI}(Y=LlKPjgTx$(8KPptb`6n`4GhFUvC^NDtfib&mJHhDxJ zmTy8XU%gkf;S z&&rWS8*~$s_;Wa5;Z)`KN#@vtK_p5xATb$i^KC%l&qa-P9NB=xpNlqkn>{xngY&sB zFx2**GY_uQ!V?l59RKZ3Qv;1<}4{>dnIE7b8}CmkqBhwz329Fur0_Kn>^= z;RaZSh5hDqfju89Z*$I5;uvl|TojnQb&R6fF$S&&;b0%4l6t&@uT^@sxj8-WC^_{}K(9kk-GarW|q9dE~F{$42zD9%PqIi`@nXU8Gu z^!3fC&diO@>Fb-(hW%oRlCb2P(Y>cqPG7$f5m~v~>B~K=a{BtssP4XMr?20V(-*h} z5NECPyHWfPY0>_|pgDu_ZE|}?xv!`bW%IjH=RsF#&EUTq z-T#!Uw1S!ay(sssP-!0;%{{c04x!QhezZI^+CNaGFPTc?Q~3K){J&7?lZDD#RJWs* z^CuU_>0Upi=&CQx%rBMjvb3F_-t1adOaJ|TxlK}_zh7>X6yWcd+k_UY`-6x8$i5?d zI5YRqwkd=&`@?dZLO8R3q&A&1Z6XZWA4l>3N}C?%up@1F!(dgi+@?EfiWKl4mz#oF zGRe?A(#L;XZVJaUb^jzHys>YJk1*yQ+NOjEWB;_=ln`O;pQ$NNnWjMOPontSH02Q| zQ%1{MrXx@8s@IMNt9tODy~gboCk1Yh1~HQk|C6#qr0#S6Bx>(*V#e7H$-_@LF;n=i z|1BcOv2TYD2Id~xc7$MH|1zpO=Eg<{2KJ}4BiK9tQd5=hPTBr%xlh0vcFy*LHz4!@ zmKhuRr>4p$NA5OX=1z;#FE1M7xs<`Hc__1?#ffV&T@y^N`7QKgA-Pyvqbx=`pdagj zu`@!?bGZA`3`ombGFT%{puF8f4urAESpBw`1{<&Ozf9%IR!s*g_ z77Mm`oqn$ma9vC}_$_!)9~}m*XVGk-Jz#J<_pqCVGGUR}9CeFUgg&tpb;8{qnuo&A zwg*Tp6nwUw8(1A9nX8Wuuxkh?yNse61La!le7hsmnzeAYBh*^w+Z{N~+46NA*U_`f z92)UrW2Rs_PEFg$sYlVQZgQJ5d!p_WDX9*t8=N940>{?$UQfw24M#AvkjZXl3)^cn zG}5*u-kk*)uR_`i$W_J2F-+4Egs-=-KA{Op!Rsw7Ph5%yZDDod7Aq|Fw&r%og}hN& zZJZnbC<%|?*EZr`w&Qy3b8#lVojIgTr;yuKhhh(|=sEX5(c!EkdUhvq%GR53ae6>a zdQ#DC{^ZH(=r)S1(l?=ho%*)HR(x2MH8l8&zL|d+C0mCaLbyTv8*)hLUNiS4>rJU1 z>K=1US-+-~w5^DRy9by4!K9<&1B)+Q?aI(@@}x2HG3sOCbr zl62aV(wM*?5*Sy9R0VB)MpLNzBU3$p5hvSfHhjb(U&>e1BMOPAX>~F2k0{@o@^VSw zEPQ3kD<>H)JkryTvutfj%{~>87G#2(jUio0^>=5D~U_uGO)omn3w550y1kQ z$c%Z1-I;lHQUM|Ig`{bE?xmT9`8kEV!+;^{Sb8OnC zHt(;LlPZ}_3rr<SeBgdbLjxP(of39_sz#NUkNQ-%YP=3?qVda`ghRf+SQMFL2 zzY&GBP*w?xA{pLi)*fNWg;7u>D-w%QK+NT z2){FJqL@dikM2~Pm>5Xq3f9slIJndvnI<$+`P*7UlxRCu63@N232D-$cu5UaGCb^F z%4_9q6LVb(e?*uUe&(OAwnFbPBj%y15wn8euW5}=fD02r#vvjxLdK0@Mwg9>)S;Jy zHf{^=2IUN^N&@HKrI1KelApC=(I^lSQI&X`ibZo@vXL7_6Hmj~a1pV>1|#ZHV55fO z2KV;qC8A#VP(=ABlC5Q^F&8_>JaBO_6zynTadSD3QIlgT#sGx|b*Ml`cdZV;a|`_L zq-%NiSk-v&$D?HPiuxEWw0me|bnraB+~fVvUMvoe5A_p_xqo!H+K7H{(z9yLvzNiz zP2n11hPic9d5; zvWN0MV(R82d;H8HYYYAgXZ*`;!D~nM@LRh2atsgsJY%-R81~<*z)+2Wtknu-gpn;+n%YN9*_I0NAK&`Q|Micv`!- z=4}HhJPKl2W}CP7I|xQTZH-R~f>9jvu{7+0H0-LhPiqauX*1K>=nK$3t(8-ETQM0; zw(dNU0-jKDtv$o8WhB~CEdxKD=u9@Cge9O2Tw5qg8@RU6GHu}6LdyhD-4LBdI*^4O z^06ttN7Yh-DsPGnrmRwMcoWdz9Ho-t)#ms>_vwNO`(-Y&j~8ytOfJlq=C3aHPF=xV z$3*(mox<6Pg_((=ffaJ;<u%n|CzqG3N)|?#n=3@LaYKzZMU)$}&b?WNfFCF=HlxHM=!4 zCWVac1f#-2sZhi&0Fk<@sm{*Z@Lz67M#gY(S0JgX?Q*E7yo2N}?#Ok}VSupqfONjB zqFUBs<=`$1CF10zqI&{Wb;%xwh|D{v?!lU2r=dz>A25>}3PEyZELuTKBWqtErjfPJ zMJ=%Y2>UP|(0y7YJ3v{(oAV0xZO(*ThMab-r28I&l4ffuR|Ibc&&Lq}_W+&k1Mc{ZU%}j!242e9;GR%X8G7AA5FcBXOat#J>@?~N97$~A>GXVIxV&Qo zxb<2frKlf=11XtV9S%J$8^Oc$w63nP{E$Wc9LEsQE%wDC{47>f!+gAcEeW2m-5c)tybjDNU;dt0c4GARrVRv9iioSff$(*PuBcDBd;7Okoem^`o z1VQ7r@n~kj+PrDFJle3ss0I8V6e;BRnreZJ@WMw5AqA1gomwD8QIDe*Bw(bFo5wdi z?A#mt@$TcD4;isC4i-<|jaXUNiYHw^kfQ7-omg4diYE~(sU+h%F%UnoTqSuuT-KfB zrA0olh;^eFa3jjPQ4BDmY>PA!1~!9UU|dH0f?%NgF)Pf*&tez@hyM=?Gj*i7!-0vC zf?+4jyrTn$v9gfT#0NuW{g2$C(j+^CPX@wLnkR$fiGTHZlvVTGj6OPq2r&9ai-BtNEzjtOQc$HP_nVq zt#^eW1>vXNv`z}bPXlmm*$d`g_UTQJx&hhf1nKFnM_j>Jc8}7-1?-w#yfrP%RxDUn z+um0q8_Q~YG!!hW?NJJrv0OF=Nbq7jwBr7W43P4U5Tqb=(d{xwLFyua_qGj9wBh3R zLDz;R*M^Hb2F(5`8xxu3QhaLF{S%oe?o#Lr#bmkU_D{T{xJv}%u*Ee~+@+qAuDE7b z+@)P7T+4{rayiwq>ittTR-Bg0p(w>^xg1)iI4ze$%UUSva%fqLE9x>W)BY)|I4;k{ zr`Om&k&ObM3k51f%X4o3#5)Rnj&KgPZLJje-0l(AwpLf*b9+vi#acEdgv;}6*!*J6 zPxcjyHF8nj^PxP2XnEc()_6yG&ll`|jTGfQ@Ahj-S!3zv*{|Ji8b}D2ac%(jmu>hb z%mtY?WFb~=hyoil9B_PmXFzA+5{E$9aTmXW6cre!!Oxol2;72i1v|pvBwz~Q9P+T) zbREWB>#7M5KjDIuApUxLGekl^eDj(@4iG|~g_q3~D$-6xCPGCN;$;F9eamZwc$ol1 zU%>Vlhu}}aHt^onB19R_4JlUkPk3!ur54J{qm3t>(+cz`Ytn^{B1Kt~d-prBA@s{M zOYSa<*Izye1s0am&OlJ{T&6?i70+eb1>?%bisv%TkkI-z8xzmvnpudTp4JL5U>mQv zF4qEW#dWzB7^Ao@*I*2HI?yJr%gpNuE?~>)q@0;hj$*saxR^9hrkoj&<#m0Xjfw5@ zqIGn#=e5Cm%bwQ;t|+?8i-Dq|yS!NMHIbsbyohjrO)K+kOn8@hVv4-BdSD9ghQcwF z7VG%s-d%7CB=_yp3-ch7n%!bG2!SjY*!KZ&Zo)szRfeHp*XGLAZrgbzs_L|I-l2Aq zqLuR;eOaC=z|1@$O@wEkjR`RGHXNxQtlrxM-Jm^FVZRwohcF4`i~{p1H+l~E!O(^9 zzRm5WphUN#+xl)ROdwc6c;=5At;r8GQsr&i2=f1o8p5HwxU+TlL zcho&xeb4`0-1DP&po;zBJEQmquoXLEY!RedLraV@Tw#?4&#a{Y+X$RY>WnS52(pQL zXSAu;zr{f8ozcTjr|b~FFCwIeHxTo7i0)yP9pbyn#*;Q9wzuD(HW2&24J+Fb{*YC>L z{kyMA>i*q7;{F}GFs%yR?YsG{J9%vJraL9XD*-Zh<;6zj zGd~4)W#a}p%)L#i4+c!Hjhe7Rf<;t#q3;B54>xDk&D`9!9_w6Il4?{mS@MUH{7h-Q zbbVq0Pi^c&2pclJVD57pifuEcQTt-hK3C6J0Ix1{d0TX;JPuMA0s*)HS9E6C)oN}n zJ5nW|b?=MKKBusidNx`tJ})pHi;vjy20AbG+#YS@k0y;?d^~hsx)}dKv7D>tIgce5 zUfQdTwWSkbu!ij8n2b5B@rGiPeRe{R%8+wq;_jyCZ)0?LVP@N z(p~Fo*E$|5bB?T3Q0@@z(9{g~eG^fV_Ci$HM{ew?kyf8jG)<1S}GzCw# z?A3+gb3+26ju_pWtG^n*P&}_YP63#8B^xSVU+4$HY=~v?GMb|o2M6_0PEcl*A6YEy zbyxsxtb8#vd}eq|6{*YjB-<x;HWM^fb!861C=V{^{?q6V1 zn^J)luY5gru9Cx5WR>gHWfigI=RX!D`Q;*+-<>LK`D0?!Q z(#xu43L63_VA;0!L4_(C2dUDCc{Uu>* zXcvj*p08xlQbI_k8nBQ#AI z=p9^<*o+(mY>3VII}~*kwjnl$5=xPA18z#0W-Q4X?>PXQK-JH~IHFT-@ zRy+sSm+Pm+o!#cJHipjDKu1!rHJEnmN^mPjuQqrsZQjl;ZWivr}MU}5aPWY7z1YHsHmq97Fz`!Jns#3B;$KS(kkMA-A$gH)=`6SGU8AJOw_oZI_=r1fA>cMtkJMXyDI0$K$ky%Vq%fmH-ecTP@Asau9BdG2 z9dns5oE3%8JOiCNR9nZs$3idb*!Nf%B|7#!Mzjwb-{s)FXbTGW zzTk_{0%z`PvPVRjSjWBhZ8wG?uvEvr_w^p}z6cLyc9^3LDTW7eBGHW_yXl8BkJuYW zjpB##Q9xzd>&)X06U1I;9~-dGhY3Q8GLLgz?yfT*%M6sSGarMvlmd5; z`Ro(5l|pED>Xt_O@d?L9d#CwCxXDm?PoNaW3|(5#&saXmWwqR6?PZasV5hXrE~CI@ z!~En7hpG;oE0oFEm;!m}P|L=3l$_Xm&HivGC-(Kbc*yo%v!6llj*o_L0@Bs66wVNM z6Ji67$R{#SSvE*xoZt-T0@XDjGN*_wJ7~lGl(!rP4Ut-F`R*eGU7cCLR)za;77`%q zs8JVK1aYcLR5&LbP(&O~x$$N(Wln9i;$SglPWAQ~I3JK<^4ZfE={$*@QEIbOtK?Y) z(_O1z!MdCd1&c?gw;Ed>!Pn47r?KS`Gw=>Ro4H__A+>k5VP|p$W`HJRZ?rC!Rm#Xv zdio8$bc;}*nC^JBj~RmHM0v9#a}fi*10*CBSNKKsBxN8;{!YxI+4ws#i)N!cG1ZcD zpkijs)>7+=VndG^768NO3d-K(lVB*0x?w>I7K}F8%V<)3HoDnfeUO3$qpUKXvHm}o zGIJ3|S^fSPY57Uw&7~`|gac*tFArW>wE{_>FJ2-l6@ZO8&&%g7$8X7UbXu`xaRyGZ z;h1GBBk9tGY7LTbOk`-rUhhJuuYtWlHG9*^E zIWo+>5Km{j4>>tdxcdc8>4{?)hC_62;FZQZr4RE8@sB zk(=_hb?1csk!tI`m9tmyu(q}JhlJTlYJ1((76p1ezLD*I*08x^`(3ge)<|`xIG{ba z_0%$n6DFk_0fpEUT4HhDcW{@^D);pExE2gcFDC(_zN?+S>HD2x9lIO zZQg4+`_{TAUE93Va`wfPgY4hml`MW>47bhz z6PS}2LeiN;PY+n;3Wic6Pn^m#GPn4^eKqoAeI5$CxKgH^&qQJ5x%XHNLhF1UN2q3| z7N2Qn(kPtF8gv?b7U)~IeYzbf^_ifdeZJprUimLk^zk@*^1{Gp{AMyE_>C|>2Koclh5tXygf?(xGjlT2kp<~kNtx-fe>Q$1!m~L($%X9 zi+s3XN$G}&V@l>I4mw>pM;Vz;EGC7)`J1;FX0BadEF3#>02pf32$#E~qqRTGKIeyLpB9 zfC~nz?ndd51y1DVRahGHOVpFKr-Ct?Fja@pG9U*{FWi_})QW*J<)BG?OvP~4;O4}Z zh|mHf;Ih-AE1_N&rlB*vc$_Nf&%vsSm85xHjV4*@+JMr)OiZ}Red3DnJtjTJ5{1WP zGXl=sb(SYycc)9FrIppu71Hd4PD!|)t6d2SOYy>2f;M7qr?B;?F4ZF`SL8dYN8*<* z7yvHmj>E86UD5~t=PA#iZV{D_NR?$)8;}!TCb~`xeH$8eZkmqcOI269EV0%Kqm`{W zX#01D?=y=fwTQqy5|eqP_r}C+1DGgRU=|PNb_A*6LwIpxUIBZp38FyQ7l1ObsH=oO zRd2|a`j*7RNl-bQ_sxYF2^LWXaoDs{xj1lHfqjwXek{!u>dF>m_MT`mm2 z>4J`83+Ic45u#6wKn?Q6{&Qm^!=r}^Bj*OsT+~tSp#l^Ngc3{&XGYGBjFE5b{2^29 z^6v`gPZWr7sF1a|%Z!{M5TYsY#K_n=6?Wo$F)8#HF7y|POnC83f3a}kViDJu;euKw z2bnYdBWH()dMTeW3j|XiIPnS}xHSVsB>&J3$4ioOid z;_%>@8dUx@2=l1m8KTmTUKk!6;TQZcK{$$+4>_Wv!%tr%7cUD#{bz|YJqmdB8eE}c z2Jsd;t6IZ~(TfA4VHB+{ifscoZ*Q7#lf%?f|`fNns`ngXYZKaQOT=wKfr#&KEC>toUGh;85Yx zsbQYe(dR6;`o$1Mx*i-$XQM!5g^n(_vv6+se6gtKApaCWqN8#>NgN6c{THb zn=BZ-W07ipMTOA-(1J$LO(sfkB;;m`Hml%bJ z5j4tCE9Y{NXacG#kmPA#tTgMOWY86rQHxze{8UV20$Mx=mJyL2D2q0k$x3Pj&CJ>3 zwArN^qRc7gIQceUP?Il8^GG>c>uwoZfFUzUC|pgRrh3E&U^Zf|S_0Rf>jGmzgwC|Q zyu&I?pc!vU4Nep=AlH;dC<63wnzYm?TW!M+m)lj?JhI;jk#=HMpz*h>tBNq-j>UTR zV5ZBRvLE88LI@f=I3ePvh1EEmIpvSu_0vA=wShTwR;8czVPB@#V?EnQ|r)QI2Yg2Wp3 z7EX^cZo|p3o#P~HFQgX6FKDZ6GR`d_!A#Nou?Qaz62ewip4!A=Mc#pxr>NRO0(7Bv zwB%q%`*1j7(r)cxU>4mwb_EXu?>0>Xu%dW^vlsxi+_HC0 z^MU);u6=oc_lngJK^CS?0?z`5BteW znP*pH|GmfVi2ZJRRjz)8?Ca3%l4C!p>Kr_z*?;e`irQO9_REg_7Lxt4W50!DzwFr0 z`P+Er%Bt+Ylj@88tJhzLd*hD%=5TMKg8fwuAP4N9aAVgV)=fC}+rzpE*guc_umii6 zd27@?S$pg%QqbDm4;$Aq^Is5f^$TXQdf}=<-iwNqkPhaqagrqPOLH(cLpYaqGm2GM zML*a>HE#uJ57lPs?NPlwRGT4Gi-rM*YV&xvtfWKjNL;%iqf9q**UZ+r+?0x8tP{I= z*AE=M$@b6dP@Au!0py?`-sbwj9^Adn^@BaQdz%{uU?ARNC%lply`nAs+VwB*{8y;H z=CWIE7&NH*x5F?nMO4(D4AlO%8wRBK__iAcq!`4v+u8%***|+*va^;wn>}*!M>=}pD1dC51=rfKotF{t%Mxo>*WEocrvvZ#h1(`vySa{Ywd`KgQm*?AgJk;+Zl^|N zSTtZR_?>M7Fb#>jA`G^7Wf+T;$s6D&{xDA&4Jt}GW7@#ZTkBU5lox-r;1Ou`hPuI-7cfQ1+TjaaW0=&86_)7;9depSnU%3yo)U`U88N z?mzK4dtL+duZRH}cZ#oD#(e8)$(VnK5odqWdK0U;@@<*NK`dw6AYQ+b%Y>9Pq>NQMJY|OKG__LG|BPRz54) zWQSc&SuqXQ9uQ5(w)(52a5|XUTCAbQ?`o9b#-?itw<=q`SUZLuuUzxlkld?(_y&)# z2g)l#jj&qWN^OYC6U6bfF4YKJ>&vpH?b(rRTS0KFjP_hgwpzoUH(0V%@(P4q$={Q- zo}6AhGk?vGr!@`v<;yXD^(uBmX2IW5bSYhk&+4$-EW5Z`HVG|jQY$CxdXri?ok`Y* z^4)+1FJ_kdxK(M|M}uk($||U6G6-Le`z%un@a6c~^KjDO^I(_XU`&Yoq6=MW(k!*u zjp!=ZZdi)u_pvXvCG~Ek=l@Msm)$IF?1TKaw4NwG_om?6S9K$mF$AJ z;t;wtKX*JaUIycX=ZA*J-!xY2cb)=ViQyiAOT-zx3AojMd2wOlirMz*z?Mr`NU}nk zl`o~N9XXhF>(Mm9k#o=VpBWiS5r!0(%G^@RfD89Ltr*Rrd8z2? z`Lh@L$40mStE8Cv)>V#cakn?J*V-2MNr%si6EBJj6VBGh7~Jod!Tqk<2KTO)`%Dk# z|3Q>&UwyxnKa%R-)w6nuIC>XfI3YP{>fNt;Ke~FoSFb|;zvPmZVtU7wPrG?kyz$jd zJ7830aJBnH?gRb*A=~}$vj4vb|Gyx@D~^$|{^H5uv2g>^$hbolU7KEX5NK}b`N3R0 zUNoNlX4&3M;-ZiFiXA#mMeD9h8LeJ05_wP(xo35WbTX5dZ;zkBoa#)AR^=-%d}-gF z>Ksn`*7ofQW7;j+@_&bOhg!=*a2;*qbjDLFgRj=UHS@X3t%5pfOX~BLt0+#P1v+c4 z3i9cqYv%BE+@GrB3K?A`A2NM;OnrHH^}ej4W2#wm2~knanmKA!bA^m|UCk;w`Gut3 ztt0ZAQ(Osa3j;~nonG*VSFY?McP#Gi%R6$;`lTU@&G}!WJNM4oubbN}_r`S@>!`(H zcYVe_#W1%av)g3gc)T%l(EP+eH*o<;XkZMnkf>~L6F*t)uMJHW~U z!;x0P)=sV+_6fSghL=L&%~|s*mKqb7O&z{A4OE*96hgb@7StKa*L7-V@IaD{YA086 zA^O55JOH*8PE`hOPaR|hs&We26sYQwb5m%QoPsvds-mei-M$&4c5IHOXN^UdHQSh; zn7q!ik0bIBq03la;IV<>;LOV`>C9F9@xoEe0gv9`@AXhR*KZKD(TwpOqV&yMtYy3P zB-)H+`zcd8)!c%Y$RmYQ^S5+6aoZU1W3(}E3uo=6H7E;5tMM=^VQMjQ z&1g$#vF;VOIIJ#w+<0=y?;I=2vdfw#DPxT(ZyIA;Vq<5N zC$CVXf*WrOPDHu^+!maO*5luVW@mKYIqs0=3!^ z8l%g(9l;Am?nyiF71NNzM4^Yc80H32qTAE3#bHfy2eunw+2FyqmW?=TN#Gr`tR=y2 zCnKaNWVf^I$C6-Q=AbP^^0}|!a56}<%ys_(M%n|xD!(veOh=7DpsZ`O2+;1qdj9x@ zgE7EyZM7x=9+}db1RQYHuqFWq+yErS06gFZpi&l`=l}yyyuf7OP^QmTQv!deq1QMd zm|OkB@gXycNg(itodW_Xy6|ulC*a0wMOy1{&pw}m2Zs;d8z}r_?Kh; zIi`9=V(<3vbuwe`_V0BH)ZXpi>l7#{_;{~Vph{Uj-ird2r<%cNyq|7Od8*N^W<;8P zbUjBtr1bt!qS}4G>p9-Ry!&0xk)p)=UC$|HOT3?+)A&G=aIcE{7$4!nMC(Q4tWz$R zD%i<_{BZn1=Q=}*k{{f9(DV%{N`CM#m4xHiF&xi4W;rgEa2$6kd5>W%08}JyPh0)? z@G`n=oRF1fKI)oD3Nnv6#*(72M`7$Bg<*5>Wae6g`-op`x&y_udMWv{KbF{~7tQFm zU8@Q^JAx-0HW{QeV@EJRP{@tT9W8^emo+BvXph#IV89`zS!03$kf!CgY2r-}-J#zm znQ8WrYqpI#J>;5gqfQUe?5&0@y?0_Izs))WMtLI8QD2>Kew)05eJAjcl#5%P5~pgr zxGkT!$xZ!E1-csXr=0ZhPNa}Nxp3AA^$|ZSTsY5o2dI=|DX$@PIuO#pJnj5mc?Y4> zsPRV(Au^tcw-Gg1vlRx+%3bp~4T0!tHlqSnbtwn)#lvWO@L z(z1h|%ATBI(~4#@}i&2E9i zJBoTUXTFM}S|>=ww}9E!R5&A_O2${HZY$M&OOSJ+D86N@g+${kXuJhTG)n`N#1{;W zb6j6m&{z+R7Xl3-Bfb!52pRDOXgpx*0rKG$bSEa~ex>SHZKcAC06F&-j&N?WG-uAH z!}`817WCnj&{9DkUU7J-yrYCGotxYs0{U=j1$XYcxSfhlId^VSkePDs+@v5gg*&(A zQqUgq*{k%;9j-OWPX(`r3g)4FHFO2Y5!tJBMHACoeSY0c=G|;IHBCtw%rKd19cb*u zUS#?5z+Eg~1mlQ)42-fSWiPsVSd+3B-F#zB%3gHq7gDI37v1_rDZ83@(QN?hHO1Vx z(+wcGY5$E-u2wNOoOhFirbWy`(6Dn@#{UaOdS0yP|2K0TzCZ7WR> zd`?B?Lq*hzc{f4uj*85?Fb<@s$h-^Vpp>o1JYgJcMacZN*FAyM$5~{}WB-w&B5!jO z2r1EK0+F3#y=K-D6G(gEobw?HYZ)!5c~6r{p-GxrOKt|?9h6FLb6c;rFWuSZmb@l& zgIVv9g6dM}G0mh)ZbGToGV#_MySas?A!;|bq$vHCn@~tm`YpG)t=F#a_8YOeg%T~k z9r&ohciT-Uyraz9Y;HB7)Jrnnf$8R&6AC$@`3^Uskb>qr+=N03n(x4bQ>w3C)AD!U zz3SsTO8D+jYfZi1?NlG{DB-)E>Z{k(`@JiuK3>A`?{%t=6lA{FsXkJW`Ce2Xp_{2_ zQ$F{7(Oph`_%`cH7Vmu8BzIsX*;s#H#N_9a>@B}9V)pAZ#WV}@@Xl1M{T@&YePJWP z*K1}aiIR11q5l05TDBQ2+mNq&CCdCDYE~h>>6P3o5ugao6fDEm+}|Kby!p;pu_|e) z8Z%asto%jQ*s+pi>92iIV?OsoQD(29Nk5Qi&~`P>CHcDdM49)w;^1xWJ(0l`&E*mm z_ueQzY6y~I`%2OVEhh=b-WxU9;O`{)^u5uRLq0QYdT-RH{c@aZ%Gdo!l=&%Fh`~!;K{0* zx=xus9BnrNru8}0J{;}YYxa~)DDK>kN9fo!jwLPSbxT}f8 zlf18r@*A`rur)w?i>ejdCaG_d=x_Iy8oa6+jF=i=e*cpZ3&-zhOJFGjI3!xW<*0Cy z+xNI~(cvWbA22KUCX{&YV-Z+Ecd^*CrGQ4HFMTOeA0Lah?{lS~)k$)qC6#~@`$WXi zztoHr(kCLqa%i-+ zrznRnL~)0st1&>*e=5RXh;WCnrLuG*$z*CPOzMjf;B59KhZsuwPc?AA7_sbiZ%t;i z?u~P8`MNJhnV)rRU?Y+Ha>PNAsJ4j>U-A7;iXl$Ys%nx*#aANGheVYmpME9UV5>lq zLcS82wWTQW@~cs7=O$9rk7S+uR9yLL1TeUzB(8ilYH0=XDbBU$>wY21{1TYY`#5N^ z<}~G#FZn`R;2oXpvGo)Li)4?jOzsyVVBpk{b~WT{5wLkGfE2}(wCo{C-mgUjFmP`v z{%a8tk?g0u{6%~s-AmP+r2kYk|HX*Kr~Onl|HX*a=aU9qrtVjw4EJbkXa|hlO353j zaM&_81*WP$=b2~UVw@Ar6~)kiZA6_a_A61tdcX}WkWAgLM)7X~;rvJ;W$gnu%w?e` zRz_uU<}f;B^+#P$rm6ssi1x2Wb*9luB746Y<#+qHG~`#Kz5$2kOwZT-T9o@{Ky!BC zru{>U=4>A#B)=Zj9Zk~D(0G3rH0Pw%7M;tl`;92~TUqYfLd zgQf8gZN)t>P453;?@hqtx~@CVdR2uY@W8boa49Y*7DYi^!9^rRQX&b0ph$65fz&Qh zAPAC>K!RcslBhVAH^q*(*oxyNj-A+UM{&BxcE;^?XW~o}cb0a#ovo8jrqi8d(vwL~ zPclg-J=2-=mznvUd(OS@)q;f*l}Wyt@6#vZzPk6^bI;xH`JZ!sJt}NB#=U2n{BIF-d3o`qGjqklZ%5gGOKUfTS8Z#qf5{f-BW83R zZhzVwS8z!C(8eBXlzacrTdTCSpCSz{T~uP zdFaXzZYfyJ$&zQgRtR6UU(L$99mg?sQ8w6C8I1&%A*{8elIGx(*n{E zquSq#mhbex(t_WM`k%5Epx-I{ew6>i(1N_Rz&>gV^dl|!g9tD1>2I{)f0PzH=p^4( zEc{WF{g1R@Pq_g(VI45y5W~C_zNBXNP3;KHkaN}_MR>8-R^d97ByQ|2Ni+T^!jHXn z1QCS_|8tc8UqUn5tQq!ES=Ns<(C6pIkEdfpND1?tQq!Eo1q_R#{ZTyL%-3CKa*xW?s{WR zvGA8s_OEEhgJlD0gdrrGS@|M9PaMF>MQ|IxDa+Ok3_o=#^9aH|uV#97;(X{GISc+} zRB&4pgA6yUBnF-Qk1~Jd2zzyd{otg`2&))>T<0A(vfvydFm@J5-F6M_msxCh@r>j&=lxYmRwEMJ0F!K)F{h;AY>K)grMoZ`K78;6(#= zSiN-^nvdb^;{P$0c@=h^nA_XtbFQ<9s~w!oc?ra4FsGPY2ZwD-@l@KuLHv@-$WNWz zvK}v|L_F01khUhQi9aZu7o{-0a+u(#DIOnjQ8b2?84kXjCJH7vHc*rIek}eoI=OR= zIVMQVBeKzxX(pNnS7Y_9YObk|k|yYKV1q*db@iAm>Hh9lkK-i&Y>e*;H zfT!Vwwo7-XPFCI@RN5&q5@Cy`J|B}-kYNjmN&8{KLm z^-};OHwgoBKN;&fWj%ynr=iWw`f2DKYcIi|UA)pV^NP8p7KMrgZ>dWIWJxCF(z$Z= za(+=5drQ0S2wTH9`dUYF@i&y_-C>4EE=#bp9zz>B+UNgJbMwlsct~-kaR~a|h zMr*?z^*LBga#enx=nDk7_p}TwEF;PFjT3UxH!WqV;;xhF=~glo+0RavSfu;=-TbfWm7 z+EQB5C%0#;$>^Sb_NJt@A}+OJRNJxbXWQZq--aX*O!6gdAtY7`;TI3#Pn&TxWH3?9 z90(>5)j%+Bi#t=Zqt3=I_1!a&wy~@G*{a{{(EHPweI?aX-kGY@53jl~H1$7uCeo%V zjX8{unN3v^K9q!GrGEU?u~Pq2D^?nFya85}MDdfX$<4#4E+S6z&z_}pM4VQ+jIAB6 zr~1ScWqoT?lte;8#x|$fM8f&PO1-bWz4d)ftSUHX)kVTtZLaa=B)2&EQ=+PK`inDj zC93*VJ22;AyQ}elz)oJ)vr%{*786ePbiH@E17A$!#c<&3%(@tba{A+3j6%sD@i_2x z8UlmgIPi7y25!ecpaY%7T@7Xxon1S@C_AM20=ajB@o6}3rCA-?Ue=S2@i(cD<;JF5 zzZSGFb!-ALm#{bYxylubzR=iIEc!x=Q><9@h3=K#`M-nBg^Tw(Hu=r4FAJCKF|yQw zt%;EpY>zi8iQM(i8t26lA?oiKG-#BSs}6)JQIA#XwfjD#gI9T<3}gRU#u~ ziw0F91=*rOl_aHPi-9beu~ji{1<~qFQ6hIW^QI`IB&Q*fNI}+{qDV@~iYbc3{jsNg7`m^*p31|Y$OtDJZ59u$)sY`I(D9Bq=KSb4Q`u_=GvX~9N> z_MH}NgeSbaGIu8?19w@l5n%fmVpy;d64cpi_6Ve?v)6)+kb+#V1sfqnMZM+KPUDJ( zY<*^1f{tI0!It!tL&tB--rKsT6cE4Bq^p4Vjn-2Nh~H>y3Mt0vMq5)PrQ>uXYl_S& z7g1xAJ`qWRPTLg7$^h78ou=_HHqmK<3}}!>Q%7ab@%?PkHbqf{u>gRQ;n{ zG$qU!P-<~rorElbC{pV)pfD+_?*q;vJw*zs^?_y)SU{U3wt~vPkEIY_?sDmCSng(D zsX*vMGXq+Upv)w;jZ_25vY6WorgAz<1TxWsd#xH$5ZG(gkfJqv-Lw;c zl?;r%0ZQoy#$FaM8GwK*i@E!!S}ORJdhQSP$Vj>01|Yvt&;1NQ8DL-|i@AL^z(`PR zUnnMZ>2FkIRJ8+u^n8GR#*Z@;la{kO6UYhH*zGB!1K+ zP6`4?P2!{w@=+wdjE?G%&Nzn0%(+;|af@=%x^yw;Cx{#~pdu;BY0ff9LF5?DGNlQC z2v1rQ1SELUngA&9bmpu!K>}8tCVY+pjA%mjHuo~1Gz4C?UUmSsT-AEn;n#9i>tz9_ zVVH0`mJvu%=^5)~QbO5!+2Pu9XRMbo4R|E8*7dT$`yU}j&mj%3^LXa%60F-F2Wl*h z8p#b$KN7qF4TF0w6No~?(IFj7=katfohP%yKA28IS06M*VKL5iP&5{)U^?UerAOa< zQGdypd9p5;&XaY)be^mWrt?((86U#MfDd{5R2NL=>E>WM=TP-+b*etJaUNZ#&zHlLcKs=X$NfG!62n|+oSQfp)2mlRBF+xYcXQ-|f!@>N8{3Xw%Arbtix)?g6 zKrewV;r!(U**crCt7&wd#S#nK{BVC8La_fh%X8J~ct(#f?{QCil(+r{A5QvU znfP#O^cbbDvMHaW!QEqy7p;z}KIP&?$~+{xSNPx|vEg-8o(${X+M8mvt0TVYVzrAG zzK-dfX{sN}I%k^o&hW(HSH1rH5DuiAS$Z`Ut9?s|)h>Sc=5I?!ur|4ZG$TlRI#@gU z-Ro%5&JEviao1<#qj2;>|Bd3_xbq_Jp=$UTm9pZmZ~C&a&racHXQ}gMEZ^WPb-9KE zuOBb=7=&kA7wx<8M|}grr)Jw21Iw!l(*CvTOUUr6YTotlBz|?B5G9N@F=2=SGT0pI zdsSR&`Ynl#9knRy<954X-wkD*YIR|5+mGYnrk=y%CoGC|!{^2*()B;LdNY%E)y7=* zW_FKzGute0X6stNnbj9`FRZhIIQ--SeKOlW`zN!RgGZn6!J`*OrGAgU(}6$x=+W18 z9nvR{HaTHnTqzd@!6_6880`Zo%TIGdAZ3u3xw#>bGC$436oXCPfCZ^w(qx>+iAyPx zm>($0_B%gNlx4tTAK;6GI~WD?p_VM zxbkn{0PY&z-P$%h6!pFa$jp&Eaatl`>b3_kexn`TJb-O?Wcf*)mfVHQ6*=n(>cs2y zC2ouQ)<`-;?!la(AfI?Ik<(S;y+ls@;=M#2Yaqa7+!I%q`zq6L#?4XVJ(F1ers6%zYo344QlQ0hv#TT})I+>y9&hA5YnBdc#HP-_ZE+-^ z3I1)16m;cnOU%1*d%~;Kly>j@?0)x8!-7@l3GtrAjIJldd**hry7k!bw}jx10QV}8 zU2S(hQjlF8#)jC(t!8YU20Dgtenm|WhBi4j?&tmhoCd7N@?z(n{c+V21 zd2PTwh_Tz+;HpK8-PY1pF=-^=vb?0Nz&OTcmw=?$R`on5zeA}Pe7ufSxfAy;^pT^* zsI3<>G4*=HeRLg09NlS3JXfY{^@+<2wRL8HtWlcRnW-fysI4Q|vpm2MUAdUs0KR2$ zpr%`HJvq$S$mK%NOA(mcutMFLXn5ug>o*ESo!__#ZX%BEz9gz9?YweLz%J+;#Nm#B zT$~3Eo1M7%QLjcW=G=>8HSci%VpO{+R4X^jP3De+-)P0AO?~c$&JSB~F(r=-GO4$4 z6PH&fE;HLQ_vj5>rsOsY9qS&Tw_E5~63mnB_Q*+!I=5RCXHpc~zREwk$`Z64ORizP z+wRKjk4k5~;OzL>e8HVX{8+yf62VT6u)2^6`aib|ic)c880EY(~4oMM4_9J6t5h{9{l4et(hhH(~oE7YT0wklS0>Wfuwk z#6{x1)J5WJSL0=M7YV$Vj6CP>4{`F-49K6ANlqZ9*M=_S8*UNj1Qk59j^hqk%$Hx>hm|TxB0lsJxFA*n^h}X#N&(OrnxC04ygc}Dpgu_w;a6ldcJ%BkMuo>SO6f7aWZ*z;%HYm4)Szo87$XJpVP&amYH$ zBVvM%`=lAT{SlB-oZ?y*x!cXF&b5!432B1`B&ew6QCI4n`c1RY@Ug2GCoF?p@9>%~ zUjiQ&M$b?BO4O@*>^`{+m9O9;I3@DG<#D^WVcf1skJ}VmZ{c`th*!~c#YVs*GOu;K z>jk^ReUZ^F-kII#ILELP>33A;xHR6GOH5;w>4f9Euv7%!&V;q}o0%kk!S%6j#R<<6 zIxqBDg35`HsDU74iJ@|zZd`%%HKPuFmRh~^RU@ok_s8vZL2Tx4Tb=H+I>vnTnrbLg z+!+@x4qq7?zv*Ie%-^;uUAX_k3uCp3>#pAqyIcflaQ{}m6~%Mx=a$W#c~MO@NgEuR z#4kXXCHkVp?(s?KLGXT~m)LxrZ}^UCNP`qCxKSVhc{GSj-4dN%axG)!M?hie18SX^ zP7hxnzEW%1EFPECGmkk3x0K9M>rJH#10Odga86%y z6S{L-6CY>XuT{r~{#`j4FF7-Di6HQfY`>gE?Afhu_tA!j-AC3t-EC~`@X1OkUfN7g z+qM2Yad6UI?w9c5nz(0ZkQmEEmOeLdWN_dZKKKcZj1ztSaIW;Rs+t?OSIC@ul zY_!T|v+4`cYyG1|=kB|#HF+0TwbF^IHz5t0OdH}gjU#YT9oLSyE0fa?iSt}{1CggN z_nikjx5O&QbcZ~{ZfSUit#7z{e{E9orBHXaYszCHco!mg zu(*hyy#%y|(hlE#dD9zbQ%0Lx*CzLZFkHSwh-%#3>XM}GYzfh9XlGq({scRZ#u-wq zW54lN-^M%Ba%j$Ejr<^uJW(v_@2FHcU6$RnF6|i7Dcg7Us!d+>)y#Kq*BQ+1(oNs| zXyl&Nw@ZI+p1waDd3ql&An(h%b*@e#x(3&Z>(dRQS6XHAjjy|OPMOza@cqc(Y_TLA z?P;1Mtm>r4!|!J<%T=^|21D20THPS1g^_KtXz3x|6Vf5oN8Ro(t58JoZMn@ipF422 zpFZ3*XYeBEoiU#^{|{*Xm!o30tE@o+wbI9;!IxNt8RW@NsmANT2h>0`692?QbaaW| zJsy6;26I%2T-eO$8ZQsOzzQK30-wcu5v@sk#Prgy67D#~!}+NA{|s&;bTYL>rZ))I zHLCc#rcbK>v3bp`|J_TnPU5m=HfA$HzVKTA;i5Zg0h(}oiZ!p)=U0pb`{8B{ato3G zULxzsB^o>$6MD^rN1K;t_+L(060kF&Wk%spa!Goj#_fUAay~aA$)E>PJzZw(elh z<12@+jrAqXzIJ|ZI`QB~2Q~V^YuQ%n#V!}S09{@kBEQ#t<>9md21+3NyqeA-xPe+* zcVzC7kL^6P%b!oFrg3g&QB-;;2*}CDAHmYvwrdlZ8p~AHDbCwwA_e!hrW=Ni_mt*w zZd)nQJkATot@7BLs2An2cix?AEh9h8R|SM=9_Q<$xTMH9AAdYS^SB^nl!x^NA){y> z7le$+VWBEVpdo0Rg$lQm6d4zG@Jx?5Kt^?Cmb!QPHhI7AYFpxJ0)}7A-H~;#?`?|S zza#5F&XR(_9e|vLC4lv!H&m@D372wkSNVyI-KI4KDqqYkHffL`bp{Rnsi6X>f?IJHZWVyMIj(97ht8bQ4hSkY(Rd~rMbUV!4vI?Ac&>UfMVl>e_iefa;Jc?peG>`ikQ_P3n%$}&UUC&86 zmh6@+inM8t`!bTc71l7ff3;X#YR-a6}RCK1Ja zFa@1p>w;y943Ty8^`ovfhR6ndnI9{koV;?LVa$!B{=y>qKj&QBOU=0u@CuIdIGT>} za%J$uAc3P!4m?(|?qasW!-l}R%-s#<$ClsVVFQSVGmZxm!2e4Ryh$GVj}KPQB=w8p z-P;kcK2X26BOoPJGEE+F^)qn$(Dgp}ChH&I4t{i?|9HZJjM%;)0vWM=9U8tSayt6H z(sC048ModB5jYf4QopG7w}$#<1aCFmb>w`_Z$$)XD;ad6MP=?DeUl=1q`!Ld=*b5X z4g>|@qft-`9Bj8aONvg|&YV5#I6&pN0~ElKH^~7(2#*d7CJYFCzz3&@vH~C25hjqp z2X-)l1O|?aIJCE*8xFro29BOQd@8A4yzA}?Js^OCU11^$;9wUMQ6~X_gWa_M%}#Gnf^@vXns>v|@0{r>hY zw=g;7{XW}2NWhP`y-;=iKHKt0!OuS1^4wm(-?lsw6x(mjAO-#X)(lb<+izQ*GYUIk z%ODAc^??8t5Vj83md9@tJ78O$OZ3~8M}lJgfn`}a`fbbOH;VP!mWSz9F*oqmZF$hA z-2MofWk(9o zb&DG;G^p)?P@60c57^}3H)?x;?%C*SV{tf2Z9R1xx*pG*VJPR442Ek(_mU;A2kvQtcLjwq$>BqW_e1U7;xI4oVk8X#q`S8{(u^y8_t8V^ zI1S)RigOK@bLSRn^d+%TmZ+?@_d^EGhfFM_sA91vCdrQ z49H7|qpl27hgXdT%CZuiHJMOaiknO{$kJKhbmE>nC)a~V*itJPv*1qX@=U?fC;;h4 z0@K3TBeux!8%#gKA|t~wCyB@C%O0~lZJ=$ByMbjnh&&ePio74QH4jQc%DlGcWI1^v zyB4qQ1FplG?~s9}*mFIR)w2ZUp!vkovb!IUg60!z?sOJaIcd~W*)kSYhYoVG6Af=5 zf*WRjQ=?QeLgcA#1&xt{$WyC&I+cKBN6#i(?EA?pIyr*%}St_u&9?j{7T#y@nHuZbd5!o!*A z7%v0G+%?dE(%0At7jxGcT$S<}?&5CwG32nW4%{L2xyhP90or)ogh2{o*KHV)g6ZpK z59$n#Yr))BhDgnp6n>&uZO%M5m(<``qEpBn%NZQsz}>T8K1opQMkppD;D!ZGP($Gx z_zofPz5>AB0vg%m_y!6BPC5hsknyQ0ji)a%0-yek6LiBnk(WAGjc)3C|y z>b1I^u%`P!%0ye=!s%-)=%g@<5~V|uf%u-NQ(Z!95QO(c#U(y7JLG#JE?XiyY+2u% z4ubGr34$O$#KrvgM&MF~RSALcy%9sv0vCKB%6!OLA%P1%AgvI0(-?CWiIsrsJYkCz zY>`y9NYYUsjF?CED@8vTF_A0@TOW*=Nm4tG*uO8zta7!BBlho$cr-Fc>>rIX-*2^x zBleF*xCM~fai3n4PzD+affTiq)Y?f>`)g6By22(&(bu9bjSfJP+Fy%U;-!-L#ljCn znNL_H;&=TAG&V#&KVK>#s=yY94@7AimV8D(>Evlq+p2TT*nYe_v<_z86+wC1@*q3&36?G zKN@AeWDIqY^GBn0>8E_YOBi}R;-ypCMT%CF)K-(ElGme7^_xzTqOV6wR{6|S@_NKe zs8Zs`AM^ZmIsQm0ejOK)I1f zTwY(B#;c3)?vS&A&{MDWBprFyaQl_IzakF%WrTK%oBhlhH*~wnhtK_T{H!{S|9X^p zEgRu7v|fi1o*9Gbv?0s&3L&tza{uY0xOlvAc>=3qd1&(#^Z-~R?X0hn7K@Sq%=2HD zmdzgfVm}+ z$u}Yp=ISGw(TB7D{7(fh#D+2VAJq%7N15ZKzp&4IM0=Py-uJP#O{je{%Kr@17A1b> z3-)PYa5N7~KOGg;;`*oEVc5l6Id1n0=i}2(E_j~*R+Rl0$mKv8RdO0Z5QGxOjaN{& zL@BswMIACSz7-X^O$w+eNG^6kZsb?0|5mi?q%{NE?!rHd^1m2_;{D9qM-_^GWcK2t z|6UVH@H77liBN>vFGYF0(VI{r@z?G@sR-l~Ea3^iVnUHGaP@8RVgHg7O14<|PL%x} zgmM`@eLZMN)YB6$vgJ;cYrO9AAa2+OxhPs_;(BGs`B4oIU9rh^q2exFoeKj4Jgzly{+y~#G~WNV*Pw(<#%e={nqG1|JNW&v)=a~Rg~U-U!3dvxEtPpKmQ*SQ3|y`iNycBjnBLjrF~LS$|qR* z)2MJ4nPfqfFNANvll_+>)Yr085JccFqU?V~awptQ;RWQzW2>FQkPJa+EpZuPhI4Jp z|3$KANL+!xNcIe_izLIIA#nx%G7|6eHidm$0sE*T3ULMgb5z*U7*_yq_I|Vpwf_?3 z|2l}M&56i9sfgqgEd7-P3Q4}e)&Ch44#f{S2@#**Z=&q?WOJo{Cn1l>2(vW7s+epT zN_RMr_h)hYlKzIbs}Cfy6KWsI=06f-H^<4&KB?^F6D)l=Tj({}$rrf# zzHDJMIL`jTo_JLntkQSk{O~YX8u`CkvlZuQ;)ShjsKZ+;H{yj=g%OWJ z=kSYtO_qE|m-g?U?#d69ao2_)tm5$vfR}`Pi3wfHl2C9v% zX<`z;OEn%*+eWTUp1Wd|p&)mE=O710x4xSr0es%~L__;HWogPdfwU@+QjX$1#bbveevbekHhoKV$vdFF{ z48Q^%kAwnY<3)E+ToErlb$YPck86yfX4e?h()8=8W7Go1yXl9sCx_0SK7FcsX7CUw z@JhU@DF-@TngD?P_;K>&4z7KCO(QByXVqReooqHe_}WtSJaM8GG;FcKz493xnk(E( z{=^NIcvhH`nJ;dz8Yd&WK`r=WWk*1{r3MuD=oJOcFPf()SH8psvF(AnQEh=ZV4sYg;-^mDrFWLkNHlEqo_Ss(FSxtWQ9LEN zCh2PC>JD|jd1=TS?Ytljd83_&URtFguk`bHta+R+XS-RHSsay4$|HTiMt)=L+!LRU=kITzt{DIwLzu8iIAkJ=)XMGOQ{13Gk17mwO^mIqFstw~T7G&193 zlGt0`x@F6jE9LvkTgxx-!DOr$pe}2KVt~4c>L86!3{V&E(-P7%lJ<3@9VwPixMf<% zyOlbSlJ4pbq=d8XcGdq-7Ku>Kf53nI|0r85^be*zSrGC|gZAn`TQp0nq5U+&o)gR3%*KcaeYPv6`DU`SQ7UZj z+VIWs2@w9QJ^C3%a=Eep6&b0l=va`N*P<-Ei*`8OaxY_HnI8+@!CQTItMa(lB%{jX z-k^t-?(U_#?{pL)zYdB^%7>C&+4;#9ZIKNh)WS%^gW*(Vye`m_?py~w@hI$6#v1@p zbd`_Y>u!;yLnq>D7OIw=wd(A({7CN3w&I`XwE7tXh?Kv+DWs!ky(G*Qs8 z8Ov+Jq09-{j8D1KM>utINa2{ktWf}q3{O2Pkb}x(PwAd=(~)zUzL3goaWRzpVTJ1&%Kh-lRcHnb<$i=tc&eHFsbgs=Imk=W66||Y zt&s<-%fkSrYm?Wm;pd#=l4uPqo|aAwfz8vfBZ^rw5d9JQ>urt?Wcy%tO=+T;kJQF5Uo7+*U2K~zx0Q-n|E*l{%DCz?5{JM+)Ln}p>G-5(?( zo6m7nqcT~jiF%K(xiehOfAw@jR4cul%fZgYjca{FpTWP)4A=eAl##E#Mr=emdAh2_ zZhGtrH+d|heZ(tVhsc-Hd`N!2JY2hM_fq}&2p@>7SkU=lmt{*ip9$t5#ko_!@q~Ac z;@lRDUL3}{+qqK^w*{J%QXYflJVT`1Ra8Dh^uiOvH?EJpRNNgGfd5^ZxL{V-t2fuZ zY;4wSn@_krgX-Nz3lz7+IaVRsA?EO_T9-Th(ufw4tgghBD>QGq5?8MH5?8Ji_s8wr zUtYRddw$#;@vNDmBFm*^L!sh*@tn)UjsyadYAdbFAJI%&+!qn)=&{ILQcNM8gYFot zWvzg4?pKDTb6m|+aPHSi#MFMqW>^6~oEMC+!=xz_`$_vT6)x&_ycwdo)j#+$Ra>QZ+R((d_r&d1(t9y!TxfmQ8og@B zkADwww!yjaZ>=p4$4i@QybUe+a~?7krWl$cPsg^^1=(sh%(u@bkm9kF2z9UOYZwI$ zq&J63nq*qKq)+Z{yZ05Wj_16fqtrdRr{YWc?{1q`-%)M=q`V6y{)prey1i=th${FF zUZH$74GoQGw||D=m;^|iVqD@j#&&*n;L_PN)ofg{9IeLQ zn`S(mJH)H?OkBHj2eT-gB1FtH7Yq4|_a+AjQBBNT)E^$ids0g=n3!-Fz4)l!ef%6Y zGjPrh(=RnM_ALk(zb2lOtEVnINwK;9SEqPL4Pd7UN%HvtjMMHVO}yH~W*phERpy^K zAgez)_{NzA!uvPZafG7|-Y$HWv)8zdqs($6ymFLbl)siR%xBiVSBLm9N_9_#p*<8HqTBC*gCzfm1- ztXE7UrlhvnKhNN1(ck1$MqO6Pnba?(>+#a53bc^OfqIFoZ{#f0IGsqg{l%O(PM9lx z7H=HQJ9qK!2I9?Gyt9YKj%k(C){5=U9nB{3zi@Yh|Aj*bhlhvy628OT;nyPIiImMO<2p8tUWqVWaaB_xrG!rG;r54muGR~>@pjlJDmu( zhzK{#B*Ij+#m`4^SBqu5*w}k5@_0s@#+$RasOuLVn|VX1jaH`d=iemGP-PMA{ep(| z8MiR?J>BrTXRdKTG-Wf!_Bi?7Bl7E;Nq!A9ivN_YuJvM4Z0^L?tAyJUN}C$m)S74z zX20WkukgHcCZ1c9nyt$ECpM@%lOF^7jXM&&b7wL|`HR=9Y-X|ZR>GrYoja4e-B&Uc zGOJCg-JU45Q~Xq%nQZj`Ep(;CR!O$&1x~4 zHs7q&cqpdW{7_8Z7Uu_d`tqDO9|(mOBe5V96OGscAU&cf04_lXQ8#F9WLy+#6EoUHp*9}0bBjW4Vm-Bp+IFehxjVBe zDs8~rQl8P09ubF8;rNmCMp~!bZ2>BsPI)mFDAG0(nC2`Fjvz!wu-GiOR9n0ldlO-q zCu4Dv;+(KZf?`WTG3kya%hb&Wzrpenb;&|bx?^c5CKlF9Lop$_G!&EWSQ?6vSf-v_ zpdofn%R({fj%CX{C!(NSrhZ+>Nq3a8Yprc!^;inUq&v_i`rjy4!aPdbMh7epA`xS@ z<)N5#$MPT&>5k<=BxGC>m@K%Ij#sP%D7GRnDdx#50+ZNKtu#w1d<;+wCA6_6wpJ^b zscjU$QEVl)QIFF30LWHn)<&h{LCs;u%w!Za&r5&cb~x5BNoy#zW&GG=m2OzwuG7b< z;48tHT_$VArjM%9D~8t~1#=bf8X`fb+FX-WZ;puZ-VIm_r+gNcR~V|3hU z^8lp|qPR2ECT!hllT~%xcQOyex&l3PFM4RF`IN!Xi{Vu-TsWQaIurz@78;#;#jG?e zQS!>LU)SLcVx?j07#b1|0|l^XaF>=Amc6)9BON-ZY6JNhLWzb~n!3T(C4Pg@2G%9v z84d5|%$CF`b~6@XA_Awa?XzeFBpASb*yqUPB!xiwI!itU@xJ96tw8m(eMBn|;uxlE zLw)Q7BI9)%<~1S^XB2tQECiy)kX}=&#*p`zK-3uW9utT&hTJ)&K=>JfcqJ(*xY=m} zA%#G8nm{l;+MU^}Jj-O+ZIP&5Y|=d@5E2Mvj|qen0@-5%Aw{u0CJ<5(--AE~5C|B} zeVGR$kR5tjX|ai292*_Sj0W|zf-aj^O__`PY+hieC@v*jh#v_=N+Z342{mZkZ-@ys zXxtBCVwet?lVc<8&kp8FL&-+!2U6Hib(ZqpSThGhi5=qw-h9+AXqdhAx;&`@KKtVm zz~O?Vgwuoh`!R`_qe*x@n2(b**$-mn7k)=>2hm)IG@eZkE)heBPAzZocMmSz8>)cB zK)yQ^kv<>Dw!>kkp#*#9h>^r2L7nRADj`QdkpAF>_S1$jM; z8K2A$5)6;SHati%JPvoNO*$#a9A2Rt9Vv($#)MDiOM5YY6qT`?FXDvZD29bHU$6wl z2SfJQj0*@E;n{m~a0aA!a?k~Y6jdE#z6gt?kms?rV*JtJQX0+p*j-26{BM`W9=Cx- zf)*UlYH)Q@@*B^1N=RC8oPi}#OK}fzDkF`_<;Bs%sdfp^nH8JVhcb_7!z7yNL##5= zuvi*4G>e9jk%oC+45T13WDO$)2Se5{QZ#JH8YU@i*pM|WmWG`%&r~F6*codWDfz9~ z?HWc3vS&~~%X%2gf#GacjmJq)>})6|Byl!s#pJ+n7VWtfBk{1RjiDh2hKEBj*&`kX zvMOR!|9uaGd=N3>wePWv+Cod%o5#$w7vtI|GUru{5|`!)g2IXz=ZYAgnuQq2h!~%; zy^It@o-#3#g4d@^jHD3bQzk}9sTiL^jHg_c6g`*iFC7fv1^2c_JjwBKSub#|5q9|( z!C5&p09ZpHPU>&NJt~2Xu`O$^TcOVd)}$-WnU@%TgSB&DK1EcdVC~%U18(R_N?AL% zVt;(nu|`)7XZM!+{gRYs>IHqAu7j+iPb|ZuEpLvoQC8r~sdwxr;VCoqcrfqRr0v#oU<9PHdxdW6Vy1 z3gt0q9?x8rph96kYI^!fPIF#>2ux7EL0S$@If64`?qbQN1&^{AU?-g$x1+@ZY3&u8 zN+b~O6%#HgGG6J>jwVI7Utua;flI8bpU+H2rQw9j=C{j)O*wRy8*YJWHw7>lub#=Z z#JoLQyZqe*n0M}Z=G`v{-fW?;d?S0Z^o=NKTI-il1%nb^YVzs@khOwBu564EsVP~vY;wDY3?ZMX)P!Qq7oC~cDQNi$f0 zZrCnGiZVuFsFhU_3HoHHXH=9aw!M;l zkF!PdZ;WB~2v}FGmdC}}E+_M3v?XMneB9$?*tuR$+AfJyG@pH0x-&@saZu8U;Ep z)g(2bWkJt>PhvnT*2mwI7|^o7lf-~ljXA|$_`Om7{h?KAR2)8PtMnsRnD<4*KTdz+ zp#8nlDh+^))$oU+>}#}YciEl^>$Tc;)~=PcJFbt)nsA|h2qb2}ABqaj`vm>OsUZKM zXvMu|9mm#Ba^M+jg;?f(IKt6|H-}U6-SAO4){nH}`=Y{bYlVKJ6(5mS;H8MVu*UsZ zl>HQ~*x_4|e#}nV;INTXwt!Pd{$q(HsMy?oEU^R?o7;~imY`w=`vXz_lc5FPsMbDe z3xZMY$0H)JrN7aFPe==nxfVd|(^2+EXu;lc!>g#@=xXL+-!FW8w=cFnGa0of#MuiX&?cUA%2()_5 zZImrd{@yA;;kLN_j8)t+eo-;bKR0&ug5gNq-xX98F2sc|7$7TeT93>|X&YXmMxMWI zMZ+t69k%*l`(GbydsmcQ7*#v1tSFg@xza6u*i$^JVxhPr?g*kbCF_!g3Vfkzl5^W9 zL0ribmdu^x&2u|&D_@BPL+Y& zJ$dPfGYj-6Bim}+zR=l8xCe>37%_EWI;MlWJWx$P$B~1xX`@m=ZI<|r&<*~>&0)-nh!1Em&q?iT<+K`xfbCiNiKQrfxK%Lmpn33 zRhJ#9NkOE`E_wQR-es3OQruU%?2;!by-9U($xE4Hoxo%RK)j9La)RE6C%Hd&TL4*7 zRMovO{opP>(Bu*wO4@3cR$Nszr9ZfP7E(PTADzrd2pErHt;;hg=`M#LVX+j2%*nEbX&% zUr)i=_DKo>_1q!uo!oB>lAi5HY#Trl`Eq`Zn8u3-5j*wyPjz8YSL2?6u@!Rh&R*5SzGIa$85|wnoKkGv&=yEi*KFqnau&vEm%2-C*jP5U8bG#wM>h zjCwQFQgN+S50BpBqS=W-w*#(A+^+id8YQm$>Y{zgAEj?GRT7S9(;~T8V9a@r7Z$a_ za`?N>Z9NU7n*hf50^_UwTn0(|K?c;!atGqLcSBJ}!cH;o^V)W{bF+!Nxw)E!lU&~_`v$7HP$`YPCS-owvf%ljNYRlAcKQer5*26Ck_ui$(os*K$K z9S4Mt^lAC+8sdF%;<`T>g|wWaE>F}nJZ(qS{Vm_bB*%4RTh;wtTvazo+86^J>0w{_ z#VoNVG4H-Hnw~1Rt;=A^HBAN|Y|7taesE1=4(9mUNnp_WIg(~XR|6k!P>e~iYMrQ! zx;6@~)TIPA>!Q10#dz-G@Ces_H%{BD^Zn<;?yDQlZgQL>w8ACaJV;PZ8P4uw)qN{& zkK6t7g^`1>IOWkTWUQx760NYW2W6@yl&#i`0d=*2$O84Z#_Dt;#i64+7L>$ZIOuuXIl9epUM7Te+Rw#vOy%(n@$XTb^`rW9w&%?P-3>B#Vfg3~pr+ z!8XA?iMf{}-K@fn$sZ1|R=g)}XK8T(U~FS(G#yIHgq+*H(}r12if&E9e<8 zOT$#0Znsga*w$MpVbZ+M;l*|eUTkYiyjUH}F5F$RnK?jc^TO5y2yM<{JymLg6i&TL z&IkxibK0j>ItH7^QWJyCS*BvJRZbJ-tud&Cir7Oz=meH+1LU=n#WkisocIVz47Y49cI6>GgkZW=+IP zU7BItkGP8kuPE-Gv4GyYI(R7{n${D%Si&9H2oO20y^n$zq2%=&^cBwd~ zOwQ$A-GL$~p@?qh%&9}C%7-S(V)DzejYrO_WHHZI&Yy}P=j=v`oph~yx9D^@AJ*jV zcy;9FI{&Va6D}6Sci^|SAY6!oW>J1aX%%d^sc-Mt9QkRkt%ej95QEFk9eR<09$Xr7 zi@NVhen-HIzuPm)b zTa&t4q%5wzu!R28DHUy`aqAbv}zVugDFLhdEJcr5Um59h4G_mX>(DFqik(q|=eS)(sW zCA@ctzj*hOv;wyTm6?Z;dlR7mJ-7mo$MQl#3eqd)X-EZqSXzNYf(?!|QeK7Aj8zOh z6oq(Y5@YPd{fe6cfnyQyDtkmy@vbr-6{KkSDnO&kF^Mw4FDhld)ygnUu7`C4-*^-l zL^+Tav6ch+RfJjwR3lDfK&J}MZ!u0|SYYJdJ2PzoS5~qeR+E4$D?EOvYy|6C0pn-S zY-=;?lV`TI?dy_fw%%Dkvw06M`pni__srH?_srJY^vu@FGn;t%;5AH8fA=z}>Q^DT z_E>+AhyL);KvGh~-VaI9uywp2N;66E(zcFx;DYRtls@XM>)PoW&P&_I%zepA+s5|w z@dri8os}i5FS{pKdb_Qa$#$**;6_p(0I1n@Rj_I{bZ+Cq1~)XZ5Byk#8B9tRwymr@ zU1evw&4Z-B@Y z=*cp*%hp;cFY{>^E%t4e8MTYay4v_-PVLT%8y?%I#L>8oG+#sj|P5>L5hNVyA&0tZ?bzgZgRsAE!MuwX&r{b@xC-z_P{LW zpL$q2V9SVlSUO-WLltQ1YiD+EDdvx=q&E?)JH#bQS_HHb@YKG5` zY}&eQJ4qg!M_)=-czhp?VN}QymQ3j0Cx$n@{M6k~Y~r6Sn|437UefZ%y8XTD6fvSe zVjoM36g@R)%MK}oJjk*mix`fhiiE)`vxp7og{67rCl9Oh0|u-n1+@o4tR5Nn4-m)! zr#4U{ag-jp2b+TDM$_ttVTXTm(P=U9sPT3$9U!i*?2N$FkaZ9ejN+qazd(x0j#@+% zQbHfr_qocL636gsxOKY9UKktpCo=yy6l#+BaxBy&v*p+v1)XagqhmnV_PCnJc!Kyf zo67yyu8rR;A3a^xBbkKkYeFp&+vbERKL~9kqzDzFZ54R+3A}+? ziq@UL96&vmA@frpqn9-tuKZh7pf8pJrviNeKc6z?O3no`JH;X==tS745_4FNz|zzz zxGvdIL3^L^m?2^3jLm3=_I`L4Gg{H!58I4ZwD-d{qZRG_u+3;v%;<-0MoUU(^uxBJ zIyCsB)9s(`)6nQ7Zt#Yst(Pv%G3W_3=KW!;s5#*=dwb8KtZwCt%*7dFj!S&);2Bj8kS zPvgrx^#!6&FS$GYh0*u)hK;c5t0BuXg`U|Q?-RPR?LJeOo1!Z{^vt|c`U^EZ13r+K zSL2UG=sY#e=9r&UB|Gx@x~gPlI$u|nEJ)|6N_J&LA(9)-FK<5Xo2=b|f7Etmmmi9w zvBKG18hWEF3vxe^G(TU;uez1)bO--SdEMw838ArIncMhXnkp`VDDJZ=kj+@WyHqX@ z>64*fFw4(e8|Eyv$Hf|XhULJwLF6)K0C*uNOpY0T-leHv4D73~faG(We9CfKX9H}a ze-W+DXu1Mfp`S}tAZzq z-sqK}OMrRV5AA{@p1#~hdSUG1MHH`i|MMW$8^f1CYF@i^eOR}VX8(5+K5v{rktikm zC$>tLE{P)7)ht>ofMYia_UCI+?#SuFi*78BUcb&MfV9E`DVWGwwvelKb>83xxLe%sY8ElTBC*g5FLbv^B_A41)6SAePotV*~J!Oz|uwcqVV4n`!!{HqbK9^1=<_UxTJGReJ=H#2#(VllXY z58sAUjZ_8+Sb;{TtD7XOyc*3_&Pc+_s}YYQxKsqkQ6RJ#&xKeUx*MmRG;6np=BT@5 z3+C2GB_dQ>x9sSGlqeQH5M@6C#P6YU!&@ou$6ons6IlSybwtbQn=@Kg^{)^C6me?Yj$Ju=(_=lxWa{Vd$y)8f2k2zs2o zzQkLpAh}yN03i^%Ei^!oyq`)Mz?w)hG(eENKNu0V%{Ra!dF`V%ARu|crTPX0B<~MN z11`7*faLv=DEmbkaHer^g@^Pow7fp))+QEWViC^&NJLx=?JxoQ{z%lb&nIc%k3>hu zY0Fp{?kIH>RmIXz)GSMz7?=i!R4P3tn}+qoP&)-_bj^Vj;dj${$662N*_RH<>W|r z{J-9?(v^6Qb!);)G^3ESuKR8sAXa%r742cJq_#xUI=#iHt#{(0DjC=)jSQKUV&tuc zNL9W!Qb0g!DHtGtE1x}+x5kY%>Tzdi)D#%8%D1xd65GfFJGZSTT7j{4HGqQ}2T{@v zT}S^uK(R`=(bB_EN`|Hm|99>25_{W8{pb{|Z|zVoo^6oy{SBJ`DY)`bqQLFnn|>($ zr?z-;W2s9{h2>JnRtqebY|sgo z>s+$;>rOoQrpCtR#*;zmAKS)#d$;HSnU?)090P72O04u~YHPl&td|~1_SxG?xWd}g zJc4ZPIUlc-D`;xaHh|jt!xABTelz4dDXP=RStY&SStS{yw(@YiYN|SHCwoKCw)Je1 z^Qm5u0b<-fDnYmSa_(UNz_GKZUDT~~Xs=ekR?nV1dGzE1m}IYtOHE~m&JGL=4jyuG zw}=|n^!wrdqb}gqwtv_bck-)$Gzb8z@F{(IXxy0Vq?5{M^SsmwVAYB+7d-WCH#5L0 z6t6Xc>%^I1<5tz=%&;+o=d|&H(45aWoY9$KB1{je6UG|HaT8;W8Kz>aIo}&#OoPo$gJQ+gQEVfhe~Lh;mbF5M}7)zQEG0farc@pMvQAH4k)e zz}Mc)AiDcBa?IRJcU0O^rpr@vnKy|9K!@4!d5wUD868S)7hZ(-Nf$U~Zd;eUJrN@X z#mRgZt)yw9&N5nwdpU!Ka}ps0(QC{{Gjq_9=Ph(0qY36W*eLoGTd+JD2 z<+t!?c}iy;?nfTN>nc%Vad-uw}7w|d|poqVJV}lCxx&S6h%)8 zVM%ALo*7{&+KttwUlb-~JgrV4EJdla8YRMJlL*N*;2(P$KmY2Ot)6OF*`YqPk`lCXLujR<1UH1SMVeM_ z2xAMhUNN_6)?}4oVQi6x{H8FroY%{~nZ_2mV7f1iEz(f!3uB8kRQniP zAB|k!@UXl+dvC7vuBdD`h^hL9a7crDLMDm6;{aXT!F}rJbP%;2PW9ay`D$#3exm>)@E|?NIUw7P&~FN5 z+Y$QBNod!s`;F}M+pf@Wq>=Eh&~K!X@Gkl-K#TWG4=vtP2QA)H2QA)%_UvxyDCx%g zvhz#Jr&*O%evZHUvTZ&k1q&WiE4wSTJ?MLJJQdv9q)KygA;vEoBmiaQg zCewnLMS@MU@I(BI{@m#Yfgf%Z?^`3{NP{j$J&w;0hku&50Q@x>3#})-@hF*4F{(vVI#dbe)$|tLCfkl5Ma;@#=%>IL5s84!N9g?tOoY*>i?5CMEO@_mr0d@|8D^d!jrwT?sYGV7_9wCw`-*D~5Z@%Z#3QW4I^E!sdi+ zqojnC;hsoQ=Y-*&NKxm6;hyq}HJcG*Og=j2`9NPFP0!ml&2LbA-f&M;d?T~Qt*lb* z4d;b9%Z}OhLgvSL>X0Q@O21$e8b8a$+)J~V&}4-6OE%inS@TOaq19RQOE#fNF`-|w z2`wp|&@b73Rgj_e@^t$ZIjHO9P?wDCmu+P88_j*$_A64<^|I|(lG3_fX1{uxv04D{ z+xE8X4+9xFJyvDJE9F6?d`xXh@lKT?}tN z0fJ8DqOMmX-ogah?fRWHH2+?yYvzl8LWV_C3Z*NP3;uiSD`WZOldDXJB&fCbNBCE4 zqq1;8oZ|4lzy_uW?EL~K^dplKYBB%8TN#;@U}RDx8JX^w%cs=H4IaxR*M+cBGH|ymv#0Nm_;R7^37O@e@I~*dA=6pQLFPwf6@uj&GOYS*= zoOIsDqxR0^1N1*0&6jmX=`+$l8DY#e>j5FB11T~$&=ej&8O`fXK2XUgBdpteC8UA* z%?3E{TOtFTBJF{u4DTO|fX;^;jwlZZz7kHV_@bN*c;1uXKp;huN;nhnfh%OlK_x#F zaf_5^5a|v|d^Y0!XU4m)r@%E*N+dnNX3Pf$XvjewpN-hH1$|r)6y@h44j)sT&;;^J zCa98YsX!4W3C+(%#4@oY6h9Ynvfx3VUrBv|C-^sL38o~aKOj=D8l*SA5OGekUtJaK z!~~tELVDth(HlFdDLv^JDEQi>TfP`^R$B|8P`bs!;k>t>3ze4p((*I%t z1`6~aMI74%DGn-~1n0K7`~Zmj%TeYhIJkKb`IjTSkIR^GAo8z9*`w2q8HI_HtLUm# znD|#C&h^5D!o@}krciftvceiE`H@SwTO}V)u`tI$4*DF@Uue*H~h+983+prM#{l2q_@k7*}~$i6O^_JMi0{5$(x! zGL2{d$*8@{T-JhT|EVbZvz#AKILL80Jf>9HoFLU}wW)3VRXl}vpAO6ZQwi2su_o4&_rSNrC+2KDah7I>t}neQADf@c z$8(+WguTkO^ufG6Zga|h=U#FCwv`PKwBQcefq$x+w|IZtp+2xd#acA-Mg(bf^6FKr zH%>WM*<`CGB~q>cH45=9xB>)a$9TjQ;01H_=acFTkfw~IPe12O_we#305zNe+GlsW zl#IcjzhxA6e`E}wLq=~Z?%fNvld;*oVB#*cgWqojfgij4Ga>Ms{TI%i!GB?=qdN=# zg`YvWnY^L@of#nsK3PXdcm@>@CKNH+rehF_Yh*mwG^{&22DXTP^Ma`u4ZmwhE68chuKv9lj@) z9`rl2xn7*6zvHC8iw9!uyHHxqVy5lwx#`}n{2U|k(C9cAslQ!$6mMf+FN>EnHNm>N z6c>iJAH`irb1?DBE)BLYwEdt1poQ7p6L*eJj5t>_=f*CWi{jXSI(ngUMAwB>LF>xC zc#eYEeCYJ*|;dnz|iOj_m{xHn~nB>W8Q+2Y_+FV4#!<}l_t#Bln+~T znwWRL;-*z|t^Y&t(P7ZIBa+~w4;?%=aQy7hnZarkK6+)mtm)T*BmE~IP=Iuak=R(c zI@o{cF`VrKj&AzRgQJVB=pGt8K6pmx=3ACM-G6on)ODMnvYQB>J^etn|Bw_eZ2RLv z9EV2MiXW!U^$T~gRp^PNgvZ`C2Jx;Z!cwKk>OP0LT_>2^J6mFI6Ur_`Me)5+JU6|p z6e|rwF8!ltrqR%|K98|7W3Y@AD-bAt0{nF2lG}uzZp`30Y6NyS=QFOhIRR}H0rk!# zAR|)zeuAnuED%jW)f;~Id^HADZ^~wD&4@Qo2}@}d-)E6d!ZOk_(n07v1F6>QWt!;Z)#t8Gym&Pr(@}d0cpSxL0`(Rsxj?;-dnkDkM;iN^$@>L2 zO@BDxgwBt;_;GlFyX0KFXiYpc0r+-7Up zy?FmlDzq4Kf+?rMJ2Zl~A};;E8DTzLHjMd*J_stv5|V;;SX>7( zU(5^a30DClf>U$pKyw9tQ)%5OmE8q7Owp!LmB1aA2H^qU$}L5BipXcgm1xWE=Bjjq zYF!byF6Z^g0`$-v!5QGel?P%O7)0I5m1vH*#v}=BVI{EtSDGsc8=XMKhRZl(A0c{0 z+4%wl1KBh*{n!E7c=QHP#|s1^5oa4su7|u^BFIi$y)=;)haewT2IGMOtgdv%11{Rp zYQk4DC(;i$X%W^#t2{7yU0gYVHuY8<;YEqqni6L1rVbwnO84~|BuFPlZg_e~ZaoD>8%u|E8$qIzlK z7ASr)D);;Nbjb+y-m?VQ$Uv7MuRhX>*^y*w|WNd=m;B{WIq#g@<{!4qwvN!k}gJ=(?y>?FqDF+ddt436iXTY>?%BWoYxK9iNW-}eL$ z2{2%yYwyf1xfO579njtxV89ZRdnYVguYy4OHsq^R>=1C5cQ&U-6&I>(fmEMcw%*FJ+|O7hW)J%PSN#NHFI-JMX}vv{eT zEkx0}FY~CGsoCM8Zs|)@C@mH~S#|ai-&GbqL5buJOttXwD{VYr!_I+0atCbTb2yOP z0bBSSrupEM3m-qzw1c+rk%EPTw(yanX$NiL!{~xw^S8M0Q3&#fY~dpX`9rqwk%Igo zTlgYL9G)IoNgk*j4%B4(KWxZKeiH)hmonKR0XrUfqYEFUk?s+jY^12?h%J1isOJa^ zpSU)S1nT%8%ha;e!uRNn>%%O!>6MRsE@QhJ`J|xupe+-mp!lF)`B2-7lhwcTD<6E) zq!VEX%F1^lG)Y#z6Sne2SysMNZ*=9OH1(VcogpjVDO>sYje1Vm$`?uO^M`I><)Z+y zeke3SR=$U9<>NO`W4R}10gELg%s*+J;Q(W~Ck+XX1?g%z~2=Q0-(kpH>%RnGj#f&7QFy&emumkBZUNuNMvLm?+(9kynZLI}fnAGhCV z-tb}#2&rKI;k9?g>uIdB`Wne@D6On_`PRA)eA4AcLLIUWk92C-1a)&gvh*&iQP$xR zjIpG30B$a3t|SHp7t;m>muDep3imJvf z5-2GoIL=lhJxGeG#w`-4q%;!fIFUfbyEM|7NFl!`KoE)GLDW2-c_9IQKi|IGfJ}_= z+AIVQfE&^^69y?btknU(YjwcyS`+ZQhTugQz_Y~#>Am$~QBxNqGEmiIs7mBMS%>?c zG`TD8d$I}lJ&D|<)c~qq%6zxBT9)3IEEue~`2<+L669mrl%#nsIai49wq2M`;`^$-4PvVNw8+`j_5(H&}I&w=t41TYZp`w z4o+Lo9i_qCkt_?0q_FsE#O$$OsqobZiCU5hUyYbQTA|G!K3OQ;jv~1IOvNGX1lsn# zh&4(;c(LH8GaoY48`~4e==S+;agL=sJ{V!%RVp7F#eh@dmS4oPfQ)LMAIi1uT)Cuv za?%}S)$Sk(oexGGbN#O{`@slYqS(qkg$$@2v8L}{2<7}^>lawaFuB&#-)By>LI zhdoJZ{FEQ|BpDQ+^21(|ZvEyH!(MorUo3n&%6!&%nh&i{OW(@?oi99nMj*Du@=4d- z()p^O($8)mVUYd%nz8U=3ghk?gw5Cuz@@qpgG1 z9`OPEl_>w;hW2>uqTj5VgdssZE8rup0w*MXN>2dw<2rXiiLj}Wq%#Mw|8Pn9R*c13PZTrcj73-a1O zDS!^aBCTrBuKSENQ3Oubs+PM56wls;HFS5?Cj|%85lR);smDhl-W+n-XRA7&%bVgh zhum=lr^&3j@QmE%L}U=vMmS`kt+^^a@k&wQCL6ooh)m&I`T11l1Y>Z`?sqUWgelTkd!5_Hg#B!{o_oE%29i>uwq&sIhb3Y0TU?!@() zNwhKCtrt71zPLl0 zeQub6KgD>F%4J@p94fX;88=tf#fyetteqQn`kr&ojov&55K0;>K;ai_{q8%5?V}fp zTjOrYs*6#ogp1wWQ7!VLo|i%)%y?E$BLV{td{gerj*ynLDksMr`1eVV+U^KA|L@3cjX_Z<#J)+Z>k^(|3k zDc%!$#UECvbMm9#tk*a2(0Xyxfw5s$d5zH-v5E;V;-IvM_cuXJhNYwxYBK!jCD;Nr znaX3F%;+>V#Yrgbc=}RgU|?NKY|&^6>fUN0Qi(N2oo|)XxZLMD_Fn1O?K5?3{hE49 zSiN6duUNe=@S^etuzDVf*PcM}RM~_@*`$G3vFK;NhdD(sT`lZ(h_s;0x zAW-JktC#{_oXDvfTlaF3o7d6hf8&LD9wx_@6LrG8rT4qAfaEmI#k^(r#mCfj?V?O6 z0>zg!sP0tB)%zk|BzY`yw+|Ogl-Ab2%)u6Iah_}!wXKLBbeJ&O(v`itbbop34d9ks z+ID5vNRvRD2@bLAu3oX-C4~UHvujGHr>W=Ev2@qDko8G({X>)ks0H+qN?OP}`m3yJ z0VZ~@uEfu}s!1%#ZY(`DP1ULGaF#qs)O$S@OBC0@hqQA^w%7O&h0~Jt8{#p?2OYjF zyQ%c#G<>A@+F3Gk?fTdYV>O^}X>6Uq8kS}6Ha2)|$t~NkF+Rt9;Yna+rW_IF)8A?m z5EJLFw4$Uud|sfL6V7;1V*YsxLjFn(MBg(yyztyp@6@k@)NKqAZT@Lmz*2oLa^G*nUGgtI*Ia#Y9ijg9nNsn#S|S8ls_> z9tch2QCdB1*7PBsCr#fP(Wf$5#7=VB=17OGXR>=ADD7Qq+F4RiTHC4WCQ>lI76^y{0-d6*t4Ll(*hah`m_B(kcun_RfG(SHL*SyZ=kdUl-zsiZ-ySfNp+~Mwo*yS*w5a=R zq&3fW@TF%?9Xf@pTIXYxM_uxZx7;hEwHoJa=|!SXkNcp;{igxO-7Qk1nws1gua4YY zXYGU=nA?iVX&tUaNJ)2Y&-YHN#t`RFE-Qo32T*ruNNw+|IRDEojcm4~!(VHp`FTfv zMQL#g)Dwmt{CKj`hdc7~lC+eYza&XRc1LNs^MEYX(3891xCal#^2{{lLhtEI&+f`E z5A>vOcdba+mfqb3+v3CmJ-$HHHo$aqPZ%UyGJ!epKsHiTu&1-=rlSG@_V9Qvlamz0 z_Za2?-OK&B>~>>BpiB4THc`MG#61?Dr_<|_gd7>^g8jA*kb=m5Q+<=7s{N+=CdF>L z-&Eg{QXIg3Q+*TsxR~qD9zs==YNs3lY@m>VR`uJ2ASL-b?{KXmMOFPyH7867(~EnuEC;8-HkT5o!30G`NZuc-22363a8BmoRXTeB%Yf^SGZKUB z$fJ%keYHt3_||ZT4;w1g0}=67k?UZG+qB_Mz;}ae+Op6f{v+68$U-Baup{k+a_2K| z%nxQxCrE+^+t<56Hi#spgXlPe=pyoS zNP|=8njaIi?~Ut|&a-o?eUY%eEKmdyRrSb)xIFp-eGR&M>_)ObHL9ole4`#X_SiLr zDV&<)kq|N#Pobw4nZa%~!w5EzLbZK^lNp-yGnq$JW`ZC))2_~Q#77KHQ)ixdWP}6n zUe!5*!M&>DV4NSAoR4Tu3MPC+b4jVpB%--=UtG*TmU&WH5n$P4?RPpXiYV@LPoPDg zYC@8M5%GjgNT;sPJz*1)6he4{2`N={7V}SMhP4Vonmug@8`0F~o|#2!oo1e#I!2vh zKKG2Z*6HPQ&)5hdMQfk25h5vV?K9TexyAfQ=CZQ#|FHKa&~;`>nc&;3<=6gXEq;=$ zCwX5arIp^7v}JioJH6$TomsA|Oroao`Q*OA{%hGwvw~0&Vt$IDl;U3y_3qi^Fr5duC*Bl59 z@PhPfHGMLdVfW7hgSGa!#Df@@GxnuW0+AW}QYfLS8T(Qw;Y-cfmtsl3)Qo+p#%yNJ z1=t0uAU%f!#ZQ541Qj6A=T?B#BOk$Zd03o9#V4U}UH9<@c1IT*6eYCq4Fgl61ln&f z87Dp$N@yX|SHC2t|8+|V2*^f(i8&M}vU{nw(x|Djh7AMI1yGv70g9uL2Q0TWVXLZK6FLPO zBkQ_XB`7MEu>0NXIm`~Tgbv?3J!$4g;w0{8K3qiv5O1or(OnAsCGhhBPysDLcnMhG zH(@4yN&1sSjL+29!Ag2zWpj#ey?Al>oVv?9!sFzXix>4AfF^MGzFkG+5j#M!^6mTy zS3-B*er^UwE4h~eN-XnHSWmOk9|H#XYizwx;!?42-*u^sZ0AgYuEXNOgf_=LreM8z{;I2N6zCA+>NB9Yx6s5yY2AODcBAq0MNvTMI9qATB=9C8xVtO|1p zB9A5^;N~FCNvhisG4=KE5Xi~T?ZGCyOGa>e;%+g&Fn#OxB6AZ2dHqjjG8=NMxR}2p zYX`7sGO=j{EzM6%7E6Qqk(tsQACZjHe4Oubak+#n1|>%E5y(9xZ{?*G<8^d<&o@fbIGW zzQwDGmWU}&{Rbh(XcHF6iR)VVY94+mN|qJBkBu#&E09ZD0zhIg5MA*DVeW0BD}Er% zy-jolVo?6D@2o>t*u^q*#SbQ{Mr;y!bOq92hvPegdAHSwdkAO^bHLU@7UCfF93ifR9n-~C?`G-8sF z+!Hfz?+of~{Hvv(QBP_^Fh`x;$H{`8l{c31cGdSO5-r++#kB49lCl9O1M1KvWy9Q* z%w64`;pfWJRk?ayB_lm-G(a+<0t`EEHr)i*n-(UHvV2Qi1w19nSWR}4#M6AdR&^RE zVV`e8XzIg42}ghy_#q)oBPgNGT*m!803*O3ridx)6;FIn-ry|LVnPf`sI$ep7_x~i zS?4ZHNxcO=NjxZHnOUFMpmGFTw!Wra4$7ijZGVV^G9E-#?bbb%K&0Ic$|#|#b~`Ae zgoARs9h6zpgK|3#%5)ll_LVN|CsuSCP-ShWuZr#Mto4dqRMm;&Ke>S?QB`N|xM)sT z(yBVUo{?T-HSJ3DYOh&qS4~HNJe*XPVnA$!u=o}SCKh&Y>~Y6c4$;B<>50kPd3>OS z2k!fn@J*>U%df ztJX;My&EB*gKcU;D z@Hh@0Y^~Z^enQ_C*{wdmJLrzDUJxpWrtrr=fc5g*7P2)kfW3wg6vW?+rJF;G)7Z}! zCmgYy(wrQ)Rh%7w&UF@R=iT96l(R# z^Aof1bF7=bH9NOZ9H&mhVrvF^=>o3w?+#ibUA0rhN~5Dc8#G_Q0h)YqN1py;K}+PC zQP>WMCLa>GP~C8L`6w#r131LA80tF0>@7hJU&rt?z|qOzuTNILi?Hg+&SXJ`?zyQ_ z|N0;seb-JQuP!^4<;zBUc%E{@zCEa#yLl5y&t%v)6s(j5hHhs1&h(-n1RDxk=)b)D z-~~@dE>hNCME*qc{j9-aHhLS8ZuHp5qbEkG)KpX8&;CO}je7>pD>ajR*v-v`Lba4J zIdKN1R@Dxt^1B}qpc=={T)iRzGbJA=^fA>FQ&W)3*qqq$(OpO2unZ+Jr4+J5E+Q;x zjZ12!$jI;ke}kvxDWvzCgjDjt0FmK^{!b=@mTU7Ia~vyf4n5pw&4Rt9n~U?~q4R^Z zvu?OM&enLhBWTY?z8*4!<0RS`9Va^%5dI8}!|;dQ2`ggjscRQC^K}fD#`tWp8{@EP zpDmmo8v`V*>@7()iyNtI8-{h{t<#0VH}Iyzqb4TsM` zoYWQW+nC=eC-2QXdH0r`y!qyk)Hx({v-g5pKVi#j_BU3jIdb1>-XS$_V$B;@u9@#; z-vYxm9wVBRE$dTw$5ow=cRKoj)xAsV-om=`E7z?rg5h;ISCA2yYNc%1Sh6FBs~dt) zl;QraRlG_JvIx8FE%rMce&ziR@3^|l`W=1Xk@~GKp4{}ozU8tOI(LLEb&}Q}Aetm4 zt+y*lT5Yt(!0-*!&{p}01J}C54*7}GR#oDl{KQeKI^pE6TD@2UmwNuhv45S&U(Ip= z7RXNBx+a1n2&~Db>wRKp9_Q*6Dq)zLdYrKJLELIcc}$FyTx2M!G8^D`rVpYJrlRI) zyU|mm#ktW_M5CL0G%lL&no@#iLe&JBG+7D-v_0!Y7B(=8OnL-%NZVTt*rD=UtCza? zV5_A_`EsFw1VGhUa_2vw$!rJ-8s5Lc%k&w25`C(L7_dh%ZM;~NV~@HLQBYj_HH$IYuKcAn7j2goQgYAJM1+YG&}rj z#7J~>yLJ&((Xnm2y#`6G)7QoXm=-Y%wb5+e>1$)ek4`hLLqzOK^o1f~7m`@B6_DVv z>2Biy3TRWeaR4P$)$Id4ko(;}&;y0SZsULmeLdDD6wsy~>k3MEt;gDg5?<>u4oI+< zjm7~D;$X*|~gZ%ETb^sz8jC+wCQhSQNi$ z)8H$4{~Gz7uU2_pgRkTv&r`OBl({LfC6qEZ)yUjYA#<}0R0wZq#bz6*D%fqdfvSSt z<`5sVEzt$aijUcb&%jzBN9{=L(puP-9aakv64~@loyrER*lC|fffYMVm{efJ&Sn*) z6}UX13?zn?I7i3;h}YxW1NV^445s#I{#%s5ph2UK5_&XfA0H*WH<)!W0e<{J zzyzSvB^5a34)*TJKu)ib;%95JxRT$KHp~N+1X&Om$}~r>fXGw0V%Ge<2^_u6n!gu* z#AFM!>H8ChwdITpupf#IeoGkJ0ZK_7k-38cntH&Pj}jg{V9ZAewHyHRsZl@)8ifOG zhou!PsYc;I`ynHXR}WgqGc~Ip^kg}X4_e$7+ymKzu$^jau!^qtIWF9AgHgj~OHm1$>ob_Ek{A+&X5lQBcBb$JQ%A z4kZvjW&k<*|EHg^I29YxlJ6hQWzC(BlzvsU6BT6xZ*U!VlC=PddKOG@?} zLMQNp2i!r=r;Zv~jrOGI0^9=G^TsojK=wR%#?g!t$ewRMBBPllC40UDVZwzh9)8Xi zJe)Vs+UI<0xlTT33QXMNleXXiA8{%1g7TF3h)cFw0KSmTTuv2qwLl5u^0JLfltBHm ztrjTZz00;*pakldZM8rN^LOs# z}RRiUUw{g?~ zT{WoUSTLEoozCqRi`Xd~U`uFbCF{Oxtl=2=E?PV3Tg&6(q;D;GJLy{spZLsF=9X)% z8NS`6sNFkVtbzhX4EfINoxX`WRH2Ez__fp=6`G;!;$6xmA}La_V;q$8mBZz=DgnNt z-JET&wMb+omeA7I296tFp?}Z3o|$zmH9NMu#FjcQ`1DNGptaOF!Kd$_r3ZztFzvmO zx|`1J^r~0KRj!+=c||h^`1xUkotyE>S5C|~;E=6jfJf#x;K^krwDpZ$hpnyffzK>t zmRwuSQ0*?Ut(~D>;g5=^Ukh!1wnsja-vNJgagH0)T3qZb{Tm)0u z(h|cZ5K^#M#0|oaeY1IJx$jwwQ&alBXEBej_dSbw)_IV5%Qf3fy6zI2t(UO8yy;o& z?78U=M|H;OAQ#ga1NE{nJ?YGwL3j@U`?`yI^CIlj*_t3Ta_#D6ILYDHm1`F+K=UBK z#-43Xo$UQ!Pq~11B&0QeAQ%v)GT;Q~mu6;m<8SFUElI$o&gs*W$axOn zAaGdz^I&Nb;jm_%0Pa;dtX1?C3;1redN45Iu(mef_JI;^1^z+Kb{Hl&5_tSI%pV~nj+{y)M6#*`D@vV@x=%8>Q3G`+&bu+GRP;d;#Q%CPw^L`Ea)3F zGnVTOEG!v|3tBjwI+&!UcYQ$sQe$dwF@+I~E6xfL{haNQ&uK5n7p=2FCLa}_ z%ZlW>fDK@KQS#t9K8w38pIyJFqdk5yh=D{0R9xX^N|tV&=~>2bE&lxWySYP=FH2-jr(oQDX3gIYtP zKbf1#$3|cN_S_8clN{%It|UqU0IL!KR}wY|76Bmh@9860fc;#DnHUkp^0-f26dx%m zCrw=9lG{+zCb1l`08>M@39%e6v8qKZ4BTX~#)oi9JI&%*oMxMRL~hb)YEx{yo)4RV zjX#9*u`Jy!sbe_SU7MZ8p%bY6g}IWNep!$7Vqw6+#yAvxC6sDfOis{4UP}z<&;mID zn*b}pk-4Sgs2rJDQt_ju^N7UT!cmEigPplnoGoXU?gNJ^%hIm`cFg9>*YV-Ct$`GI+I&}dvTE}orz!HZL4bc% z_=Qo@0r2x!1pNUxEj&PRpj5z$KVI(6-@(GfFEo)~QtqCbn|wVA8i4DDe^;e!9BR;( z4&N5h?-}X=_t2IOC~Fjnf(JLGx>rV`Fv#x)Pl*bh4Ykfmlq$asa0bdruP|J?@Btch zY{>%dKQrU%c6lmvq3H6gXI$MbupUM&d?a9Ld%*ferJ~EbC&RG0J)R78G(Dch44c~n z7E@$PP*&|tHA7^Rfo>qW>6z)p2l+RlS@0BVK+*Z~;Vn??tyTOwN}$+_yx4n%BBJH? zrFKA9q1%8!AqRlChBX#bRJR#9K(R(opAmEWyn>m!i@tVoNJSeNF}H8)cF`?BG}@fl zt#U9AKbry0??%0%G2M!KoBVRfS!?uh7xcG!H6thK)=pLA;vVR4g&LFYA<%`=rLGh1 zA#PbkKtLSlT#35@7aWR>JQxD@X|s6&OVQjNcm`qZEiM3)N91Q|abgxo@MS{}^?;*0 z>>HuPYVA{_gcj|nz!i?R8X)xp}iYyz}s*-ZK!pZ?9E$Z3j>tXkHd0-D`^DYc= ztj-h;1``Z-nnnax{6?h0>xy~VlQ@<{=3d8vlCGN}_GLA6JC|oHbqf!;>blnAt2o(w z4{$Lm^kT_>I(3vnZ)~3w$%bHQSABGUi;Cz^BiNS;WE9b#MyxL@p^r}^)R!V%DWdPq z9B^`uL$BK<$~k%oOV7TlUF9PBeu!rwor9SpRRAbg%S-P;jr`2pIIHz+FH~ z4p$xWr|v)57IcN@EF74N_YqTQc4Fp{kKLVqn*$XQOx)RewR86>Vp=YK&px@G<)7Gj z{nG&5V}Czw-F64PEkP5qYLv$3X2)l-M)1g{=$(3AzC6o?1E;pG=t(^*N80d!zBj1B zRxj^&w&ETWFowL2pJ@xk3y>&-e&MG;3f2ojS45HrN}4N(W&08KRT zW#03kgN(M>m3e3{P2MizEtLzb#N(++pTG(r9Fz(Kb$0CvE@gKk;~fN!;_NsAaA$o}%GHfnH z1xgXF$i%e3^uaS&Vlg0`)M96yJkc1rJciI6*UDv%CXqRwD*HZVqhc+=gA&E9g}J5q z&St4q3t9NEINoum?QFr##^H`=T^B|? zwt+}Zp_MmB{k>7%dhg=TcP4|@*ql%yAiFm}+CDk@%VZ$n%1`=1$Ez`Yf*Jng(JYeC zyG3PO;ZlZ%VM5X6@1GWoRdJ!v?A~%$hCh`KYFsthchW&!q>+GE#OIcK&QOX2G4W&Q2O=Wf4Fbn=ezhA# z`e5s)!+ETXrI3s7O*|;&OGsEYGbM^TIsn3To0779T)cMr{sf}TApA58YU;v?s0AT7 zEBZcm2&|8X-OJ1rgnfz&{%#Hr*>?QVmPVNM{xHs?=X#$dh(}K*M*AM+0q%9+?D_An$9c#Os&$|jJF*p;)*)kBhdi7D5WX5M z0-=7eYdHVxRhR~EOq8Z4C7zQAE;7!=H)RfSU9i(aR$&mzj#{k|!bulvpZ3gY+} z{jk4kRrrLPD^}$WTIvR~a#a+<9cl#0_fXYlUloP$&8X^>^a?`wRtVt-@?&yt50>f@{ZE_R^K&B>sw>e`c_Em@aIx#eLEzpy!x^ zenXc=M|}cr-mDVq+itHEi?+!#loI`RUn?d0?f%&@viEqSG z%QL1hu{5~=n@okTRSV)fJ#mWjI}syayGwC?Cp;<$Q-N>~xoPKy0X00c_*pb8voklK zhG)Bi0lh0zYokk^!78&G@mIc1*BqqLc?yAY?mpb!;SK@Iw+>myr{VXx+Llqazj%%^ z15cO^j>w0n{QP7Fo~Hn4V9a~TJvIzanAZI1@U$Iwk*Wi&Vb4HX{D(aQnR{m#45Z#8 zk%AF?FNXUHNfPTpC(Q3gEBRjErh3rXi#21j&}jgW2g`N`RsnyC$BwfYZ&w58?f31X z|Nnl!nKgjkek_p8u#iYK611}ew$`=uKz3;LY;42?KIm0J^y@$9RY8rY;viH(gHlBk z1KO<5_2tj<;BRZ}&G3w1-`P`cLgNqn#v?mG`mkYu5~(IoKHSn8{5|-Np!Lm6v6jz$ zG6kcyMrd<0>?T}i#jZCaQ(*BnMvmNAdrhX3fn765Vk~ao;Ql{7oIjNqd(-L`f!&GHPtk|k4se$rBzRAzE}AP zWN?MSTdROAa~8HtkjL>y%$U~aaf(i!i_Q2xCsN{wL`H#&CmI!kh7!1VqNmp~L$)xz zTt6~HjzLnQ_m+uKz$-yk@&sG(Sxy=ZDv@dd!IRaR&jlqAJlWfa6QelPolZO(>i$k6 zMhGD_qWe3eQPWsJ`_6d8BF|fAx>c2^s=hObZKto{*4fn4vMfR8hS$z&T2pEPd9P>C z-9szR?isd_51Ho@*OPGZcjs|`E-R1saB*T5Y^Nxlr?VKi>BB$xcgIvx12ddT>^Xq8 zKBGA5VEL z-(PMjv#sBrz&N@8;J*|l-|wvpS}=H@9l63@I~`v{1!bOj+F>Ny3}V`%lhBFej~ zm6dlxWeT47*IrY1SFWX_3h%30O9zkwHP^nIrlfniTuHYfqGYp&ZNdL?=;(eo6;xX- z*g_tzU40D!3wucKlh)K?~eR-GE1dj-d@f9ViKj2EBZ~4qVO^;&67~b z@o4nklyaotwSKB->!qSCSEgvQ9zL9&?c<$_j2Qdd(z9)FdbVT9;ReyOS^J}Ewhh4# zsiXuo8ytCZ@4k06+m}n#M15HZKj8Uoxpz^hFKhqm)t9-*4T{%jkLk+!NLfhIjseOd35(wBuO3F^ywy-tO2lHQoUtaq8d ztT(DJ>#L~5a+bxllvvc4^?6yB`m#Q+#G<~eFRCxwRI#c@(U)!VRZ(BI$yY^v*`}zz zY|E3;mu>O&QD3$trZ3wP)t7C1lKQf3zEa_~)N6^TygM3diH;{uhFYTIFfn>9(FqOlZ(5=g=E4cR5XhbA(!AcP zB|3rN+FnaE64Mfm#I!^sF)h&uv_uA*I-M9JY|0K}{(SrhN+S2_avjlWz^48H2Rb5+ zvYB(KLOS;wq9byzOssS?mmAB^=U+`4B2^5sYxpYXy!#3@KIgpq3N5GSy!#4aUFS0w z%QZfBDW>sxu4;R^#^*vz<8vwVd|cyW7o38JiYG)$jcI(YRDCJwH9nvEKoHM&I6W~m zc^gR)0kC&kpXmt~Hf0Tuig>iZ`H5T8vjVVr(papSp!OuKa*W*>Lolg&rZR#_k@OzX zgpeu??$9vK1kMJ3s&^O9;M(C-XR`nEsi5}ig)yLK5EGPmq{#_=!IVLh6MU2quStZf z(_2;EVjw$k%0a=aK6MIs4_GehrXg$R>GHq`Vh#6H=1d?xc!)=4%xEl1IvrsD!%9jO}>_!nr z!iDk0xz~%c<_l4$*RJvsdk}pj%HXERbHZpeVsWO##xo@+`CQfr|B(x|c+i@T&nha= z@uh_s!@AYTg=-5l($ytFB5!u8VAp_5OD)c! zKQLoTjGT9oF*;emHKF)c&~yd5_=QtTiw_=!Dn=4)OSDKciK4M9uuIPsA29S3hZ^I8 z@d0%mao#3)Kx)4p)Q!zdOuqgoH6y%{EgD*D7@f#n7t%igpOY7hH((ZeB1B~N3C1p6m@@mVg@s`B!gicouclK$OUQb ze}aZ;RF^{fP+12M$fZ}LY+Kr zt$a3U#wuD|n8HYK6m;MM5f}EcY_xz%lYh-9p&ccDRY!%mOr~{>P>FnXwnHAbw@(I* z_w>8D_c`^6Q;obI`?8?WV6PYrph@9#F@Z!zQv$ZEDflwkeX`b%q5eY9O6$Eb--R{f z$7Z)Q2$crX;>V6?1IY;WrYi(|RDa9Y{BW>7PSez&LyYaE`<+D!gVSBeT5ChWKa?E| zswAAgOXRw&0aqDpAIW+3DXIMTQ({+e#MFx$SXnnr%Ez|5PDtn@44?SmIrCV9XZg@U z8y;ck#0SoaM;UI_v)?Y|gC3&j&b!MkCu7pfQ!;%R|!>N2VuSsJ34|rkN-IEcx(um2IKNX~kG=-u1s0@Z=FS zo75)|D|=twAC}>7mo;jd5G6~=T8-P5a z-XK9gJ70j54j)nHqDc!!7`2*GZj)D-Qm$=+!c=GwfZFU|BL=tG>*R<~Y4)$tW31V~ z1`!p(t_^QT>}BXWN|G(Lt|i2@GF~+TSqi?UJu#HbeI)Ns?NM&vVw?k_f|k>s9v2pZ zJWqqA!$U(j%@gfXTq+Gt&kaq@O(K3TPk}f`56!?euCzE5W9HDNP>fKs6}#7Nd`*I{ zjKU`R81j{c@1s2nx*7s@+j5_R_5)yTd?a8lY3Caq$y3~dt0){&5U~N`ByYJe`4OO1 z>^TCn0HZQdPh1Sj#6E`uXCg_sn-U=h6cwv15w6Y1zlLl=HOQv`?0JOf|H$@Ca8$_%Cn+c_f`C5PwZA0AtpD0Hpci8_RnG5lKJABlZICg`IGP$LRwngENc3HxgWTW)YMy zvS=3Rmw|=CCg{l9@>Cd@Lx3ppTznM_J|eQ63Q7^L?&obX9J@h9gTh*5r@6Sbe{->hkCYD>-5&Jcw0911|L_>V$xYPO~&=?Xqlq z$rMdmyAU`Fha4_ISepi6x44hC%jkZzHoLJbv(ptGXJ8XV?hH0)6k0r3tKfW;(BeS^ z4SfcSJfbxXCypi!iLY{Gbd?u;zGHfY{f<*+7)hzP-?8sc+qx{3u<$Ing6N8b33ug= z=*GI@9-9APaX}VkL_?5tdkYfzBTS44N*EpcEiakIaNJ+7+n2_0+>h;x8-q;d1E$eO z0sL^$2T?++516?QCGg__%ys%2)~bUkNfiYeTpwI?L6q>?LHqD1;kASK@SM?7IE)?+ zakGr?i-Ql*D|${H_PyfDaoG2YE5~8qE36zx%yB)H;zDr5jsPg(wIj9!qlDLvUn4Qj@Pux2TtPypRf;{<|y(7e&CZS9bjqM=Ny6; zB~Un7t#E&o@Y+eNgJgD^3>{64%E<%;^lj9F)uDvGjaslel=vi^I_Wcj5{Qg~h?U@M zGP>cUxC7uGTm~4&ax^z0hdP)7&L%GNP)F58MB^9jzrR(H2W0G71b*ZoN4QIbDb&M9 zhCJ{E^5DGj0I@yM{PVU(YuwNC#siJ}c^=I#f(PPVe*rto2l7{OXb2nPR*(MEl2b(> z!*_@Kfmm8B-qJItL?S_ojEJWi-wHk3a2l~q1J$5GE@LK2=+Xt-oKQkPE}%g-q(PVg zm(ZYVD>dkfKg~UUYdEnk*~rzoddatj6YCOM!;uT;j{?$OV&q12XVEVwmn(iXf*cAq za@XOjjoDXQ$FJrK{A$)^P>ghmNu#~XB- zqXe?!7CE(wg;#AIL;;rXdy>}AVxHM;S0#9T1pow?fNT*@1=~!u&$Q#?2?9nLxPU3wu>3+3qAdj2(u@Tl`IM-y? zeK_$BG$I_1gdlwwE->;NL-Q>gnl&7nEOetah(DZ7eW@ILp+d=Gtu4N0W(9pz1nQ4S-VSqe+C`kpd>!*CkOOqgU6W@<<7_ zBPC@jFV21lE{weyMacn~K@rQ}$C5}wPFFw)M2uorE~N(FvAe6Yh6<-JagiY;-9aTgJ}*r^~}^-amd-?L5u1V+d1qFLXT#A%nFrwC)5&A_0#Eq63>V2NpP;-`{TE5-yNu@r89LH-{0@XcOA#Kl;{eI$j;f!4<=XM z&7>+kg@)iU9o8s<{0}Cv#jqhLg5(b-vBz+t)n}_dlT7?K))1ifGM{m)M?D(yBd#I! zY>1TD5GLHt{8%#e%u3s;RE4L|5Im+0k#yQ9T0>9-$sc1w*e(L7_JrK;6!?^b)07Z(9M3y ztc@aOKSz5#r`eCc_qh!^7+WUlz~)G)L7ie7<=uEYZE!4g#gv31N`q&LWklJf{N*hXj()iC@oC z0*W^AQABk=?IwOhw(4h-iGOVK4G`AM&n6MijT>77=G#AV^R0pN%}S|EW47w&l8Gp#=E3WXHmzy zIvan1vylr&Q?}|ClZjupCIR%B`9;@}CN$}nT$7sEBq^Pjm~~aZl1#vIgzak7j@!%e zmlKo7oeb8`RXqQ5!3DnBpQMz?;?p$NbY6obeYi+ zOTzR`F&DYz+!k_0H)ehfn=tvtBIf?Dg-MsWZ2cOOF56wql`keUJ;+*K#fLL}Rt|6f z(`4q=SU5Vl5W*CZLg1e!FTG+ZwQ&@y`e(_^Klh1^Efk)+sELhTFucsKClRnddJWwF z4Q6qMvp?FC%vSw&GW9RPmTmMvGOjSr38S?}q${qEz(MNj$QQxh-%bMKsr^6%YZL+U zv?7@B+ewe|WW@U437L>26QpcUKJ_-Foo$O;$7Kl8stbAJEfOJ#8$VV_@E!WQtzVBn4ADO9JNF&YNf#kt&?DONX! zz%E9LbS7E%!$8ITm7kJWST3++Z|s>HNS08Xm>s`4GjYp^tO0?}tpRL~N5(86&-4O< z(mrX_^Q%D>aIA>B3Dj$b0b?b&USk~Ys82AEctM_V;mlLO>(v(0(7-bIpoTL~%QY9y z97yLMhp;Y?xfdAjoEa$@?MMS!h7c&Z=-WWTY=i$SclQhmjYu2T2N^P50H-xT21*Gb zB-bH62{OSF(U`<#Edor5e78*Et#Di1urh%?C#$XX{r?>4777@dL}YV>hQQ1!7J|VI0j>-{DhP1mAKMx#`kbFC%Gv6wf(kQ>oBoPrC~M#n<>38&-MIKb1XO9u1&T z7}FnxFmXJs8315!P-O`SG#F_2G78a*1NLloG^oRA0?<(Xy3JB~3_m56kA%;hmW&0_ zw-7qD8sHEt0VM(;qnaF1l8(AKOxz6P{4o}gJn(XN^j+9zm!&#^>v$e$Kr zn_ITj#Uj3J>2!9>*1=@%nV`9xZIAN4;03P+ZG`%baF^kScru{l#h|^Msv^+eWWmM2~0l)>>uZgbFBnp;|cmjIi{byZnj zuUFZ;$m*)gsIIQj<∓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