diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index b534f86ca..874cbb3aa 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -41,7 +41,7 @@ publicly and we'll get in touch with you by private message if this information - [ ] I have provide data or shown output displaying the result of this code in the plugin area concerned. ------------------------------------------------------------------------------------------------------ -# Centreon team +# Centreon team (internal PR) ## Description @@ -75,8 +75,9 @@ Mention the automated tests included in this FOR (what they test like mode/optio - [ ] I have **rebased** my development branch on the base branch (develop). - [ ] In case of a new plugin, I have created the new packaging directory accordingly. - [ ] I have implemented automated tests related to my commits. + - [ ] Data used for automated tests are anonymized. - [ ] I have reviewed all the help messages in all the .pm files I have modified. - [ ] All sentences begin with a capital letter. - - [ ] All sentences are terminated by a period. + - [ ] All sentences end with a period. - [ ] I am able to understand all the help messages, if not, exchange with the PO or TW to rewrite them. - [ ] After having created the PR, I will make sure that all the tests provided in this PR have run and passed. diff --git a/.github/actions/package-delivery/action.yml b/.github/actions/package-delivery/action.yml index 1ba3006a1..82f641fbe 100644 --- a/.github/actions/package-delivery/action.yml +++ b/.github/actions/package-delivery/action.yml @@ -111,7 +111,6 @@ runs: uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: script: | - const warningNoPromote = 'No packages are promoted because push is not related to a hotfix/release pull request.'; const commitSha = context.sha; const pulls = await github.rest.pulls.list({ @@ -123,25 +122,31 @@ runs: per_page: 100 }); - const pr = pulls.data.find(p => p.merge_commit_sha === commitSha); + core.startGroup(`Checking pull request linked to commit ${commitSha}`); + const pr = pulls.data.find(p => { + console.log(`Checking pull request ${p.number}("${p.title}") with merge commit ${p.merge_commit_sha}`); + return p.merge_commit_sha === commitSha; + }); + core.endGroup(); if (!pr) { - core.warning(warningNoPromote); + core.error(`No pull request found for merge commit ${commitSha}`); return; } - const prBaseRef = pr?.base?.ref || 'unknown'; + const prHeadRef = pr?.head?.ref || 'unknown'; let releaseType = ''; switch (true) { - case /^release.+/.test(prBaseRef): + case /^release.+/.test(prHeadRef): releaseType = 'release'; break; - case /^hotfix.+/.test(prBaseRef): + case /^hotfix.+/.test(prHeadRef): releaseType = 'hotfix'; break; default: - core.warning(warningNoPromote); + core.error(`No packages are promoted because push of branch ${prHeadRef} is not related to a hotfix/release pull request.`); return; } + console.log(`Release type: ${releaseType}`); let fromStabilitySubdirectory = 'testing'; if (releaseType === 'hotfix' ) { @@ -154,11 +159,11 @@ runs: ); } else if ('${{ steps.parse-distrib.outputs.distrib_family }}' === 'ubuntu') { await exec.exec( - `jf rt download "ubuntu-plugins-testing/pool/${{ inputs.module_name }}/*${{ steps.parse-distrib.outputs.package_distrib_name }}*.deb" --props "release_type=${{ inputs.release_type }}" --flat` + `jf rt download "ubuntu-plugins-testing/pool/${{ inputs.module_name }}/*${{ steps.parse-distrib.outputs.package_distrib_name }}*.deb" --props "release_type=${releaseType}" --flat` ); } else if ('${{ steps.parse-distrib.outputs.distrib_family }}' === 'debian') { await exec.exec( - `jf rt download "apt-plugins-testing/pool/${{ inputs.module_name }}/*${{ steps.parse-distrib.outputs.package_distrib_name }}*.deb" --props "release_type=${{ inputs.release_type }}" --flat` + `jf rt download "apt-plugins-testing/pool/${{ inputs.module_name }}/*${{ steps.parse-distrib.outputs.package_distrib_name }}*.deb" --props "release_type=${releaseType}" --flat` ); } diff --git a/.github/actions/promote-to-stable/action.yml b/.github/actions/promote-to-stable/action.yml index e0b519d01..1d93f0c1a 100644 --- a/.github/actions/promote-to-stable/action.yml +++ b/.github/actions/promote-to-stable/action.yml @@ -66,15 +66,21 @@ runs: shell: bash - name: Promote DEB package to stable - if: ${{ contains(fromJSON('["bullseye", "bookworm"]'), inputs.distrib) }} + if: ${{ contains(fromJSON('["bullseye", "bookworm", "jammy"]'), inputs.distrib) }} run: | set -eux echo "[DEBUG] - Distrib: ${{ inputs.distrib }}" echo "[DEBUG] - Distrib: ${{ inputs.module }}" + if [[ "${{ inputs.distrib }}" == "jammy" ]]; then + repo="ubuntu-plugins" + else + repo="apt-plugins" + fi + echo "[DEBUG] - Get path of testing DEB packages to promote to stable." - SRC_PATHS=$(jf rt search --include-dirs apt-plugins-testing/pool/${{ inputs.module }}/*${{ steps.parse-distrib.outputs.package_distrib_name }}*.deb | jq -r '.[].path') + SRC_PATHS=$(jf rt search --include-dirs $repo-testing/pool/${{ inputs.module }}/*${{ steps.parse-distrib.outputs.package_distrib_name }}*.deb | jq -r '.[].path') if [[ ${SRC_PATHS[@]} ]]; then for SRC_PATH in ${SRC_PATHS[@]}; do @@ -86,7 +92,7 @@ runs: fi echo "[DEBUG] - Build target path." - TARGET_PATH="apt-plugins-${{ inputs.stability }}/pool/${{ inputs.module }}/" + TARGET_PATH="$repo-${{ inputs.stability }}/pool/${{ inputs.module }}/" echo "[DEBUG] - Target path: $TARGET_PATH" echo "[DEBUG] - Promoting DEB testing artifacts to stable." diff --git a/.github/docker/testing/Dockerfile.testing-plugins-bookworm b/.github/docker/testing/Dockerfile.testing-plugins-bookworm index 95ae97a30..f5e70048e 100644 --- a/.github/docker/testing/Dockerfile.testing-plugins-bookworm +++ b/.github/docker/testing/Dockerfile.testing-plugins-bookworm @@ -2,7 +2,7 @@ ARG REGISTRY_URL=docker.io FROM ${REGISTRY_URL}/debian:bookworm -ENV DEBIAN_FRONTEND noninteractive +ENV DEBIAN_FRONTEND=noninteractive # fix locale RUN bash -e <); -close(FILE); -set_spell_cmd('hunspell -l'); -all_pod_files_spelling_ok($ARGV[0]); +# get_stopwords(): reads the text file and returns its content as an array or strings +sub get_stopwords { + my ($file) = @_; + open(FILE, "<", $stopword_filename) + or die "Could not open $stopword_filename"; + printf("Using dictionary: ".$stopword_filename." \n"); + my @stop_words; + for my $line () { + chomp $line; + push @stop_words, $line; + } + close(FILE); + + return @stop_words; +} + +# get_module_options(): reads the Perl module file's POD and returns all the encountered --options +sub get_module_options { + my ($module) = @_; + + my @cmd_result = `perldoc -T $module_to_check`; + my @new_words; + + for my $pod_line (@cmd_result) { + chomp $pod_line; + my @parsed_options = $pod_line =~ /(--[\w-]+){1,}\s?/mg or next; + push @new_words, @parsed_options; + } + + return uniq(sort(@new_words)); +} + +my @known_words = get_stopwords($stopword_filename); +my @module_options = get_module_options($module_to_check); + +# take all words from the text file and the module's options as valid words +add_stopwords(@known_words, @module_options); + +# prepare the spelling check command +set_spell_cmd('hunspell -d en_US -l'); + +# check that all is correct in the Perl module file given as an argument +all_pod_files_spelling_ok($module_to_check); diff --git a/.github/scripts/test-all-plugins.py b/.github/scripts/test-all-plugins.py index 9fb7f6fda..5596964d9 100644 --- a/.github/scripts/test-all-plugins.py +++ b/.github/scripts/test-all-plugins.py @@ -74,8 +74,8 @@ def install_plugin(plugin, archi): "apt-get install -o 'Binary::apt::APT::Keep-Downloaded-Packages=1;' -y ./" + plugin.lower() + "*.deb", shell=True, check=False, stderr=subprocess.STDOUT, stdout=outfile)).returncode elif archi == "rpm": - outfile.write("dnf install -y ./" + plugin + "*.rpm\n") - output_status = (subprocess.run("dnf install -y ./" + plugin + "*.rpm", shell=True, check=False, + outfile.write("dnf install --setopt=keepcache=True -y ./" + plugin + "*.rpm\n") + output_status = (subprocess.run("dnf install --setopt=keepcache=True -y ./" + plugin + "*.rpm", shell=True, check=False, stderr=subprocess.STDOUT, stdout=outfile)).returncode else: print(f"Unknown architecture, expected deb or rpm, got {archi}. Exiting.") @@ -95,8 +95,8 @@ def remove_plugin(plugin, archi): # 'autoremove', contrary to 'remove' all dependancy while removing the original package. elif archi == "rpm": - outfile.write("dnf remove -y " + plugin + "\n") - output_status = (subprocess.run("dnf remove -y " + plugin, shell=True, check=False, + outfile.write("dnf remove --setopt=keepcache=True -y " + plugin + "\n") + output_status = (subprocess.run("dnf remove --setopt=keepcache=True -y " + plugin, shell=True, check=False, stderr=subprocess.STDOUT, stdout=outfile)).returncode else: print(f"Unknown architecture, expected deb or rpm, got {archi}. Exiting.") diff --git a/.github/workflows/as400.yml b/.github/workflows/as400.yml index 8a473ee7d..098b834d4 100644 --- a/.github/workflows/as400.yml +++ b/.github/workflows/as400.yml @@ -24,6 +24,9 @@ jobs: package: needs: [get-environment] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' runs-on: ubuntu-22.04 strategy: fail-fast: false @@ -107,6 +110,7 @@ jobs: deliver-packages: needs: [get-environment, package] if: | + needs.get-environment.outputs.skip_workflow == 'false' && (contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) || ( needs.get-environment.outputs.stability == 'stable' && github.event_name != 'workflow_dispatch')) && ! cancelled() && ! contains(needs.*.result, 'failure') && @@ -141,3 +145,12 @@ jobs: stability: ${{ needs.get-environment.outputs.stability }} release_type: ${{ needs.get-environment.outputs.release_type }} artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }} + + set-skip-label: + needs: [get-environment, deliver-packages] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') + uses: ./.github/workflows/set-pull-request-skip-label.yml diff --git a/.github/workflows/connector-vmware.yml b/.github/workflows/connector-vmware.yml index 2e6738598..3e42dc8c6 100644 --- a/.github/workflows/connector-vmware.yml +++ b/.github/workflows/connector-vmware.yml @@ -26,7 +26,9 @@ jobs: package: needs: [get-environment] - if: ${{ needs.get-environment.outputs.stability != 'stable' }} + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' runs-on: ubuntu-22.04 strategy: matrix: @@ -84,6 +86,7 @@ jobs: deliver-packages: needs: [get-environment, package] if: | + needs.get-environment.outputs.skip_workflow == 'false' && (contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) || ( needs.get-environment.outputs.stability == 'stable' && github.event_name != 'workflow_dispatch')) && ! cancelled() && ! contains(needs.*.result, 'failure') && @@ -118,3 +121,12 @@ jobs: stability: ${{ needs.get-environment.outputs.stability }} release_type: ${{ needs.get-environment.outputs.release_type }} artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }} + + set-skip-label: + needs: [get-environment, deliver-packages] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') + uses: ./.github/workflows/set-pull-request-skip-label.yml diff --git a/.github/workflows/docker-builder-packaging-plugins.yml b/.github/workflows/docker-builder-packaging-plugins.yml index f220d1baf..4ad9c1b1f 100644 --- a/.github/workflows/docker-builder-packaging-plugins.yml +++ b/.github/workflows/docker-builder-packaging-plugins.yml @@ -18,7 +18,14 @@ on: - ".github/docker/packaging/*" jobs: - create-and-push-docker: + get-environment: + uses: ./.github/workflows/get-environment.yml + + dockerize: + needs: [get-environment] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' strategy: fail-fast: false matrix: @@ -87,3 +94,12 @@ jobs: pull: true push: true tags: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}:latest + + set-skip-label: + needs: [get-environment, dockerize] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') + uses: ./.github/workflows/set-pull-request-skip-label.yml diff --git a/.github/workflows/docker-builder-testing-plugins.yml b/.github/workflows/docker-builder-testing-plugins.yml index 99c9105e8..2872c99db 100644 --- a/.github/workflows/docker-builder-testing-plugins.yml +++ b/.github/workflows/docker-builder-testing-plugins.yml @@ -18,27 +18,34 @@ on: - ".github/docker/testing/*" jobs: - create-and-push-docker: + get-environment: + uses: ./.github/workflows/get-environment.yml + + dockerize: + needs: [get-environment] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' strategy: fail-fast: false matrix: include: - - runner: ubuntu-22.04 + - runner: ubuntu-24.04 dockerfile: alma8 image: alma8 - - runner: ubuntu-22.04 + - runner: ubuntu-24.04 dockerfile: alma9 image: alma9 - - runner: ubuntu-22.04 + - runner: ubuntu-24.04 dockerfile: bullseye image: bullseye - runner: ["self-hosted", "collect-arm64"] dockerfile: bullseye image: bullseye-arm64 - - runner: ubuntu-22.04 + - runner: ubuntu-24.04 dockerfile: bookworm image: bookworm - - runner: ubuntu-22.04 + - runner: ubuntu-24.04 dockerfile: jammy image: jammy @@ -72,3 +79,12 @@ jobs: pull: true push: true tags: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/testing-plugins-${{ matrix.image }}:latest + + set-skip-label: + needs: [get-environment, dockerize] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') + uses: ./.github/workflows/set-pull-request-skip-label.yml diff --git a/.github/workflows/docker-builder-unit-tests.yml b/.github/workflows/docker-builder-unit-tests.yml index 53860637d..184f2b726 100644 --- a/.github/workflows/docker-builder-unit-tests.yml +++ b/.github/workflows/docker-builder-unit-tests.yml @@ -18,7 +18,14 @@ on: - ".github/docker/unit-tests/*" jobs: - create-and-push-docker: + get-environment: + uses: ./.github/workflows/get-environment.yml + + dockerize: + needs: [get-environment] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' strategy: fail-fast: false matrix: @@ -72,3 +79,12 @@ jobs: pull: true push: true tags: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/unit-tests-${{ matrix.image }}:latest + + set-skip-label: + needs: [get-environment, dockerize] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') + uses: ./.github/workflows/set-pull-request-skip-label.yml diff --git a/.github/workflows/get-environment.yml b/.github/workflows/get-environment.yml index d1fc8d2bf..14c1eba61 100644 --- a/.github/workflows/get-environment.yml +++ b/.github/workflows/get-environment.yml @@ -23,6 +23,9 @@ on: is_targeting_feature_branch: description: "if it is a PR, check if targeting a feature branch" value: ${{ jobs.get-environment.outputs.is_targeting_feature_branch }} + skip_workflow: + description: "if the current workflow should be skipped" + value: ${{ jobs.get-environment.outputs.skip_workflow }} jobs: get-environment: @@ -34,10 +37,128 @@ jobs: target_stability: ${{ steps.get_stability.outputs.target_stability }} release_type: ${{ steps.get_release_type.outputs.release_type }} is_targeting_feature_branch: ${{ steps.get_stability.outputs.is_targeting_feature_branch }} + skip_workflow: ${{ steps.skip_workflow.outputs.result }} steps: + - name: Check if PR has skip label + id: has_skip_label + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + with: + script: | + let hasSkipLabel = false; + if (${{ contains(fromJSON('["pull_request", "pull_request_target"]') , github.event_name) }} === true) { + try { + const labels = await github.rest.issues.listLabelsOnIssue({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number + }); + labels.data.forEach(({ name }) => { + if (name === '${{ format('skip-workflow-{0}', github.workflow) }}') { + hasSkipLabel = true; + } + }); + } catch (e) { + core.warning(`failed to list labels: ${e}`); + } + } + return hasSkipLabel; + - name: Checkout sources (current branch) uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + with: + fetch-depth: ${{ steps.has_skip_label.outputs.result == 'true' && 100 || 1 }} + + - if: ${{ steps.has_skip_label.outputs.result == 'true' }} + name: Get workflow triggered paths + id: get_workflow_triggered_paths + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + with: + script: | + const fs = require('fs'); + + let paths = []; + + const workflowFilePath = '${{ github.workflow_ref }}'.replace('${{ github.repository }}/', '').split('@').shift(); + + if (fs.existsSync(workflowFilePath)) { + const workflowFileContent = fs.readFileSync(workflowFilePath, 'utf8'); + const workflowFileContentLines = workflowFileContent.split('\n'); + + let hasReadOn = false; + let hasReadPullRequest = false; + let hasReadPaths = false; + for (const line of workflowFileContentLines) { + if (line.match(/^on:\s*$/)) { + hasReadOn = true; + continue; + } + if (line.match(/^\s{2}pull_request(_target)?:\s*$/)) { + hasReadPullRequest = true; + continue; + } + if (line.match(/^\s{4}paths:\s*$/)) { + hasReadPaths = true; + continue; + } + + if (hasReadOn && hasReadPullRequest && hasReadPaths) { + const matches = line.match(/^\s{6}-\s['"](.+)['"]\s*$/); + if (matches) { + paths.push(matches[1].trim()); + } else { + break; + } + } + } + } + + if (paths.length === 0) { + paths = ['**']; + } + + console.log(paths); + + return paths; + + - if: ${{ steps.has_skip_label.outputs.result == 'true' }} + name: Get push changes + id: get_push_changes + uses: tj-actions/changed-files@bab30c2299617f6615ec02a68b9a40d10bd21366 # v45.0.5 + with: + since_last_remote_commit: true + json: true + escape_json: false + files: ${{ join(fromJSON(steps.get_workflow_triggered_paths.outputs.result), ';') }} + files_separator: ';' + + - name: Check if current workflow should be skipped + id: skip_workflow + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + with: + script: | + if (${{ steps.has_skip_label.outputs.result }} === false) { + return false; + } + + const label = '${{ format('skip-workflow-{0}', github.workflow) }}'; + if ('${{ steps.get_push_changes.outputs.any_changed }}' === 'true') { + try { + await github.rest.issues.removeLabel({ + name: label, + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number + }); + core.notice(`label ${label} removed because changes were detected on last push.`); + } catch (e) { + core.warning(`failed to remove label ${label}: ${e}`); + } + + return false; + } + + return true; - if: ${{ github.event_name == 'pull_request' }} name: Get nested pull request path @@ -155,6 +276,7 @@ jobs: ['release_type', '${{ steps.get_release_type.outputs.release_type || 'not defined because this is not a release' }}'], ['is_targeting_feature_branch', '${{ steps.get_stability.outputs.is_targeting_feature_branch }}'], ['target_stability', '${{ steps.get_stability.outputs.target_stability || 'not defined because current run is not triggered by pull request event' }}'], + ['skip_workflow', '${{ steps.skip_workflow.outputs.result }}'] ]; core.summary .addHeading(`${context.workflow} environment outputs`) diff --git a/.github/workflows/nrpe.yml b/.github/workflows/nrpe.yml index 88e06daca..7d335f713 100644 --- a/.github/workflows/nrpe.yml +++ b/.github/workflows/nrpe.yml @@ -24,6 +24,9 @@ jobs: package: needs: [get-environment] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' runs-on: ubuntu-24.04 strategy: fail-fast: false @@ -117,6 +120,7 @@ jobs: deliver-packages: needs: [get-environment, package] if: | + needs.get-environment.outputs.skip_workflow == 'false' && (contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) || ( needs.get-environment.outputs.stability == 'stable' && github.event_name != 'workflow_dispatch')) && ! cancelled() && ! contains(needs.*.result, 'failure') && @@ -151,3 +155,12 @@ jobs: stability: ${{ needs.get-environment.outputs.stability }} release_type: ${{ needs.get-environment.outputs.release_type }} artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }} + + set-skip-label: + needs: [get-environment, deliver-packages] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') + uses: ./.github/workflows/set-pull-request-skip-label.yml diff --git a/.github/workflows/perl-cpan-libraries.yml b/.github/workflows/perl-cpan-libraries.yml index ac9114f7c..988cc04cf 100644 --- a/.github/workflows/perl-cpan-libraries.yml +++ b/.github/workflows/perl-cpan-libraries.yml @@ -24,7 +24,9 @@ jobs: package-rpm: needs: [get-environment] - if: ${{ needs.get-environment.outputs.stability != 'stable' }} + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' runs-on: ubuntu-24.04 strategy: @@ -238,7 +240,10 @@ jobs: retention-days: 1 merge-package-rpm-artifacts: - needs: [package-rpm] + needs: [get-environment, package-rpm] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' runs-on: ubuntu-24.04 strategy: matrix: @@ -260,7 +265,10 @@ jobs: failOnError: false sign-rpm: - needs: [merge-package-rpm-artifacts] + needs: [get-environment, merge-package-rpm-artifacts] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' runs-on: ubuntu-24.04 strategy: @@ -298,7 +306,9 @@ jobs: package-deb: needs: [get-environment] - if: ${{ needs.get-environment.outputs.stability != 'stable' }} + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' runs-on: ${{ matrix.runner_name }} strategy: @@ -316,6 +326,8 @@ jobs: "DataStruct::Flat", "DateTime::Format::Duration::ISO8601", "Device::Modbus", + "Device::Modbus::RTU::Client", + "Device::Modbus::TCP::Client", "Digest::SHA1", "Email::Send::SMTP::Gmail", "Hash::Ordered", @@ -356,6 +368,10 @@ jobs: image: packaging-plugins-bullseye-arm64 arch: arm64 runner_name: ["self-hosted", "collect-arm64"] + - name: "Device::Modbus::RTU::Client" + build_distribs: "bookworm" + - name: "Device::Modbus::TCP::Client" + build_distribs: "bookworm" - name: "Net::Amazon::Signature::V4" build_distribs: ["bullseye", "jammy"] - name: "Net::MQTT::Simple" @@ -464,7 +480,10 @@ jobs: retention-days: 1 merge-package-deb-artifacts: - needs: [package-deb] + needs: [get-environment, package-deb] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' runs-on: ubuntu-24.04 strategy: matrix: @@ -486,7 +505,10 @@ jobs: failOnError: false download-and-cache-deb: - needs: [merge-package-deb-artifacts] + needs: [get-environment, merge-package-deb-artifacts] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' runs-on: ubuntu-24.04 strategy: matrix: @@ -505,6 +527,7 @@ jobs: deliver-packages: needs: [get-environment, sign-rpm, download-and-cache-deb] if: | + needs.get-environment.outputs.skip_workflow == 'false' && (contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) || ( needs.get-environment.outputs.stability == 'stable' && github.event_name != 'workflow_dispatch')) && ! cancelled() && ! contains(needs.*.result, 'failure') && @@ -539,3 +562,12 @@ jobs: stability: ${{ needs.get-environment.outputs.stability }} release_type: ${{ needs.get-environment.outputs.release_type }} artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }} + + set-skip-label: + needs: [get-environment, deliver-packages] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') + uses: ./.github/workflows/set-pull-request-skip-label.yml diff --git a/.github/workflows/perl-crypt-argon2.yml b/.github/workflows/perl-crypt-argon2.yml index 78b6b23ab..7680b17e4 100644 --- a/.github/workflows/perl-crypt-argon2.yml +++ b/.github/workflows/perl-crypt-argon2.yml @@ -26,7 +26,9 @@ jobs: package: needs: [get-environment] - if: ${{ needs.get-environment.outputs.stability != 'stable' }} + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' strategy: fail-fast: false @@ -144,6 +146,7 @@ jobs: deliver-packages: needs: [get-environment, package] if: | + needs.get-environment.outputs.skip_workflow == 'false' && (contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) || ( needs.get-environment.outputs.stability == 'stable' && github.event_name != 'workflow_dispatch')) && ! cancelled() && ! contains(needs.*.result, 'failure') && @@ -187,3 +190,12 @@ jobs: stability: ${{ needs.get-environment.outputs.stability }} release_type: ${{ needs.get-environment.outputs.release_type }} artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }} + + set-skip-label: + needs: [get-environment, deliver-packages] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') + uses: ./.github/workflows/set-pull-request-skip-label.yml diff --git a/.github/workflows/perl-filesys-smbclient.yml b/.github/workflows/perl-filesys-smbclient.yml index 626b663f2..4b1d28e2d 100644 --- a/.github/workflows/perl-filesys-smbclient.yml +++ b/.github/workflows/perl-filesys-smbclient.yml @@ -24,7 +24,9 @@ jobs: package-rpm: needs: [get-environment] - if: ${{ needs.get-environment.outputs.stability != 'stable' }} + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' runs-on: ubuntu-22.04 strategy: @@ -67,7 +69,10 @@ jobs: key: unsigned-${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }} sign-rpm: - needs: [package-rpm] + needs: [get-environment, package-rpm] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' runs-on: ubuntu-22.04 strategy: matrix: @@ -110,7 +115,9 @@ jobs: package-deb: needs: [get-environment] - if: ${{ needs.get-environment.outputs.stability != 'stable' }} + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' runs-on: ubuntu-22.04 strategy: @@ -156,6 +163,7 @@ jobs: deliver-packages: needs: [get-environment, sign-rpm, package-deb] if: | + needs.get-environment.outputs.skip_workflow == 'false' && (contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) || ( needs.get-environment.outputs.stability == 'stable' && github.event_name != 'workflow_dispatch')) && ! cancelled() && ! contains(needs.*.result, 'failure') && @@ -190,3 +198,12 @@ jobs: stability: ${{ needs.get-environment.outputs.stability }} release_type: ${{ needs.get-environment.outputs.release_type }} artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }} + + set-skip-label: + needs: [get-environment, deliver-packages] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') + uses: ./.github/workflows/set-pull-request-skip-label.yml diff --git a/.github/workflows/perl-json-path.yml b/.github/workflows/perl-json-path.yml index a53855a48..379b50f16 100644 --- a/.github/workflows/perl-json-path.yml +++ b/.github/workflows/perl-json-path.yml @@ -26,7 +26,9 @@ jobs: package: needs: [get-environment] - if: ${{ needs.get-environment.outputs.stability != 'stable' }} + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' strategy: fail-fast: false @@ -129,6 +131,7 @@ jobs: deliver-packages: needs: [get-environment, package] if: | + needs.get-environment.outputs.skip_workflow == 'false' && (contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) || ( needs.get-environment.outputs.stability == 'stable' && github.event_name != 'workflow_dispatch')) && ! cancelled() && ! contains(needs.*.result, 'failure') && @@ -163,3 +166,12 @@ jobs: stability: ${{ needs.get-environment.outputs.stability }} release_type: ${{ needs.get-environment.outputs.release_type }} artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }} + + set-skip-label: + needs: [get-environment, deliver-packages] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') + uses: ./.github/workflows/set-pull-request-skip-label.yml diff --git a/.github/workflows/perl-keepass-reader.yml b/.github/workflows/perl-keepass-reader.yml index 9a5016b79..b417f6be4 100644 --- a/.github/workflows/perl-keepass-reader.yml +++ b/.github/workflows/perl-keepass-reader.yml @@ -27,6 +27,9 @@ jobs: package: needs: [get-environment] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' strategy: fail-fast: false @@ -154,3 +157,12 @@ jobs: stability: ${{ needs.get-environment.outputs.stability }} release_type: ${{ needs.get-environment.outputs.release_type }} artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }} + + set-skip-label: + needs: [get-environment, deliver-packages] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') + uses: ./.github/workflows/set-pull-request-skip-label.yml diff --git a/.github/workflows/perl-libssh-session.yml b/.github/workflows/perl-libssh-session.yml index d56ac394d..53df82f57 100644 --- a/.github/workflows/perl-libssh-session.yml +++ b/.github/workflows/perl-libssh-session.yml @@ -24,7 +24,9 @@ jobs: package: needs: [get-environment] - if: ${{ needs.get-environment.outputs.stability != 'stable' }} + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' strategy: fail-fast: false @@ -142,6 +144,7 @@ jobs: deliver-packages: needs: [get-environment, package] if: | + needs.get-environment.outputs.skip_workflow == 'false' && (contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) || ( needs.get-environment.outputs.stability == 'stable' && github.event_name != 'workflow_dispatch')) && ! cancelled() && ! contains(needs.*.result, 'failure') && @@ -185,3 +188,12 @@ jobs: stability: ${{ needs.get-environment.outputs.stability }} release_type: ${{ needs.get-environment.outputs.release_type }} artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }} + + set-skip-label: + needs: [get-environment, deliver-packages] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') + uses: ./.github/workflows/set-pull-request-skip-label.yml diff --git a/.github/workflows/perl-net-curl.yml b/.github/workflows/perl-net-curl.yml index 64b85d5e3..38b38938a 100644 --- a/.github/workflows/perl-net-curl.yml +++ b/.github/workflows/perl-net-curl.yml @@ -24,7 +24,9 @@ jobs: package: needs: [get-environment] - if: ${{ needs.get-environment.outputs.stability != 'stable' }} + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' strategy: fail-fast: false @@ -142,6 +144,7 @@ jobs: deliver-packages: needs: [get-environment, package] if: | + needs.get-environment.outputs.skip_workflow == 'false' && (contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) || ( needs.get-environment.outputs.stability == 'stable' && github.event_name != 'workflow_dispatch')) && ! cancelled() && ! contains(needs.*.result, 'failure') && @@ -185,3 +188,12 @@ jobs: stability: ${{ needs.get-environment.outputs.stability }} release_type: ${{ needs.get-environment.outputs.release_type }} artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }} + + set-skip-label: + needs: [get-environment, deliver-packages] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') + uses: ./.github/workflows/set-pull-request-skip-label.yml diff --git a/.github/workflows/perl-openwsman.yml b/.github/workflows/perl-openwsman.yml index c578ce768..12474ae02 100644 --- a/.github/workflows/perl-openwsman.yml +++ b/.github/workflows/perl-openwsman.yml @@ -22,7 +22,9 @@ jobs: package: needs: [get-environment] - if: ${{ needs.get-environment.outputs.stability != 'stable' }} + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' strategy: fail-fast: false @@ -214,6 +216,7 @@ jobs: deliver-packages: needs: [get-environment, package] if: | + needs.get-environment.outputs.skip_workflow == 'false' && (contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) || ( needs.get-environment.outputs.stability == 'stable' && github.event_name != 'workflow_dispatch')) && ! cancelled() && ! contains(needs.*.result, 'failure') && @@ -257,3 +260,12 @@ jobs: stability: ${{ needs.get-environment.outputs.stability }} release_type: ${{ needs.get-environment.outputs.release_type }} artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }} + + set-skip-label: + needs: [get-environment, deliver-packages] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') + uses: ./.github/workflows/set-pull-request-skip-label.yml diff --git a/.github/workflows/perl-vmware-vsphere.yml b/.github/workflows/perl-vmware-vsphere.yml index 65f83d0e5..7be8efc48 100644 --- a/.github/workflows/perl-vmware-vsphere.yml +++ b/.github/workflows/perl-vmware-vsphere.yml @@ -24,7 +24,9 @@ jobs: get-sources: needs: [get-environment] - if: ${{ needs.get-environment.outputs.stability != 'stable' }} + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' runs-on: ubuntu-22.04 steps: - name: Download vsphere cli sources @@ -48,6 +50,9 @@ jobs: package: needs: [get-environment, get-sources] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' strategy: matrix: @@ -148,6 +153,7 @@ jobs: deliver-packages: needs: [get-environment, package] if: | + needs.get-environment.outputs.skip_workflow == 'false' && (contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) || ( needs.get-environment.outputs.stability == 'stable' && github.event_name != 'workflow_dispatch')) && ! cancelled() && ! contains(needs.*.result, 'failure') && @@ -191,3 +197,12 @@ jobs: stability: ${{ needs.get-environment.outputs.stability }} release_type: ${{ needs.get-environment.outputs.release_type }} artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }} + + set-skip-label: + needs: [get-environment, deliver-packages] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') + uses: ./.github/workflows/set-pull-request-skip-label.yml diff --git a/.github/workflows/plink.yml b/.github/workflows/plink.yml index 80ad2d9d2..31a4435e1 100644 --- a/.github/workflows/plink.yml +++ b/.github/workflows/plink.yml @@ -24,7 +24,9 @@ jobs: package-rpm: needs: [get-environment] - if: ${{ needs.get-environment.outputs.stability != 'stable' }} + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' runs-on: ubuntu-22.04 strategy: matrix: @@ -61,7 +63,10 @@ jobs: key: unsigned-${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }} sign-rpm: - needs: [package-rpm] + needs: [get-environment, package-rpm] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' runs-on: ubuntu-22.04 strategy: matrix: @@ -111,6 +116,7 @@ jobs: deliver-packages: needs: [get-environment, sign-rpm] if: | + needs.get-environment.outputs.skip_workflow == 'false' && (contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) || ( needs.get-environment.outputs.stability == 'stable' && github.event_name != 'workflow_dispatch')) && ! cancelled() && ! contains(needs.*.result, 'failure') && @@ -139,3 +145,12 @@ jobs: stability: ${{ needs.get-environment.outputs.stability }} release_type: ${{ needs.get-environment.outputs.release_type }} artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }} + + set-skip-label: + needs: [get-environment, deliver-packages] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') + uses: ./.github/workflows/set-pull-request-skip-label.yml diff --git a/.github/workflows/plugins-selinux.yml b/.github/workflows/plugins-selinux.yml index 355958558..c8a5c906b 100644 --- a/.github/workflows/plugins-selinux.yml +++ b/.github/workflows/plugins-selinux.yml @@ -24,6 +24,9 @@ jobs: package: needs: [get-environment] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' runs-on: ubuntu-22.04 strategy: matrix: @@ -72,6 +75,7 @@ jobs: deliver-packages: needs: [get-environment, package] if: | + needs.get-environment.outputs.skip_workflow == 'false' && (contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) || ( needs.get-environment.outputs.stability == 'stable' && github.event_name != 'workflow_dispatch')) && ! cancelled() && ! contains(needs.*.result, 'failure') && @@ -100,3 +104,12 @@ jobs: stability: ${{ needs.get-environment.outputs.stability }} release_type: ${{ needs.get-environment.outputs.release_type }} artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }} + + set-skip-label: + needs: [get-environment, deliver-packages] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') + uses: ./.github/workflows/set-pull-request-skip-label.yml diff --git a/.github/workflows/plugins.yml b/.github/workflows/plugins.yml index 0af936c66..14bb8b2e6 100644 --- a/.github/workflows/plugins.yml +++ b/.github/workflows/plugins.yml @@ -29,11 +29,11 @@ jobs: uses: ./.github/workflows/get-environment.yml get-plugins: - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 outputs: plugins: ${{ steps.get_plugins.outputs.plugins }} steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 @@ -89,12 +89,18 @@ jobs: unit-tests: needs: [get-environment, get-plugins] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') strategy: fail-fast: false matrix: image: [unit-tests-alma8, unit-tests-alma9, unit-tests-bullseye, unit-tests-bullseye-arm64, unit-tests-bookworm, unit-tests-jammy] include: - - runner_name: ubuntu-22.04 + - runner_name: ubuntu-24.04 - package_extension: rpm image: unit-tests-alma8 distrib: el8 @@ -121,9 +127,10 @@ jobs: credentials: username: ${{ secrets.HARBOR_CENTREON_PULL_USERNAME }} password: ${{ secrets.HARBOR_CENTREON_PULL_TOKEN }} + steps: - name: Checkout sources - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run unit tests uses: ./.github/actions/unit-tests @@ -137,14 +144,17 @@ jobs: retention-days: 1 fatpacker: - if: ${{ needs.get-plugins.outputs.plugins != '' }} needs: [get-environment, get-plugins, unit-tests] - runs-on: ubuntu-22.04 + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-plugins.outputs.plugins != '' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') + runs-on: ubuntu-24.04 steps: - name: Checkout sources - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - with: - fetch-depth: 1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Prepare FatPacker uses: shogo82148/actions-setup-perl@9c1eca9952ccc07f9ca4a2097b63df93d9d138e9 # v1.31.3 @@ -166,6 +176,13 @@ jobs: package: runs-on: ubuntu-24.04 needs: [get-environment, get-plugins, fatpacker] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-plugins.outputs.plugins != '' && + needs.get-environment.outputs.stability != 'stable' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') strategy: fail-fast: false @@ -200,7 +217,7 @@ jobs: steps: - name: Checkout sources - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - uses: actions/cache/restore@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 with: @@ -284,6 +301,13 @@ jobs: test-plugins: needs: [get-environment, get-plugins, package] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-plugins.outputs.plugins != '' && + needs.get-environment.outputs.stability != 'stable' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') strategy: fail-fast: false matrix: @@ -319,7 +343,7 @@ jobs: password: ${{ secrets.HARBOR_CENTREON_PULL_TOKEN }} steps: - name: Checkout sources - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - uses: ./.github/actions/test-plugins with: @@ -338,8 +362,9 @@ jobs: deliver-packages: needs: [get-environment, get-plugins, test-plugins] if: | + needs.get-environment.outputs.skip_workflow == 'false' && needs.get-plugins.outputs.plugins != '' && - (contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) || ( needs.get-environment.outputs.stability == 'stable' && github.event_name != 'workflow_dispatch')) && + (contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) || (needs.get-environment.outputs.stability == 'stable' && github.event_name != 'workflow_dispatch')) && ! cancelled() && ! contains(needs.*.result, 'failure') && ! contains(needs.*.result, 'cancelled') @@ -364,7 +389,7 @@ jobs: name: deliver ${{ matrix.distrib }} steps: - name: Checkout sources - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Delivery uses: ./.github/actions/package-delivery @@ -377,13 +402,15 @@ jobs: artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }} deliver-sources: - needs: [get-environment] - if: ${{ needs.get-environment.outputs.stability == 'stable' && github.event_name == 'push' }} + needs: [get-environment, fatpacker] + if: | + needs.get-environment.outputs.stability == 'stable' && + github.event_name == 'push' runs-on: [self-hosted, common] steps: - name: Checkout sources - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - uses: actions/cache/restore@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 with: @@ -408,7 +435,7 @@ jobs: steps: - name: Checkout sources - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Push git release tag run: | @@ -426,3 +453,12 @@ jobs: echo "::warning::Release tag $RELEASE already exists" fi shell: bash + + set-skip-label: + needs: [get-environment, deliver-packages] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + ! cancelled() && + ! contains(needs.*.result, 'failure') && + ! contains(needs.*.result, 'cancelled') + uses: ./.github/workflows/set-pull-request-skip-label.yml diff --git a/.github/workflows/set-pull-request-external-label.yml b/.github/workflows/set-pull-request-external-label.yml new file mode 100644 index 000000000..bedeb755b --- /dev/null +++ b/.github/workflows/set-pull-request-external-label.yml @@ -0,0 +1,32 @@ +name: set-pull-request-external-label + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +on: + pull_request_target: + +jobs: + set-pull-request-external-label: + if: | + github.event.pull_request.head.repo.fork && + ! contains(github.event.pull_request.labels.*.name, 'external') + runs-on: ubuntu-24.04 + + steps: + - name: Set PR external label + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + with: + script: | + const label = 'external'; + try { + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + labels: [label] + }); + } catch (e) { + core.warning(`failed to add label ${label}: ${e}`); + } diff --git a/.github/workflows/set-pull-request-skip-label.yml b/.github/workflows/set-pull-request-skip-label.yml new file mode 100644 index 000000000..ffab0b955 --- /dev/null +++ b/.github/workflows/set-pull-request-skip-label.yml @@ -0,0 +1,26 @@ +name: set-pull-request-skip-label + +on: + workflow_call: + +jobs: + set-pull-request-skip-label: + if: ${{ success() && contains(fromJSON('["pull_request", "pull_request_target"]') , github.event_name) }} + runs-on: ubuntu-24.04 + + steps: + - name: Set PR skip label + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + with: + script: | + const label = '${{ format('skip-workflow-{0}', github.workflow) }}'; + try { + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + labels: [label] + }); + } catch (e) { + core.warning(`failed to add label ${label}: ${e}`); + } diff --git a/.github/workflows/spellchecker.yml b/.github/workflows/spellchecker.yml index 3d034ad26..413b881a4 100644 --- a/.github/workflows/spellchecker.yml +++ b/.github/workflows/spellchecker.yml @@ -15,7 +15,7 @@ on: jobs: pod-spell-check: if: ${{ !contains(github.event.pull_request.labels.*.name, 'do-not-spellcheck') }} - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 @@ -34,7 +34,7 @@ jobs: with: perl-version: '5.34' install-modules-with: cpm - install-modules: Test::More Test::Spelling + install-modules: Test::More Test::Spelling List::MoreUtils - name: Install librairies continue-on-error: true diff --git a/doc/en/conf.py b/doc/en/conf.py index c24fb46b1..5b66b1620 100644 --- a/doc/en/conf.py +++ b/doc/en/conf.py @@ -30,10 +30,7 @@ on_centreon_rtd = os.environ.get('CENTREON_RTD', None) == 'True' extensions = ['sphinx.ext.todo', 'sphinx.ext.intersphinx'] intersphinx_mapping = { - 'centreon-engine': ('http://documentation.centreon.com/docs/centreon-engine/en/latest', None), - 'centreon-broker': ('http://documentation.centreon.com/docs/centreon-broker/en/latest', None), - 'centreon-clib': ('http://documentation.centreon.com/docs/centreon-clib/en/latest', None), - 'ces': ('http://documentation.centreon.com/docs/centreon-enterprise-server/en/latest', None), + 'centreon-documentation': ('https://docs.centreon.com/', None), } # Add any paths that contain templates here, relative to this directory. diff --git a/packaging/centreon-plugin-Hardware-Storage-Netapp-Ontap-Snmp/pkg.json b/packaging/centreon-plugin-Hardware-Storage-Netapp-Ontap-Snmp/pkg.json index 52c0e34df..72ab9bea0 100644 --- a/packaging/centreon-plugin-Hardware-Storage-Netapp-Ontap-Snmp/pkg.json +++ b/packaging/centreon-plugin-Hardware-Storage-Netapp-Ontap-Snmp/pkg.json @@ -5,6 +5,7 @@ "files": [ "centreon/plugins/script_snmp.pm", "centreon/plugins/snmp.pm", + "snmp_standard/mode/uptime.pm", "storage/netapp/ontap/snmp/" ] } diff --git a/packaging/centreon-plugin-Network-Huawei-Snmp/pkg.json b/packaging/centreon-plugin-Network-Huawei-Snmp/pkg.json index 967bc2c81..a18afc4e5 100644 --- a/packaging/centreon-plugin-Network-Huawei-Snmp/pkg.json +++ b/packaging/centreon-plugin-Network-Huawei-Snmp/pkg.json @@ -3,12 +3,13 @@ "pkg_summary": "Centreon Plugin", "plugin_name": "centreon_huawei_snmp.pl", "files": [ + "centreon/common/huawei/standard/snmp", "centreon/plugins/script_snmp.pm", "centreon/plugins/snmp.pm", "snmp_standard/mode/interfaces.pm", "snmp_standard/mode/listinterfaces.pm", - "snmp_standard/mode/resources/", + "snmp_standard/mode/resources/", "snmp_standard/mode/uptime.pm", - "network/huawei/snmp/" + "network/huawei/standard/snmp/" ] } diff --git a/packaging/centreon-plugin-Network-Huawei-Wlc-Snmp/deb.json b/packaging/centreon-plugin-Network-Huawei-Wlc-Snmp/deb.json new file mode 100644 index 000000000..663aaaceb --- /dev/null +++ b/packaging/centreon-plugin-Network-Huawei-Wlc-Snmp/deb.json @@ -0,0 +1,5 @@ +{ + "dependencies": [ + "libsnmp-perl" + ] +} \ No newline at end of file diff --git a/packaging/centreon-plugin-Network-Huawei-Wlc-Snmp/pkg.json b/packaging/centreon-plugin-Network-Huawei-Wlc-Snmp/pkg.json new file mode 100644 index 000000000..ba3de9eed --- /dev/null +++ b/packaging/centreon-plugin-Network-Huawei-Wlc-Snmp/pkg.json @@ -0,0 +1,15 @@ +{ + "pkg_name": "centreon-plugin-Network-Huawei-Wlc-Snmp", + "pkg_summary": "Centreon Plugin for Huawei WLC using SNMP protocol", + "plugin_name": "centreon_huawei_wlc_snmp.pl", + "files": [ + "centreon/common/huawei/standard/snmp/", + "centreon/plugins/script_snmp.pm", + "centreon/plugins/snmp.pm", + "snmp_standard/mode/interfaces.pm", + "snmp_standard/mode/listinterfaces.pm", + "snmp_standard/mode/resources/", + "snmp_standard/mode/uptime.pm", + "network/huawei/wlc/snmp/" + ] +} diff --git a/packaging/centreon-plugin-Network-Huawei-Wlc-Snmp/rpm.json b/packaging/centreon-plugin-Network-Huawei-Wlc-Snmp/rpm.json new file mode 100644 index 000000000..418a331fc --- /dev/null +++ b/packaging/centreon-plugin-Network-Huawei-Wlc-Snmp/rpm.json @@ -0,0 +1,5 @@ +{ + "dependencies": [ + "perl(SNMP)" + ] +} \ No newline at end of file diff --git a/packaging/centreon-plugin-Network-Switchs-Hp-Procurve-Snmp/pkg.json b/packaging/centreon-plugin-Network-Switchs-Hp-Procurve-Snmp/pkg.json index ed2948686..eca115ae5 100644 --- a/packaging/centreon-plugin-Network-Switchs-Hp-Procurve-Snmp/pkg.json +++ b/packaging/centreon-plugin-Network-Switchs-Hp-Procurve-Snmp/pkg.json @@ -7,7 +7,10 @@ "centreon/plugins/snmp.pm", "snmp_standard/mode/interfaces.pm", "snmp_standard/mode/listinterfaces.pm", - "snmp_standard/mode/resources/", + "snmp_standard/mode/listspanningtrees.pm", + "snmp_standard/mode/resources/", + "snmp_standard/mode/spanningtree.pm", + "snmp_standard/mode/uptime.pm", "network/hp/procurve/" ] } diff --git a/packaging/centreon-plugin-Operatingsystems-Freebsd-Snmp/deb.json b/packaging/centreon-plugin-Operatingsystems-Freebsd-Snmp/deb.json index d94e32d22..bcb1a852d 100644 --- a/packaging/centreon-plugin-Operatingsystems-Freebsd-Snmp/deb.json +++ b/packaging/centreon-plugin-Operatingsystems-Freebsd-Snmp/deb.json @@ -1,6 +1,7 @@ { "dependencies": [ "libsnmp-perl", - "libdatetime-perl" + "libdatetime-perl", + "libnet-ntp-perl" ] } \ No newline at end of file diff --git a/packaging/centreon-plugin-Operatingsystems-Freebsd-Snmp/pkg.json b/packaging/centreon-plugin-Operatingsystems-Freebsd-Snmp/pkg.json index 6f4972c8d..7c03747ae 100644 --- a/packaging/centreon-plugin-Operatingsystems-Freebsd-Snmp/pkg.json +++ b/packaging/centreon-plugin-Operatingsystems-Freebsd-Snmp/pkg.json @@ -14,14 +14,15 @@ "snmp_standard/mode/loadaverage.pm", "snmp_standard/mode/listdiskspath.pm", "snmp_standard/mode/listinterfaces.pm", - "snmp_standard/mode/resources/", - "snmp_standard/mode/listprocesses.pm", + "snmp_standard/mode/resources/", + "snmp_standard/mode/listprocesses.pm", "snmp_standard/mode/liststorages.pm", "snmp_standard/mode/processcount.pm", "snmp_standard/mode/storage.pm", "snmp_standard/mode/swap.pm", "snmp_standard/mode/tcpcon.pm", "snmp_standard/mode/uptime.pm", + "snmp_standard/mode/ntp.pm", "os/freebsd/snmp/" ] } diff --git a/packaging/centreon-plugin-Operatingsystems-Freebsd-Snmp/rpm.json b/packaging/centreon-plugin-Operatingsystems-Freebsd-Snmp/rpm.json index d4922ea47..f91a6ab68 100644 --- a/packaging/centreon-plugin-Operatingsystems-Freebsd-Snmp/rpm.json +++ b/packaging/centreon-plugin-Operatingsystems-Freebsd-Snmp/rpm.json @@ -1,6 +1,7 @@ { "dependencies": [ "perl(SNMP)", - "perl(DateTime)" + "perl(DateTime)", + "perl(Net::NTP)" ] } \ No newline at end of file diff --git a/src/apps/monitoring/iplabel/ekara/restapi/custom/api.pm b/src/apps/monitoring/iplabel/ekara/restapi/custom/api.pm index 2df88a48f..cba44f2d4 100644 --- a/src/apps/monitoring/iplabel/ekara/restapi/custom/api.pm +++ b/src/apps/monitoring/iplabel/ekara/restapi/custom/api.pm @@ -43,14 +43,19 @@ sub new { if (!defined($options{noptions})) { $options{options}->add_options(arguments => { - 'api-username:s' => { name => 'api_username' }, - 'api-password:s' => { name => 'api_password' }, - 'hostname:s' => { name => 'hostname' }, - 'port:s' => { name => 'port' }, - 'proto:s' => { name => 'proto' }, - 'timeout:s' => { name => 'timeout' }, - 'url-path:s' => { name => 'url_path' }, - 'authent-endpoint' => { name => 'authent_endpoint' } + 'api-username:s' => { name => 'api_username' }, + 'api-password:s' => { name => 'api_password' }, + 'hostname:s' => { name => 'hostname' }, + 'port:s' => { name => 'port' }, + 'proto:s' => { name => 'proto' }, + 'timeout:s' => { name => 'timeout' }, + 'url-path:s' => { name => 'url_path' }, + 'filter-id:s' => { name => 'filter_id' }, + 'filter-name:s' => { name => 'filter_name' }, + 'filter-workspaceid:s' => { name => 'filter_workspaceid' }, + 'filter-siteid:s' => { name => 'filter_siteid' }, + 'filter-status:s@' => { name => 'filter_status' }, + 'authent-endpoint' => { name => 'authent_endpoint' } }); } $options{options}->add_help(package => __PACKAGE__, sections => 'REST API OPTIONS', once => 1); @@ -170,6 +175,57 @@ sub get_access_token { return $access_token; } +sub request_scenarios_status{ + my ($self, %options) = @_; + + my $status_filter = {}; + my @get_param; + + if (defined($self->{option_results}->{filter_status}) && $self->{option_results}->{filter_status}[0] ne '') { + $status_filter->{statusFilter} = $self->{option_results}->{filter_status}; + } + if (defined($self->{option_results}->{filter_workspaceid}) && $self->{option_results}->{filter_workspaceid} ne '') { + push(@get_param, "workspaceId=$self->{option_results}->{filter_workspaceid}"); + } + if (defined($self->{option_results}->{filter_siteid}) && $self->{option_results}->{filter_siteid} ne '') { + push(@get_param, "siteId=$self->{option_results}->{filter_siteid}"); + } + my $results = $self->request_api( + endpoint => '/results-api/scenarios/status', + method => 'POST', + post_body => $status_filter, + get_param => \@get_param, + ); + if (ref($results) eq "HASH" ) { + if (defined($results->{message})) { + $self->{output}->add_option_msg(short_msg => "Cannot get scenarios : " . $results->{message}); + $self->{output}->option_exit(); + } + if (defined($results->{error})) { + $self->{output}->add_option_msg(short_msg => "Cannot get scenarios : " . $results->{error}); + $self->{output}->option_exit(); + } + $self->{output}->add_option_msg(short_msg => "Cannot get scenarios due to an unknown error, please use the --debug option to find more information"); + $self->{output}->option_exit(); + } + + my @scenarios; + for my $scenario (@$results) { + if (defined($self->{option_results}->{filter_name}) && $self->{option_results}->{filter_name} ne '' && + $scenario->{scenarioName} !~ /$self->{option_results}->{filter_name}/) { + $self->{output}->output_add(long_msg => "skipping scenario '" . $scenario->{scenarioName} . "': no matching filter.", debug => 1); + next; + } + if (defined($self->{option_results}->{filter_id}) && $self->{option_results}->{filter_id} ne '' && + $scenario->{scenarioId} !~ /$self->{option_results}->{filter_id}/) { + $self->{output}->output_add(long_msg => "skipping scenario '" . $scenario->{scenarioName} . "': no matching filter.", debug => 1); + next; + } + push(@scenarios, $scenario); + } + return \@scenarios; +} + sub request_api { my ($self, %options) = @_; @@ -195,7 +251,7 @@ sub request_api { $json = JSON::XS->new->utf8->decode($response); }; if ($@) { - $self->{output}->add_option_msg(short_msg => "Cannot decode Vault JSON response: $@"); + $self->{output}->add_option_msg(short_msg => "Cannot decode ekara JSON response: $@"); $self->{output}->option_exit(); }; @@ -209,11 +265,11 @@ __END__ =head1 NAME -Ip-Label Ekara Rest API +ip-label Ekara Rest API =head1 REST API OPTIONS -Ip-Label Ekara Rest API +ip-label Ekara Rest API =over 8 @@ -237,6 +293,37 @@ Set username. Set password. +=item B<--filter-id> + +Filter by monitor ID (can be a regexp). + +=item B<--filter-name> + +Filter by monitor name (can be a regexp). + +=item B<--filter-status> + +Filter by numeric status (can be multiple). +0 => 'Unknown', +1 => 'Success', +2 => 'Failure', +3 => 'Aborted', +4 => 'No execution', +5 => 'No execution', +6 => 'Stopped', +7 => 'Excluded', +8 => 'Degraded' + +Example: --filter-status='1,2' + +=item B<--filter-workspaceid> + +Filter scenario to check by workspace id. + +=item B<--filter-siteid> + +Filter scenario to check by site id. + =item B<--timeout> Set timeout in seconds (default: 10). diff --git a/src/apps/monitoring/iplabel/ekara/restapi/mode/incidents.pm b/src/apps/monitoring/iplabel/ekara/restapi/mode/incidents.pm index 7953d98a8..12776147e 100644 --- a/src/apps/monitoring/iplabel/ekara/restapi/mode/incidents.pm +++ b/src/apps/monitoring/iplabel/ekara/restapi/mode/incidents.pm @@ -36,6 +36,7 @@ sub custom_status_output { sub custom_duration_output { my ($self, %options) = @_; + if ($self->{result_values}->{status} =~ 'Open') { return sprintf( 'start time: %s, duration: %s', @@ -145,8 +146,6 @@ sub new { bless $self, $class; $options{options}->add_options(arguments => { - 'filter-id:s' => { name => 'filter_id' }, - 'filter-name:s' => { name => 'filter_name' }, 'ignore-closed' => { name => 'ignore_closed' }, 'timeframe:s' => { name => 'timeframe'} }); @@ -176,23 +175,10 @@ my $status_mapping = { sub manage_selection { my ($self, %options) = @_; - my $results = $options{custom}->request_api( - endpoint => '/results-api/scenarios/status', - method => 'POST', - ); + my $results = $options{custom}->request_scenarios_status(); my $scenarios_list = {}; foreach (@$results) { - if (defined($self->{option_results}->{filter_name}) && $self->{option_results}->{filter_name} ne '' && - $_->{scenarioName} !~ /$self->{option_results}->{filter_name}/) { - $self->{output}->output_add(long_msg => "skipping scenario '" . $_->{scenarioName} . "': no matching filter.", debug => 1); - next; - } - if (defined($self->{option_results}->{filter_id}) && $self->{option_results}->{filter_id} ne '' && - $_->{scenarioId} !~ /$self->{option_results}->{filter_id}/) { - $self->{output}->output_add(long_msg => "skipping scenario '" . $_->{scenarioName} . "': no matching filter.", debug => 1); - next; - } push @{$scenarios_list->{scenarioIds}}, $_->{scenarioId}; } @@ -212,6 +198,10 @@ sub manage_selection { ); } + else{ + $self->{output}->add_option_msg(short_msg => "No scenarios found, can't search for incidents. Please check filters."); + $self->{output}->option_exit(); + } $self->{global}->{total} = 0; @@ -257,7 +247,7 @@ __END__ =head1 MODE -Check IP Label Ekara incidents. +Check Ekara incidents. =over 8 @@ -266,14 +256,6 @@ Check IP Label Ekara incidents. Set timeframe period in seconds. (default: 900) Example: --timeframe='3600' will check the last hour -=item B<--filter-id> - -Filter by monitor ID (can be a regexp). - -=item B<--filter-name> - -Filter by monitor name (can be a regexp). - =item B<--ignore-closed> Ignore solved incidents within the timeframe. diff --git a/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm b/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm index f92a754ec..10046f168 100644 --- a/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm +++ b/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm @@ -34,16 +34,6 @@ sub custom_status_output { return sprintf('status: %s (%s)', $self->{result_values}->{status}, $self->{result_values}->{num_status}); } -sub custom_date_output { - my ($self, %options) = @_; - - return sprintf( - 'last execution: %s (%s ago)', - $self->{result_values}->{lastexec}, - centreon::plugins::misc::change_seconds(value => $self->{result_values}->{freshness}) - ); -} - sub prefix_scenario_output { my ($self, %options) = @_; @@ -131,9 +121,7 @@ sub new { bless $self, $class; $options{options}->add_options(arguments => { - 'filter-id:s' => { name => 'filter_id' }, - 'filter-name:s' => { name => 'filter_name' }, - 'filter-status:s@' => { name => 'filter_status' }, + 'filter-type:s' => { name => 'filter_type' }, 'timeframe:s' => { name => 'timeframe'} }); @@ -162,35 +150,14 @@ my $status_mapping = { sub manage_selection { my ($self, %options) = @_; - - my $status_filter = {}; - if (defined($self->{option_results}->{filter_status}) && $self->{option_results}->{filter_status}[0] ne '') { - $status_filter->{statusFilter} = $self->{option_results}->{filter_status}; - } - - my $results = $options{custom}->request_api( - endpoint => '/results-api/scenarios/status', - method => 'POST', - post_body => $status_filter - ); + my $results = $options{custom}->request_scenarios_status(); my $time = time(); my $start_date = POSIX::strftime('%Y-%m-%dT%H:%M:%SZ', gmtime($time - $self->{timeframe})); my $end_date = POSIX::strftime('%Y-%m-%dT%H:%M:%SZ', gmtime($time)); - foreach (@$results) { - if (defined($self->{option_results}->{filter_name}) && $self->{option_results}->{filter_name} ne '' && - $_->{scenarioName} !~ /$self->{option_results}->{filter_name}/) { - $self->{output}->output_add(long_msg => "skipping scenario '" . $_->{scenarioName} . "': no matching filter.", debug => 1); - next; - } - if (defined($self->{option_results}->{filter_id}) && $self->{option_results}->{filter_id} ne '' && - $_->{scenarioId} !~ /$self->{option_results}->{filter_id}/) { - $self->{output}->output_add(long_msg => "skipping scenario '" . $_->{scenarioName} . "': no matching filter.", debug => 1); - next; - } - + foreach my $scenario (@$results) { my $scenario_detail = $options{custom}->request_api( - endpoint => '/results-api/results/' . $_->{scenarioId}, + endpoint => '/results-api/results/' . $scenario->{scenarioId}, method => 'POST', get_param => [ 'from=' . $start_date, @@ -200,35 +167,38 @@ sub manage_selection { if (defined($self->{option_results}->{filter_type}) && $self->{option_results}->{filter_type} ne '' && $scenario_detail->{infos}->{plugin_id} !~ /$self->{option_results}->{filter_type}/i) { - $self->{output}->output_add(long_msg => "skipping scenario '" . $_->{scenarioName} . "': no matching filter.", debug => 1); + $self->{output}->output_add(long_msg => "skipping scenario '" . $scenario->{scenarioName} . "': no matching filter.", debug => 1); next; } - $self->{scenarios}->{ $_->{scenarioName} } = { - display => $_->{scenarioName}, + $self->{scenarios}->{ $scenario->{scenarioName} } = { + display => $scenario->{scenarioName}, global => { - display => $_->{scenarioName}, - id => $_->{scenarioId}, - num_status => $_->{currentStatus}, - status => $status_mapping->{$_->{currentStatus}}, + display => $scenario->{scenarioName}, + id => $scenario->{scenarioId}, + num_status => $scenario->{currentStatus}, + status => $status_mapping->{$scenario->{currentStatus}} // 'Unknown', } }; - - foreach my $kpi (@{$scenario_detail->{kpis}}) { - $self->{scenarios}->{ $_->{scenarioName} }->{global}->{$kpi->{label}} = $kpi->{value}; + if (!defined $scenario_detail->{results} or scalar(@{$scenario_detail->{results}}) <= 0) { + $self->{output}->add_option_msg(short_msg => "Scenario '" . $scenario->{scenarioName} . "' Don't have any performance data, please try to add a bigger timeframe"); + next; } - $self->{scenarios}->{ $_->{scenarioName} }->{steps_index}->{0} = 'Default'; + foreach my $kpi (@{$scenario_detail->{kpis}}) { + $self->{scenarios}->{ $scenario->{scenarioName} }->{global}->{$kpi->{label}} = $kpi->{value}; + } + $self->{scenarios}->{ $scenario->{scenarioName} }->{steps_index}->{0} = 'Default'; if ($scenario_detail->{infos}->{info}->{hasStep}) { foreach my $steps (@{$scenario_detail->{steps}}) { - $self->{scenarios}->{ $_->{scenarioName} }->{steps_index}->{$steps->{index}} = $steps->{name}; + $self->{scenarios}->{ $scenario->{scenarioName} }->{steps_index}->{$steps->{index} - 1} = $steps->{name}; } } foreach my $step_metrics (@{$scenario_detail->{results}}) { my $exec_time = str2time($step_metrics->{planningTime}, 'GMT'); - $self->{scenarios}->{ $_->{scenarioName} }->{steps}->{ $self->{scenarios}->{ $_->{scenarioName} }->{steps_index}->{ $step_metrics->{stepId} } }->{ $step_metrics->{metric} } = $step_metrics->{value}; - $self->{scenarios}->{ $_->{scenarioName} }->{steps}->{ $self->{scenarios}->{ $_->{scenarioName} }->{steps_index}->{ $step_metrics->{stepId} } }->{last_exec} = POSIX::strftime('%d-%m-%Y %H:%M:%S %Z', localtime($exec_time)); - $self->{scenarios}->{ $_->{scenarioName} }->{steps}->{ $self->{scenarios}->{ $_->{scenarioName} }->{steps_index}->{ $step_metrics->{stepId} } }->{display} = $self->{scenarios}->{ $_->{scenarioName} }->{steps_index}->{ $step_metrics->{stepId} }; + $self->{scenarios}->{ $scenario->{scenarioName} }->{steps}->{ $self->{scenarios}->{ $scenario->{scenarioName} }->{steps_index}->{ $step_metrics->{stepId} } }->{ $step_metrics->{metric} } = $step_metrics->{value}; + $self->{scenarios}->{ $scenario->{scenarioName} }->{steps}->{ $self->{scenarios}->{ $scenario->{scenarioName} }->{steps_index}->{ $step_metrics->{stepId} } }->{last_exec} = POSIX::strftime('%d-%m-%Y %H:%M:%S %Z', localtime($exec_time)); + $self->{scenarios}->{ $scenario->{scenarioName} }->{steps}->{ $self->{scenarios}->{ $scenario->{scenarioName} }->{steps_index}->{ $step_metrics->{stepId} } }->{display} = $self->{scenarios}->{ $scenario->{scenarioName} }->{steps_index}->{ $step_metrics->{stepId} }; } } @@ -244,7 +214,7 @@ __END__ =head1 MODE -Check IP Label Ekara scenarios. +Check ip-label Ekara scenarios. =over 8 @@ -253,28 +223,7 @@ Check IP Label Ekara scenarios. Set timeframe period in seconds. (default: 900) Example: --timeframe='3600' will check the last hour -=item B<--filter-id> -Filter by monitor ID (can be a regexp). - -=item B<--filter-name> - -Filter by monitor name (can be a regexp). - -=item B<--filter-status> - -Filter by numeric status (can be multiple). -0 => 'Unknown', -1 => 'Success', -2 => 'Failure', -3 => 'Aborted', -4 => 'No execution', -5 => 'No execution', -6 => 'Stopped', -7 => 'Excluded', -8 => 'Degraded' - -Example: --filter-status='1,2' =item B<--filter-type> diff --git a/src/apps/protocols/smtp/lib/smtp.pm b/src/apps/protocols/smtp/lib/smtp.pm index ca0cdd5c8..cbd1c52e9 100644 --- a/src/apps/protocols/smtp/lib/smtp.pm +++ b/src/apps/protocols/smtp/lib/smtp.pm @@ -127,7 +127,7 @@ sub connect { $self->{output}->exit(); } if ($smtp_handle == -1) { - chomp $stdout; + chomp $stdout if (defined($stdout)); $self->{output}->output_add( severity => $connection_exit, short_msg => 'Unable to connect to SMTP: ' . (defined($stdout) ? $stdout : $error_msg) diff --git a/src/apps/salesforce/restapi/custom/api.pm b/src/apps/salesforce/restapi/custom/api.pm index bdf40e0f5..f423f8500 100644 --- a/src/apps/salesforce/restapi/custom/api.pm +++ b/src/apps/salesforce/restapi/custom/api.pm @@ -112,7 +112,7 @@ sub request_api { $self->{output}->option_exit(); } if ($self->{http}->get_code() != 200) { - $self->{output}->add_option_msg(short_msg => "Connection issue: " . $decoded->{message}); + $self->{output}->add_option_msg(short_msg => "Connection issue: " . defined($decoded->{message}) ? $decoded->{message} : ''); $self->{output}->option_exit(); } @@ -125,11 +125,11 @@ __END__ =head1 NAME -SFDC API boilerplate +Monitor SFDC API boilerplate =head1 SYNOPSIS -Get informations from SFDC API +Get information from SFDC API =head1 REST API OPTIONS @@ -137,15 +137,15 @@ Get informations from SFDC API =item B<--hostname> -Set hostname to query (default: 'api.status.salesforce.com') +Define the hostname to query (default: C) =item B<--timeout> -Set HTTP timeout in seconds (default: '10'). +Define the HTTP timeout in seconds (default: '10'). =item B<--api-version> -API version (default: 'v1'). +Define the API version (default: 'v1'). =back diff --git a/src/network/huawei/snmp/mode/components/fan.pm b/src/centreon/common/huawei/standard/snmp/mode/components/fan.pm similarity index 98% rename from src/network/huawei/snmp/mode/components/fan.pm rename to src/centreon/common/huawei/standard/snmp/mode/components/fan.pm index 7961d6409..30dc31c06 100644 --- a/src/network/huawei/snmp/mode/components/fan.pm +++ b/src/centreon/common/huawei/standard/snmp/mode/components/fan.pm @@ -18,7 +18,7 @@ # limitations under the License. # -package network::huawei::snmp::mode::components::fan; +package centreon::common::huawei::standard::snmp::mode::components::fan; use strict; use warnings; diff --git a/src/network/huawei/snmp/mode/components/temperature.pm b/src/centreon/common/huawei/standard/snmp/mode/components/temperature.pm similarity index 98% rename from src/network/huawei/snmp/mode/components/temperature.pm rename to src/centreon/common/huawei/standard/snmp/mode/components/temperature.pm index 70d60fac4..4a91695e1 100644 --- a/src/network/huawei/snmp/mode/components/temperature.pm +++ b/src/centreon/common/huawei/standard/snmp/mode/components/temperature.pm @@ -18,7 +18,7 @@ # limitations under the License. # -package network::huawei::snmp::mode::components::temperature; +package centreon::common::huawei::standard::snmp::mode::components::temperature; use strict; use warnings; diff --git a/src/network/huawei/snmp/mode/cpu.pm b/src/centreon/common/huawei/standard/snmp/mode/cpu.pm similarity index 90% rename from src/network/huawei/snmp/mode/cpu.pm rename to src/centreon/common/huawei/standard/snmp/mode/cpu.pm index bd1abd724..972834769 100644 --- a/src/network/huawei/snmp/mode/cpu.pm +++ b/src/centreon/common/huawei/standard/snmp/mode/cpu.pm @@ -18,7 +18,7 @@ # limitations under the License. # -package network::huawei::snmp::mode::cpu; +package centreon::common::huawei::standard::snmp::mode::cpu; use base qw(centreon::plugins::templates::counter); @@ -56,9 +56,7 @@ sub new { my $self = $class->SUPER::new(package => __PACKAGE__, %options); bless $self, $class; - $options{options}->add_options(arguments => - { - }); + $options{options}->add_options(arguments => {}); return $self; } @@ -80,17 +78,17 @@ sub manage_selection { $self->{cpu} = {}; my $num = 1; if (defined($results->{$oid_hwAvgDuty5min}) && scalar(keys %{$results->{$oid_hwAvgDuty5min}}) > 0) { - foreach (keys %{$results->{$oid_hwAvgDuty5min}}) { + foreach (sort keys %{$results->{$oid_hwAvgDuty5min}}) { $self->{cpu}->{$num} = { num => $num, cpu => $results->{$oid_hwAvgDuty5min}->{$_} }; $num++; } } elsif (defined($results->{$oid_hwEntityCpuUsage}) && scalar(keys %{$results->{$oid_hwEntityCpuUsage}}) > 0) { - foreach (keys %{$results->{$oid_hwEntityCpuUsage}}) { + foreach (sort keys %{$results->{$oid_hwEntityCpuUsage}}) { $self->{cpu}->{$num} = { num => $num, cpu => $results->{$oid_hwEntityCpuUsage}->{$_} }; $num++; } } else { - foreach (keys %{$results->{$oid_hwResOccupancy}}) { + foreach (sort keys %{$results->{$oid_hwResOccupancy}}) { /\.([0-9]*?)$/; next if (!defined($map_type->{$1}) || $map_type->{$1} ne 'cpu'); $self->{cpu}->{$num} = { num => $num, cpu => $results->{$oid_hwResOccupancy}->{$_} }; diff --git a/src/network/huawei/snmp/mode/hardware.pm b/src/centreon/common/huawei/standard/snmp/mode/hardware.pm similarity index 97% rename from src/network/huawei/snmp/mode/hardware.pm rename to src/centreon/common/huawei/standard/snmp/mode/hardware.pm index 6910fe3df..42082e7e9 100644 --- a/src/network/huawei/snmp/mode/hardware.pm +++ b/src/centreon/common/huawei/standard/snmp/mode/hardware.pm @@ -18,7 +18,7 @@ # limitations under the License. # -package network::huawei::snmp::mode::hardware; +package centreon::common::huawei::standard::snmp::mode::hardware; use base qw(centreon::plugins::templates::hardware); @@ -41,7 +41,7 @@ sub set_system { ] }; - $self->{components_path} = 'network::huawei::snmp::mode::components'; + $self->{components_path} = 'centreon::common::huawei::standard::snmp::mode::components'; $self->{components_module} = ['fan', 'temperature']; } diff --git a/src/network/huawei/snmp/mode/interfaces.pm b/src/centreon/common/huawei/standard/snmp/mode/interfaces.pm similarity index 76% rename from src/network/huawei/snmp/mode/interfaces.pm rename to src/centreon/common/huawei/standard/snmp/mode/interfaces.pm index 067279559..9b0a6ebd3 100644 --- a/src/network/huawei/snmp/mode/interfaces.pm +++ b/src/centreon/common/huawei/standard/snmp/mode/interfaces.pm @@ -18,7 +18,7 @@ # limitations under the License. # -package network::huawei::snmp::mode::interfaces; +package centreon::common::huawei::standard::snmp::mode::interfaces; use base qw(snmp_standard::mode::interfaces); @@ -205,7 +205,7 @@ Check interface data volume between two checks (not supposed to be graphed, usef =item B<--add-optical> -Check interface optical metrics. +Check interfaces' optical metrics. =item B<--check-metrics> @@ -229,15 +229,182 @@ Set warning threshold for all error counters. Set critical threshold for all error counters. -=item B<--warning-*> B<--critical-*> +=item B<--warning-total-port> -Thresholds (will superseed --[warning-critical]-errors). -Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down', -'in-traffic', 'out-traffic', 'in-error', 'in-discard', 'out-error', 'out-discard', -'in-ucast', 'in-bcast', 'in-mcast', 'out-ucast', 'out-bcast', 'out-mcast', -'speed' (b/s). +Thresholds. + +=item B<--critical-total-port> + +Thresholds. + +=item B<--warning-total-admin-up> + +Thresholds. + +=item B<--critical-total-admin-up> + +Thresholds. + +=item B<--warning-total-admin-down> + +Thresholds. + +=item B<--critical-total-admin-down> + +Thresholds. + +=item B<--warning-total-oper-up> + +Thresholds. + +=item B<--critical-total-oper-up> + +Thresholds. + +=item B<--warning-total-oper-down> + +Thresholds. + +=item B<--critical-total-oper-down> + +Thresholds. + +=item B<--warning-in-traffic> + +Thresholds. + +=item B<--critical-in-traffic> + +Thresholds. + +=item B<--warning-out-traffic> + +Thresholds. + +=item B<--critical-out-traffic> + +Thresholds. + +=item B<--warning-in-error> + +Thresholds. + +=item B<--critical-in-error> + +Thresholds. + +=item B<--warning-in-discard> + +Thresholds. + +=item B<--critical-in-discard> + +Thresholds. + +=item B<--warning-out-error> + +Thresholds. + +=item B<--critical-out-error> + +Thresholds. + +=item B<--warning-out-discard> + +Thresholds. + +=item B<--critical-out-discard> + +Thresholds. + +=item B<--warning-in-ucast> + +Thresholds. + +=item B<--critical-in-ucast> + +Thresholds. + +=item B<--warning-in-bcast> + +Thresholds. + +=item B<--critical-in-bcast> + +Thresholds. + +=item B<--warning-in-mcast> + +Thresholds. + +=item B<--critical-in-mcast> + +Thresholds. + +=item B<--warning-out-ucast> + +Thresholds. + +=item B<--critical-out-ucast> + +Thresholds. + +=item B<--warning-out-bcast> + +Thresholds. + +=item B<--critical-out-bcast> + +Thresholds. + +=item B<--warning-out-mcast> + +Thresholds. + +=item B<--critical-out-mcast> + +Thresholds. + +=item B<--warning-speed> + +Thresholds in b/s. + +=item B<--critical-speed> + +Thresholds in b/s. + +=item B<--warning-input-power> + +Thresholds in C. + +=item B<--critical-input-power> + +Thresholds in C. + +=item B<--warning-bias-current> + +Thresholds in C. + +=item B<--critical-bias-current> + +Thresholds in C. + +=item B<--warning-output-power> + +Thresholds in C. + +=item B<--critical-output-power> + +Thresholds in C. + +=item B<--warning-module-temperature> + +Thresholds in °C. + +=item B<--critical-module-temperature> + +Thresholds in °C. -And also: 'input-power' (dBm), 'bias-current' (mA), 'output-power' (dBm), 'module-temperature' (C). =item B<--units-traffic> @@ -253,15 +420,20 @@ Units of thresholds for communication types (default: 'percent_delta') ('percent =item B<--nagvis-perfdata> -Display traffic perfdata to be compatible with nagvis widget. +Display traffic perfdata to be compatible with NagVis widget. =item B<--interface> -Set the interface (number expected) example: 1,2,... (empty means 'check all interfaces'). +Check only the interfaces with the specified IDs (OID indexes, e.g.: 1,2,...). If empty, all interfaces will be monitored. +To filter on interface names, see --name. =item B<--name> -Allows you to define the interface (in option --interface) by name instead of OID index. The name matching mode supports regular expressions. +With this option, the interfaces will be filtered by name (given in option --interface) instead of OID index. The name matching mode supports regular expressions. + +=item B<--regex-id> + +With this option, interface IDs will be filtered using the --interface parameter as a regular expression instead of a list of IDs. =item B<--speed> @@ -277,7 +449,7 @@ Set interface speed for outgoing traffic (in Mb). =item B<--force-counters32> -Force to use 32 bits counters (even in snmp v2c and v3). Should be used when 64 bits counters are buggy. +Force to use 32-bit counters (even with SNMP versions 2c and 3). To use when 64 bits counters are buggy. =item B<--reload-cache-time> diff --git a/src/network/huawei/snmp/mode/memory.pm b/src/centreon/common/huawei/standard/snmp/mode/memory.pm similarity index 67% rename from src/network/huawei/snmp/mode/memory.pm rename to src/centreon/common/huawei/standard/snmp/mode/memory.pm index e24cbc25b..c93e88a5b 100644 --- a/src/network/huawei/snmp/mode/memory.pm +++ b/src/centreon/common/huawei/standard/snmp/mode/memory.pm @@ -18,7 +18,7 @@ # limitations under the License. # -package network::huawei::snmp::mode::memory; +package centreon::common::huawei::standard::snmp::mode::memory; use base qw(centreon::plugins::templates::counter); @@ -30,21 +30,23 @@ sub custom_usage_perfdata { if ($self->{result_values}->{total} > 0) { $self->{output}->perfdata_add( - label => 'used', unit => 'B', + label => 'used', unit => 'B', instances => $self->use_instances(extra_instance => $options{extra_instance}) ? $self->{result_values}->{display} : undef, - value => $self->{result_values}->{used}, - warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel}, total => $self->{result_values}->{total}, cast_int => 1), - critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel}, total => $self->{result_values}->{total}, cast_int => 1), - min => 0, max => $self->{result_values}->{total} + value => $self->{result_values}->{used}, + warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel}, total => $self->{result_values}->{total}, cast_int => 1), + critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel}, total => $self->{result_values}->{total}, cast_int => 1), + min => 0, + max => $self->{result_values}->{total} ); } else { $self->{output}->perfdata_add( - label => 'used', unit => '%', + label => 'used', unit => '%', instances => $self->use_instances(extra_instance => $options{extra_instance}) ? $self->{result_values}->{display} : undef, - value => $self->{result_values}->{prct_used}, - warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel}), - critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel}), - min => 0, max => 100 + value => $self->{result_values}->{prct_used}, + warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel}), + critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel}), + min => 0, + max => 100 ); } } @@ -52,7 +54,13 @@ sub custom_usage_perfdata { sub custom_usage_threshold { my ($self, %options) = @_; - my $exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{prct_used}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]); + my $exit = $self->{perfdata}->threshold_check( + value => $self->{result_values}->{prct_used}, + threshold => [ + { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, + { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } + ] + ); return $exit; } @@ -66,10 +74,12 @@ sub custom_usage_output { my ($total_free_value, $total_free_unit) = $self->{perfdata}->change_bytes(value => $self->{result_values}->{free}); $msg = sprintf("Total: %s Used: %s (%.2f%%) Free: %s (%.2f%%)", - $total_size_value . " " . $total_size_unit, - $total_used_value . " " . $total_used_unit, $self->{result_values}->{prct_used}, - $total_free_value . " " . $total_free_unit, $self->{result_values}->{prct_free}); + $total_size_value . " " . $total_size_unit, + $total_used_value . " " . $total_used_unit, $self->{result_values}->{prct_used}, + $total_free_value . " " . $total_free_unit, $self->{result_values}->{prct_free} + ); } + return $msg; } @@ -77,9 +87,9 @@ sub custom_usage_calc { my ($self, %options) = @_; $self->{result_values}->{display} = $options{new_datas}->{$self->{instance} . '_display'}; - $self->{result_values}->{total} = $options{new_datas}->{$self->{instance} . '_total'}; - $self->{result_values}->{free} = $options{new_datas}->{$self->{instance} . '_free'}; - $self->{result_values}->{used} = $options{new_datas}->{$self->{instance} . '_total'} - $self->{result_values}->{free}; + $self->{result_values}->{total} = $options{new_datas}->{$self->{instance} . '_total'}; + $self->{result_values}->{free} = $options{new_datas}->{$self->{instance} . '_free'}; + $self->{result_values}->{used} = $options{new_datas}->{$self->{instance} . '_total'} - $self->{result_values}->{free}; if ($self->{result_values}->{total} > 0) { $self->{result_values}->{prct_free} = $self->{result_values}->{free} * 100 / $self->{result_values}->{total}; @@ -87,6 +97,7 @@ sub custom_usage_calc { } else { $self->{result_values}->{prct_used} = $options{new_datas}->{$self->{instance} . '_used_prct'}; } + return 0; } @@ -99,11 +110,11 @@ sub set_counters { $self->{maps_counters}->{memory} = [ { label => 'usage', set => { - key_values => [ { name => 'display' }, { name => 'used_prct' }, { name => 'free' }, { name => 'total' } ], - closure_custom_calc => $self->can('custom_usage_calc'), - closure_custom_output => $self->can('custom_usage_output'), - closure_custom_perfdata => $self->can('custom_usage_perfdata'), - closure_custom_threshold_check => $self->can('custom_usage_threshold'), + key_values => [ { name => 'display' }, { name => 'used_prct' }, { name => 'free' }, { name => 'total' } ], + closure_custom_calc => $self->can('custom_usage_calc'), + closure_custom_output => $self->can('custom_usage_output'), + closure_custom_perfdata => $self->can('custom_usage_perfdata'), + closure_custom_threshold_check => $self->can('custom_usage_threshold'), } }, ]; @@ -120,16 +131,14 @@ sub new { my $self = $class->SUPER::new(package => __PACKAGE__, %options); bless $self, $class; - $options{options}->add_options(arguments => - { - }); + $options{options}->add_options(arguments => {}); return $self; } my $oid_hwEntityMemUsage = '.1.3.6.1.4.1.2011.5.25.31.1.1.1.1.7'; # prct my $oid_hwMemoryDevEntry = '.1.3.6.1.4.1.2011.6.3.5.1.1'; -my $oid_hwResOccupancy = '.1.3.6.1.4.1.2011.6.3.17.1.1.3'; +my $oid_hwResOccupancy = '.1.3.6.1.4.1.2011.6.3.17.1.1.3'; my $map_type = { 1 => 'memory', 2 => 'messageUnits', 3 => 'cpu' }; my $mapping = { @@ -149,19 +158,19 @@ sub manage_selection { my $num = 1; if (defined($results->{$oid_hwMemoryDevEntry}) && scalar(keys %{$results->{$oid_hwMemoryDevEntry}}) > 0) { - foreach (keys %{$results->{$oid_hwMemoryDevEntry}}) { + foreach (sort keys %{$results->{$oid_hwMemoryDevEntry}}) { next if (!/^$mapping->{hwMemoryDevFree}->{oid}\.(.*)$/); my $result = $options{snmp}->map_instance(mapping => $mapping, results => $results->{$oid_hwMemoryDevEntry}, instance => $1); $self->{memory}->{$num} = { display => $num, used_prct => -1, free => $result->{hwMemoryDevFree}, total => $result->{hwMemoryDevSize} }; $num++; } } elsif (defined($results->{$oid_hwEntityMemUsage}) && scalar(keys %{$results->{$oid_hwEntityMemUsage}}) > 0) { - foreach (keys %{$results->{$oid_hwEntityMemUsage}}) { + foreach (sort keys %{$results->{$oid_hwEntityMemUsage}}) { $self->{memory}->{$num} = { display => $num, used_prct => $results->{$oid_hwEntityMemUsage}->{$_}, free => 0, total => 0 }; $num++; } } else { - foreach (keys %{$results->{$oid_hwResOccupancy}}) { + foreach (sort keys %{$results->{$oid_hwResOccupancy}}) { /\.([0-9]*?)$/; next if (!defined($map_type->{$1}) || $map_type->{$1} ne 'memory'); $self->{memory}->{$num} = { display => $num, used_prct => $results->{$oid_hwResOccupancy}->{$_}, free => 0, total => 0 }; diff --git a/src/centreon/plugins/output.pm b/src/centreon/plugins/output.pm index 3c93f0c1a..96aa257c6 100644 --- a/src/centreon/plugins/output.pm +++ b/src/centreon/plugins/output.pm @@ -45,6 +45,7 @@ sub new { 'change-exit:s@' => { name => 'change_exit' }, 'change-short-output:s@' => { name => 'change_short_output' }, 'change-long-output:s@' => { name => 'change_long_output' }, + 'change-output-adv:s@' => { name => 'change_output_adv' }, 'use-new-perfdata' => { name => 'use_new_perfdata' }, 'filter-uom:s' => { name => 'filter_uom' }, 'verbose' => { name => 'verbose' }, @@ -124,6 +125,29 @@ sub check_options { } } + if (defined($self->{option_results}->{change_output_adv})) { + foreach (@{$self->{option_results}->{change_output_adv}}) { + my ($expr, $short_output, $exit_code) = split /,/; + next if (!defined($expr) || $expr eq ''); + + $expr =~ s/%\{(.*?)\}/\$values->{$1}/g; + $expr =~ s/%\((.*?)\)/\$values->{$1}/g; + + if ( defined($exit_code) && $exit_code ne '' && defined( $self->{errors}->{uc($exit_code)} ) ) { + $exit_code = uc($exit_code); + } else { + $exit_code = undef; + } + + $self->{change_output_adv} = [] if (!defined($self->{change_output_adv})); + push @{$self->{change_output_adv}}, { + expr => $expr, + short_output => $short_output, + exit_code => $exit_code + }; + } + } + if (defined($self->{option_results}->{change_exit})) { $self->{change_exit} = {}; foreach (@{$self->{option_results}->{change_exit}}) { @@ -211,6 +235,7 @@ sub output_add { push @{$self->{global_short_outputs}->{uc($options->{severity})}}, $options->{short_msg}; $self->set_status(exit_litteral => $options->{severity}); } + if (defined($options->{long_msg})) { chomp $options->{long_msg}; @@ -483,7 +508,8 @@ sub output_txt_short_display { sub output_txt_short { my ($self, %options) = @_; - if (!defined($self->{option_results}->{change_short_output})) { + if (!defined($self->{option_results}->{change_short_output}) && + !defined($self->{change_output_adv})) { $self->output_txt_short_display(%options); return ; } @@ -503,6 +529,18 @@ sub output_txt_short { eval "\$stdout =~ s{$pattern}{$replace}$modifier"; } + my $exit = defined($options{exit_litteral}) ? uc($options{exit_litteral}) : uc($self->{myerrors}->{ $self->{global_status} }); + foreach (@{$self->{change_output_adv}}) { + if ($self->test_eval(test => $_->{expr}, values => { short_output => $stdout, exit_code => $self->{errors}->{$exit} })) { + if (defined($_->{short_output}) && $_->{short_output} ne '') { + $stdout = $_->{short_output}; + } + if (defined($_->{exit_code}) && $_->{exit_code} ne '') { + $self->{coa_save_exit_code} = $_->{exit_code}; + } + } + } + print $stdout; } @@ -512,6 +550,7 @@ sub output_txt { my $force_long_output = (defined($options{force_long_output}) && $options{force_long_output} == 1) ? 1 : 0; return if ($self->{nodisplay} == 1); + if (defined($self->{global_short_concat_outputs}->{UNQUALIFIED_YET})) { $self->output_add(severity => uc($options{exit_litteral}), short_msg => $self->{global_short_concat_outputs}->{UNQUALIFIED_YET}); } @@ -689,6 +728,10 @@ sub exit { } else { $exit = $self->{myerrors}->{ $self->{global_status} }; } + + if (defined($self->{coa_save_exit_code})) { + $exit = $self->{coa_save_exit_code}; + } if (defined($self->{change_exit}) && defined($self->{change_exit}->{$exit})) { $exit = $self->{change_exit}->{$exit}; } @@ -1538,15 +1581,14 @@ remove all metrics whose value equals 0 and that don't have a maximum value. =item B<--explode-perfdata-max> Create a new metric for each metric that comes with a maximum limit. The new -metric will be named identically with a '_max' suffix). +metric will be named identically with a '_max' suffix. Example: it will split 'used_prct'=26.93%;0:80;0:90;0;100 into 'used_prct'=26.93%;0:80;0:90;0;100 'used_prct_max'=100%;;;; - =item B<--change-perfdata> B<--extend-perfdata> Change or extend perfdata. -Syntax: --extend-perfdata=searchlabel,newlabel,target[,[newuom],[min],[max]] +Syntax: --extend-perfdata=searchlabel,newlabel,target[,[],[min],[max]] Common examples: @@ -1567,11 +1609,11 @@ Change traffic values in percent: --change-perfdata='traffic_in,,percent()' =item B<--extend-perfdata-group> Add new aggregated metrics (min, max, average or sum) for groups of metrics defined by a regex match on the metrics' names. -Syntax: --extend-perfdata-group=regex,namesofnewmetrics,calculation[,[newuom],[min],[max]] +Syntax: --extend-perfdata-group=regex,,calculation[,[],[min],[max]] regex: regular expression -namesofnewmetrics: how the new metrics' names are composed (can use $1, $2... for groups defined by () in regex). +: how the new metrics' names are composed (can use $1, $2... for groups defined by () in regex). calculation: how the values of the new metrics should be calculated -newuom (optional): unit of measure for the new metrics + (optional): unit of measure for the new metrics min (optional): lowest value the metrics can reach max (optional): highest value the metrics can reach @@ -1598,6 +1640,14 @@ Replace an exit code with one of your choice. Example: adding --change-exit=unknown=critical will result in a CRITICAL state instead of an UNKNOWN state. +=item B<--change-output-adv> + +Replace short output and exit code based on a "if" condition using the following variables: +short_output, exit_code. +Variables must be written either %{variable} or %(variable). +Example: adding --change-output-adv='%(short_ouput) =~ /UNKNOWN: No daemon/,OK: No daemon,OK' will +change the following specific UNKNOWN result to an OK result. + =item B<--range-perfdata> Rewrite the ranges displayed in the perfdata. Accepted values: @@ -1640,8 +1690,8 @@ format). =item B<--output-file> -Write output in file (can be combined with json, xml and openmetrics options). -E.g.: --output-file=/tmp/output.txt will write the output in /tmp/output.txt. +Write output in file (can be combined with JSON, XML and OpenMetrics options). +Example: --output-file=/tmp/output.txt will write the output in /tmp/output.txt. =item B<--disco-format> diff --git a/src/database/informix/snmp/mode/logfileusage.pm b/src/database/informix/snmp/mode/logfileusage.pm index a4c3973f6..fbb9354ff 100644 --- a/src/database/informix/snmp/mode/logfileusage.pm +++ b/src/database/informix/snmp/mode/logfileusage.pm @@ -65,6 +65,7 @@ sub new { my $mapping = { onLogicalLogDbspace => { oid => '.1.3.6.1.4.1.893.1.1.1.8.1.3' }, + onLogicalLogStatus => { oid => '.1.3.6.1.4.1.893.1.1.1.8.1.4' }, onLogicalLogPagesAllocated => { oid => '.1.3.6.1.4.1.893.1.1.1.8.1.7' }, onLogicalLogPagesUsed => { oid => '.1.3.6.1.4.1.893.1.1.1.8.1.8' }, }; @@ -76,6 +77,7 @@ sub manage_selection { my $snmp_result = $options{snmp}->get_multiple_table(oids => [ { oid => $oid_applName }, { oid => $mapping->{onLogicalLogDbspace}->{oid} }, + { oid => $mapping->{onLogicalLogStatus}->{oid} }, { oid => $mapping->{onLogicalLogPagesAllocated}->{oid} }, { oid => $mapping->{onLogicalLogPagesUsed}->{oid} }, ], return_type => 1, nothing_quit => 1 @@ -103,7 +105,17 @@ sub manage_selection { } $self->{global}->{$name}->{allocated} += $result->{onLogicalLogPagesAllocated}; - $self->{global}->{$name}->{used} += $result->{onLogicalLogPagesUsed}; + + # Status of the logical-log file: + # newlyAdded (1) + # free (2) + # current (3) + # used (4) + # backedUpButNeeded (5) + # consider log files with state backedUpButNeeded as free space + if ($result->{onLogicalLogStatus} != 5) { + $self->{global}->{$name}->{used} += $result->{onLogicalLogPagesUsed}; + } } foreach (keys %{$self->{global}}) { @@ -128,7 +140,8 @@ Check log files usage. =item B<--filter-name> -Filter dbspace name (can be a regexp). +Define which C should be monitored based on their names. +This option will be treated as a regular expression. =item B<--warning-usage> diff --git a/src/hardware/devices/video/axis/snmp/mode/components/fan.pm b/src/hardware/devices/video/axis/snmp/mode/components/fan.pm index 5ae9e53eb..85f14b2a7 100644 --- a/src/hardware/devices/video/axis/snmp/mode/components/fan.pm +++ b/src/hardware/devices/video/axis/snmp/mode/components/fan.pm @@ -24,8 +24,8 @@ use strict; use warnings; my %map_fan_status = ( - 0 => 'ok', - 1 => 'failed', + 1 => 'ok', + 2 => 'failure', ); my $mapping = { diff --git a/src/hardware/devices/video/axis/snmp/mode/components/psu.pm b/src/hardware/devices/video/axis/snmp/mode/components/psu.pm index a155d5679..da3a61a3a 100644 --- a/src/hardware/devices/video/axis/snmp/mode/components/psu.pm +++ b/src/hardware/devices/video/axis/snmp/mode/components/psu.pm @@ -29,7 +29,7 @@ my %map_psu_status = ( ); my $mapping = { - axisPsState => { oid => '.1.3.6.1.4.1.368.4.1.2.1.3', map => \%map_psu_status }, + axisPsState => { oid => '.1.3.6.1.4.1.368.4.1.1.1.3', map => \%map_psu_status }, }; sub load { diff --git a/src/hardware/server/lenovo/xcc/snmp/mode/components/cpu.pm b/src/hardware/server/lenovo/xcc/snmp/mode/components/cpu.pm new file mode 100644 index 000000000..d70a3ee06 --- /dev/null +++ b/src/hardware/server/lenovo/xcc/snmp/mode/components/cpu.pm @@ -0,0 +1,48 @@ +package hardware::server::lenovo::xcc::snmp::mode::components::cpu; +use strict; +use warnings FATAL => 'all'; + +use strict; +use warnings; +use centreon::plugins::misc; + +my $mapping = { + cpuStatus => { oid => '.1.3.6.1.4.1.19046.11.1.1.5.20.1.11' }, + cpuString => { oid => '.1.3.6.1.4.1.19046.11.1.1.5.20.1.2' }, +}; + +my $oid_cpuEntry = '.1.3.6.1.4.1.19046.11.1.1.5.20.1'; + +sub load { + my ($self) = @_; + + push @{$self->{request}}, { oid => $oid_cpuEntry }; +} +sub check { + my ($self) = @_; + + $self->{output}->output_add(long_msg => "Checking cpu"); + $self->{components}->{cpu} = { name => 'cpu', total => 0, skip => 0 }; + return if ($self->check_filter(section => 'cpu')); + + foreach my $oid ($self->{snmp}->oid_lex_sort(keys %{$self->{results}->{$oid_cpuEntry}})) { + + next if ($oid !~ /^$mapping->{cpuString}->{oid}\.(.*)$/); + + my $instance = $1; + my $result = $self->{snmp}->map_instance(mapping => $mapping, results => $self->{results}->{$oid_cpuEntry}, instance => $instance); + next if ($self->check_filter(section => 'cpu', instance => $instance)); + $result->{cpuStatus} = centreon::plugins::misc::trim($result->{cpuStatus}); + $self->{components}->{cpu}->{total}++; + + $self->{output}->output_add(long_msg => sprintf("'%s' status is %s [instance: %s].", + $result->{cpuString}, $result->{cpuStatus}, $instance)); + + my $exit = $self->get_severity(label => 'default', section => 'default', value => $result->{cpuStatus}); + if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) { + $self->{output}->output_add(severity => $exit, + short_msg => sprintf("'%s' cpu status for '%s'", $result->{cpuStatus}, $result->{cpuString})); + } + } +} +1; \ No newline at end of file diff --git a/src/hardware/server/lenovo/xcc/snmp/mode/components/health.pm b/src/hardware/server/lenovo/xcc/snmp/mode/components/health.pm new file mode 100644 index 000000000..1d3529335 --- /dev/null +++ b/src/hardware/server/lenovo/xcc/snmp/mode/components/health.pm @@ -0,0 +1,68 @@ +# +# Copyright 2024 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package hardware::server::lenovo::xcc::snmp::mode::components::health; + use Data::Dumper; + +use strict; +use warnings; +use centreon::plugins::misc; + +my $mapping = { + healthStatus => { oid => '.1.3.6.1.4.1.19046.11.1.1.4.2.1.2' }, + healthString => { oid => '.1.3.6.1.4.1.19046.11.1.1.4.2.1.3' }, +}; + +my $oid_healthEntry = '.1.3.6.1.4.1.19046.11.1.1.4.2.1'; + +sub load { + my ($self) = @_; + + push @{$self->{request}}, { oid => $oid_healthEntry }; +} +sub check { + my ($self) = @_; + + $self->{output}->output_add(long_msg => "Checking health"); + $self->{components}->{health} = { name => 'health', total => 0, skip => 0 }; + return if ($self->check_filter(section => 'health')); + + foreach my $oid ($self->{snmp}->oid_lex_sort(keys %{$self->{results}->{$oid_healthEntry}})) { + + next if ($oid !~ /^$mapping->{healthString}->{oid}\.(.*)$/); + + my $instance = $1; + my $result = $self->{snmp}->map_instance(mapping => $mapping, results => $self->{results}->{$oid_healthEntry}, instance => $instance); + next if ($self->check_filter(section => 'health', instance => $instance)); + $result->{healthStatus} = centreon::plugins::misc::trim($result->{healthStatus}); + $self->{components}->{health}->{total}++; + + $self->{output}->output_add(long_msg => sprintf("health '%s' status is %s [instance: %s].", + $result->{healthString}, $result->{healthStatus}, $instance)); + + my $exit = $self->get_severity(label => 'default', section => 'default', value => $result->{healthStatus}); + if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) { + $self->{output}->output_add(severity => $exit, + short_msg => sprintf("'%s' health status for '%s'", $result->{healthStatus}, $result->{healthString})); + } + } +} + +1; \ No newline at end of file diff --git a/src/hardware/server/lenovo/xcc/snmp/mode/components/memory.pm b/src/hardware/server/lenovo/xcc/snmp/mode/components/memory.pm new file mode 100644 index 000000000..e524c6cb9 --- /dev/null +++ b/src/hardware/server/lenovo/xcc/snmp/mode/components/memory.pm @@ -0,0 +1,48 @@ +package hardware::server::lenovo::xcc::snmp::mode::components::memory; +use strict; +use warnings; + +use strict; +use warnings; +use centreon::plugins::misc; + +my $mapping = { + memoryStatus => { oid => '.1.3.6.1.4.1.19046.11.1.1.5.21.1.8' }, + memoryString => { oid => '.1.3.6.1.4.1.19046.11.1.1.5.21.1.2' }, +}; + +my $oid_memoryEntry = '.1.3.6.1.4.1.19046.11.1.1.5.21.1'; + +sub load { + my ($self) = @_; + + push @{$self->{request}}, { oid => $oid_memoryEntry }; +} +sub check { + my ($self) = @_; + + $self->{output}->output_add(long_msg => "Checking memory"); + $self->{components}->{memory} = { name => 'memory', total => 0, skip => 0 }; + return if ($self->check_filter(section => 'memory')); + + foreach my $oid ($self->{snmp}->oid_lex_sort(keys %{$self->{results}->{$oid_memoryEntry}})) { + + next if ($oid !~ /^$mapping->{memoryString}->{oid}\.(.*)$/); + + my $instance = $1; + my $result = $self->{snmp}->map_instance(mapping => $mapping, results => $self->{results}->{$oid_memoryEntry}, instance => $instance); + next if ($self->check_filter(section => 'memory', instance => $instance)); + $result->{memoryStatus} = centreon::plugins::misc::trim($result->{memoryStatus}); + $self->{components}->{memory}->{total}++; + + $self->{output}->output_add(long_msg => sprintf("'%s' status is %s [instance: %s].", + $result->{memoryString}, $result->{memoryStatus}, $instance)); + + my $exit = $self->get_severity(label => 'default', section => 'default', value => $result->{memoryStatus}); + if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) { + $self->{output}->output_add(severity => $exit, + short_msg => sprintf("'%s' memory status for '%s'", $result->{memoryStatus}, $result->{memoryString})); + } + } +} +1; \ No newline at end of file diff --git a/src/hardware/server/lenovo/xcc/snmp/mode/hardware.pm b/src/hardware/server/lenovo/xcc/snmp/mode/hardware.pm index b803e6fc4..8bea9ad56 100644 --- a/src/hardware/server/lenovo/xcc/snmp/mode/hardware.pm +++ b/src/hardware/server/lenovo/xcc/snmp/mode/hardware.pm @@ -33,18 +33,19 @@ sub set_system { $self->{cb_hook2} = 'snmp_execute'; $self->{thresholds} = { - default => [ + default => [ ['Normal', 'OK'], ['.*', 'CRITICAL'] ], raidvolume => [ ['Optimal', 'OK'], ['.*', 'CRITICAL'] - ] + ], + }; $self->{components_path} = 'hardware::server::lenovo::xcc::snmp::mode::components'; - $self->{components_module} = ['temperature', 'voltage', 'fan', 'psu', 'disk', 'raidvolume']; + $self->{components_module} = ['temperature', 'voltage', 'fan', 'psu', 'disk', 'raidvolume', 'health', 'cpu', 'memory']; } sub snmp_execute { @@ -77,7 +78,7 @@ Check hardware. =item B<--component> Which component to check (default: '.*'). -Can be: 'temperature', 'voltage', 'fan', 'psu', 'disk', 'raidvolume'. +Can be: 'temperature', 'voltage', 'fan', 'psu', 'disk', 'raidvolume', 'health', 'cpu', 'memory'. =item B<--filter> diff --git a/src/hardware/server/sun/mgmt_cards/mode/showfaults.pm b/src/hardware/server/sun/mgmt_cards/mode/showfaults.pm index c34656f39..d9012c853 100644 --- a/src/hardware/server/sun/mgmt_cards/mode/showfaults.pm +++ b/src/hardware/server/sun/mgmt_cards/mode/showfaults.pm @@ -64,8 +64,8 @@ sub check_options { command => $self->{option_results}->{command_plink} ); - $self->{option_results}->{command} = 'plink' - if (!defined($self->{option_results}->{command}) || $self->{option_results}->{command} eq ''); + $self->{option_results}->{command_plink} = 'plink' + if (!defined($self->{option_results}->{command_plink}) || $self->{option_results}->{command_plink} eq ''); } sub run { @@ -132,25 +132,25 @@ __END__ =head1 MODE -Check Sun 'T1xxx', 'T2xxx' Hardware (through ALOM4v). +Check Sun C, C management cards hardware (using C). =over 8 =item B<--hostname> -Hostname to query. +Define the hostname to query. =item B<--username> -ssh username. +Define the ssh username. =item B<--password> -ssh password. +Define the ssh password. =item B<--command-plink> -Plink command (default: plink). Use to set a path. +Define the C command (default: C). =item B<--timeout> diff --git a/src/hardware/server/sun/mgmt_cards/mode/showfaulty.pm b/src/hardware/server/sun/mgmt_cards/mode/showfaulty.pm index 40f7faf68..e30b95b69 100644 --- a/src/hardware/server/sun/mgmt_cards/mode/showfaulty.pm +++ b/src/hardware/server/sun/mgmt_cards/mode/showfaulty.pm @@ -71,8 +71,8 @@ sub check_options { command => $self->{option_results}->{command_plink} ); - $self->{option_results}->{command} = 'plink' - if (!defined($self->{option_results}->{command}) || $self->{option_results}->{command} eq ''); + $self->{option_results}->{command_plink} = 'plink' + if (!defined($self->{option_results}->{command_plink}) || $self->{option_results}->{command_plink} eq ''); } sub run { @@ -185,30 +185,30 @@ __END__ =head1 MODE -Check Sun 'T3-x', 'T4-x' and 'T5xxx' Hardware (through ILOM). +Check Sun C, C and C management cards hardware (using C). =over 8 =item B<--hostname> -Hostname to query. +Define the hostname to query. =item B<--username> -ssh username. +Define the ssh username. =item B<--password> -ssh password. +Define the ssh password. + +=item B<--command-plink> + +Define the C command (default: C). =item B<--memory> Returns new errors (retention file is used by the following option). -=item B<--command-plink> - -Plink command (default: plink). Use to set a path. - =item B<--timeout> Timeout in seconds for the command (default: 30). diff --git a/src/network/aruba/aoscx/snmp/mode/stack.pm b/src/network/aruba/aoscx/snmp/mode/stack.pm new file mode 100644 index 000000000..f481afb18 --- /dev/null +++ b/src/network/aruba/aoscx/snmp/mode/stack.pm @@ -0,0 +1,312 @@ +# +# Copyright 2023 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package network::aruba::aoscx::snmp::mode::stack; + +use base qw(centreon::plugins::templates::counter); + +use strict; +use warnings; +use Digest::MD5 qw(md5_hex); +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold catalog_status_calc); + +sub custom_member_status_output { + my ($self, %options) = @_; + + my $msg = sprintf( + 'role: %s [state: %s]', + $self->{result_values}->{role}, + $self->{result_values}->{state}, + ); + return $msg; +} + +sub custom_member_status_calc { + my ($self, %options) = @_; + + $self->{result_values}->{roleLast} = $options{old_datas}->{$self->{instance} . '_role'}; + $self->{result_values}->{role} = $options{new_datas}->{$self->{instance} . '_role'}; + + $self->{result_values}->{stateLast} = $options{old_datas}->{$self->{instance} . '_state'}; + $self->{result_values}->{state} = $options{new_datas}->{$self->{instance} . '_state'}; + if (!defined($options{old_datas}->{$self->{instance} . '_role'})) { + $self->{error_msg} = "buffer creation"; + return -2; + } + + return 0; +} + +sub custom_port_status_output { + my ($self, %options) = @_; + + my $msg = sprintf( + 'operational status: %s [admin status: %s]', + $self->{result_values}->{oper_status}, + $self->{result_values}->{admin_status} + ); + return $msg; +} + +sub set_counters { + my ($self, %options) = @_; + + $self->{maps_counters_type} = [ + { name => 'member', + type => 3, + cb_prefix_output => 'prefix_member_output', + cb_long_output => 'member_long_output', + indent_long_output => ' ', + message_multiple => 'All stack members are ok', + group => + [ + { name => 'global', type => 0, skipped_code => { -10 => 1 } }, + { name => 'port', + display_long => 1, + cb_prefix_output => 'prefix_port_output', + message_multiple => 'All ports are ok', + type => 1, + skipped_code => { -10 => 1 } }, + ] + } + ]; + + $self->{maps_counters}->{global} = [ + { label => 'member-status', threshold => 0, set => { + key_values => [ { name => 'role' }, { name => 'display' }, { name => 'state'} ], + closure_custom_calc => $self->can('custom_member_status_calc'), + closure_custom_output => $self->can('custom_member_status_output'), + closure_custom_perfdata => sub {return 0;}, + closure_custom_threshold_check => \&catalog_status_threshold, + } + }, + ]; + + $self->{maps_counters}->{port} = [ + { label => 'port-status', threshold => 0, set => { + key_values => + [ { name => 'oper_status' }, { name => 'admin_status' }, { name => 'display' } ], + closure_custom_calc => \&catalog_status_calc, + closure_custom_output => $self->can('custom_port_status_output'), + closure_custom_perfdata => sub {return 0;}, + closure_custom_threshold_check => \&catalog_status_threshold, + } + }, + ]; +} + +sub member_long_output { + my ($self, %options) = @_; + + return "checking stack member '" . $options{instance_value}->{display} . "'"; +} + +sub prefix_member_output { + my ($self, %options) = @_; + + return "Stack member '" . $options{instance_value}->{display} . "' "; +} + +sub prefix_port_output { + my ($self, %options) = @_; + + return "port '" . $options{instance_value}->{display} . "' "; +} + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options, statefile => 1, force_new_perfdata => 1); + bless $self, $class; + + $options{options}->add_options(arguments => { + 'unknown-member-status:s' => { name => 'unknown_member_status', default => '' }, + 'warning-member-status:s' => { name => 'warning_member_status', default => '' }, + 'critical-member-status:s' => { name => 'critical_member_status', default => '%{role} ne %{roleLast}' }, + 'unknown-port-status:s' => { name => 'unknown_port_status', default => '' }, + 'warning-port-status:s' => { name => 'warning_port_status', default => '' }, + 'critical-port-status:s' => { + name => 'critical_port_status', + default => '%{admin_status} eq "up" and %{oper_status} ne "up"' + }, + }); + + return $self; +} + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::check_options(%options); + + $self->change_macros( + macros => [ + 'unknown_member_status', 'warning_member_status', 'critical_member_status', + 'unknown_port_status', 'warning_port_status', 'critical_port_status' + ] + ); +} + +my $map_member_state = { + 0 => 'unusedId', + 1 => 'missing', + 2 => 'provision', + 3 => 'commander', + 4 => 'standby', + 5 => 'member', + 6 => 'shutdown', + 7 => 'booting', + 8 => 'communicationFailure', + 9 => 'incompatibleOs', + 10 => 'unknownState', + 11 => 'standbyBooting' +}; +my $map_member_role_status = { + 1 => 'active', + 2 => 'notInService', + 3 => 'notReady', + 4 => 'createAndGo', + 5 => 'createAndWait', + 6 => 'destroy' +}; +my $map_port_admin_status = { + 1 => 'enabled', + 2 => 'disabled' +}; +my $map_port_operation_status = { + 1 => 'up', + 2 => 'down', + 3 => 'disabled', + 4 => 'blocked' +}; + +my $mapping_member_table = { + stackMemberSerialNum => { oid => '.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.14' }, + stackMemberRoleStatus => { oid => '.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.7', map => $map_member_role_status }, + stackMemberState => { oid => '.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.9', map => $map_member_state }, +}; +my $mapping_port_table = { + stackPortAdminStatus => { oid => '.1.3.6.1.4.1.11.2.14.11.5.1.116.1.5.1.8', map => $map_port_admin_status }, + stackPortOperStatus => { oid => '.1.3.6.1.4.1.11.2.14.11.5.1.116.1.5.1.3', map => $map_port_operation_status } +}; + +my $oid_memberTableEntry = '.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1'; +my $oid_portTableEntry = '.1.3.6.1.4.1.11.2.14.11.5.1.116.1.5.1'; + +sub manage_selection { + my ($self, %options) = @_; + + $self->{member} = {}; + my $snmp_result = $options{snmp}->get_multiple_table( + oids => [ + { oid => $oid_memberTableEntry }, + { oid => $mapping_member_table->{stackMemberSerialNum}->{oid} }, + { oid => $mapping_member_table->{stackMemberRoleStatus}->{oid} }, + { oid => $mapping_member_table->{stackMemberState}->{oid} } + , + { oid => $oid_portTableEntry }, + { oid => $mapping_port_table->{stackPortAdminStatus}->{oid} }, + { oid => $mapping_port_table->{stackPortOperStatus}->{oid} }, + , + ], + nothing_quit => 1 + ); + + foreach my $oid (keys %{$snmp_result->{$oid_memberTableEntry}}) { + next if ($oid !~ /^$mapping_member_table->{stackMemberRoleStatus}->{oid}\.(.*)$/); + my $instance_id = $1; + my $result = $options{snmp}->map_instance( + mapping => $mapping_member_table, + results => $snmp_result->{$oid_memberTableEntry}, + instance => $instance_id); + + $self->{member}->{$result->{stackMemberSerialNum}} = { + display => $result->{stackMemberSerialNum}, + global => { + display => $result->{stackMemberSerialNum}, + role => $result->{stackMemberRoleStatus}, + state => $result->{stackMemberState}, + }, + port => {}, + }; + + foreach (keys %{$snmp_result->{$oid_portTableEntry}}) { + next if (!/^$mapping_port_table->{stackPortOperStatus}->{oid}\.$instance_id\.(.*?)\.(.*)$/); + my $port_name = $1; + my $result2 = $options{snmp}->map_instance( + mapping => $mapping_port_table, + results => $snmp_result->{$oid_portTableEntry}, + instance => $instance_id . '.' . $port_name . '.1'); + + $self->{member}->{$result->{stackMemberSerialNum}}->{port}->{$port_name} = { + display => $port_name, + admin_status => $result2->{stackPortAdminStatus}, + oper_status => $result2->{stackPortOperStatus}, + }; + } + } + + $self->{cache_name} = "aruba_aoscx_" . $self->{mode} . '_' . $options{snmp}->get_hostname() . '_' . $options{snmp}->get_port() . '_' . + (defined($self->{option_results}->{filter_counters}) ? + md5_hex($self->{option_results}->{filter_counters}) : + md5_hex('all')); +} + +1; + +__END__ + +=head1 MODE + +Check stack members. + +=over 8 + +=item B<--unknown-member-status> + +Define the conditions to match for the status to be UNKNOWN (Default: ''). +You can use the following variables: %{role}, %{roleLast}, %{state}, %{stateLast} + +=item B<--warning-member-status> + +Define the conditions to match for the status to be WARNING (Default: ''). +You can use the following variables: %{role}, %{roleLast}, %{state}, %{stateLast} + +=item B<--critical-member-status> + +Define the conditions to match for the status to be CRITICAL (Default: '%{role} ne %{roleLast}'). +You can use the following variables: %{role}, %{roleLast}, %{state}, %{stateLast} + +=item B<--unknown-port-status> + +Define the conditions to match for the status to be UNKNOWN (Default: ''). +You can use the following variables: %{admin_status}, %{oper_status}, %{display} + +=item B<--warning-port-status> + +Define the conditions to match for the status to be WARNING (Default: ''). +You can use the following variables: %{admin_status}, %{oper_status}, %{display} + +=item B<--critical-port-status> + +Define the conditions to match for the status to be CRITICAL (Default: '%{admin_status} eq "up" and %{oper_status} ne "up"'). +You can use the following variables: %{admin_status}, %{oper_status}, %{display} + +=back + +=cut diff --git a/src/network/aruba/aoscx/snmp/plugin.pm b/src/network/aruba/aoscx/snmp/plugin.pm index 121136c5a..2e16b92f1 100644 --- a/src/network/aruba/aoscx/snmp/plugin.pm +++ b/src/network/aruba/aoscx/snmp/plugin.pm @@ -35,6 +35,7 @@ sub new { 'interfaces' => 'snmp_standard::mode::interfaces', 'list-interfaces' => 'snmp_standard::mode::listinterfaces', 'memory' => 'network::aruba::aoscx::snmp::mode::memory', + 'stack' => 'network::aruba::aoscx::snmp::mode::stack', 'vsf' => 'network::aruba::aoscx::snmp::mode::vsf', 'vsx' => 'network::aruba::aoscx::snmp::mode::vsx' }; diff --git a/src/network/aruba/cppm/snmp/mode/cpu.pm b/src/network/aruba/cppm/snmp/mode/cpu.pm index ff19f61e1..eb1193ddb 100644 --- a/src/network/aruba/cppm/snmp/mode/cpu.pm +++ b/src/network/aruba/cppm/snmp/mode/cpu.pm @@ -45,7 +45,7 @@ Check system CPUs. =item B<--use-ucd> -Use UCD mib for CPU average. +Use UCD MIB for CPU average. =item B<--warning-average> diff --git a/src/network/backbox/restapi/custom/api.pm b/src/network/backbox/restapi/custom/api.pm index 9ba302c6a..088aed5fd 100644 --- a/src/network/backbox/restapi/custom/api.pm +++ b/src/network/backbox/restapi/custom/api.pm @@ -149,10 +149,11 @@ sub request { $self->settings(); my $content = $self->{http}->request( - method => 'GET', + method => $options{method}, url_path => $endpoint, get_param => $options{get_param}, header => [ + 'Accept: application/json', 'AUTH: ' . $self->{api_token} ], warning_status => '', @@ -163,9 +164,11 @@ sub request { # Maybe there is an issue with the token. So we retry. if ($self->{http}->get_code() < 200 || $self->{http}->get_code() >= 300) { $content = $self->{http}->request( + method => $options{method}, url_path => $endpoint, get_param => $options{get_param}, header => [ + 'Accept: application/json', 'AUTH: ' . $self->{api_token} ], unknown_status => $self->{unknown_http_status}, @@ -179,7 +182,6 @@ sub request { $self->{output}->add_option_msg(short_msg => 'Error while retrieving data (add --debug option for detailed message)'); $self->{output}->option_exit(); } - return $decoded; } @@ -190,7 +192,8 @@ sub get_backup_jobs_status { if (!centreon::plugins::misc::is_empty($options{filter_type})) { $endpoint .= '/' . $options{filter_type}; } - return $self->request(endpoint => $endpoint); + return $self->request(method => 'GET', + endpoint => $endpoint); } sub get_config_status { @@ -200,7 +203,8 @@ sub get_config_status { if (!centreon::plugins::misc::is_empty($options{filter_type})) { $endpoint .= '/' . $options{filter_type}; } - return $self->request(endpoint => $endpoint); + return $self->request(method => 'GET', + endpoint => $endpoint); } sub get_intelli_check_status { @@ -213,7 +217,49 @@ sub get_intelli_check_status { if (!centreon::plugins::misc::is_empty($options{report_id})) { $endpoint .= '/' . $options{report_id}; } - return $self->request(endpoint => $endpoint); + return $self->request(method => 'GET', + endpoint => $endpoint); +} + +sub get_devices { + my ($self, %options) = @_; + + my $json_decode = 1; + if (defined($options{json_decode})) { + $json_decode = $options{json_decode}; + } + return $self->request(method => 'GET', + endpoint => 'devices'); +} + +sub get_device_id_from_name { + my ($self, %options) = @_; + + my $devices = $self->get_devices(); + for my $device (@$devices) { + if ($device->{deviceName} eq $options{device_name}) { + return $device->{deviceId}; + } + } +} + +sub get_devices_backups_status { + my ($self, %options) = @_; + + return $self->request(method => 'POST', + endpoint => 'devices/dynamic'); +} + +sub get_device_backup_status { + my ($self, %options) = @_; + + my $backups = $self->get_devices_backups_status(); + + for my $backup (@$backups) { + if ($backup->{deviceId} == $options{device_id}) { + return $backup; + } + } } 1; diff --git a/src/network/backbox/restapi/mode/backup.pm b/src/network/backbox/restapi/mode/backup.pm index be13d97da..591bf481c 100644 --- a/src/network/backbox/restapi/mode/backup.pm +++ b/src/network/backbox/restapi/mode/backup.pm @@ -24,7 +24,6 @@ use base qw(centreon::plugins::templates::counter); use strict; use warnings; -use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); sub prefix_backup_output { my ($self, %options) = @_; diff --git a/src/network/backbox/restapi/mode/configstatus.pm b/src/network/backbox/restapi/mode/configstatus.pm index 0cd5a3975..97583fb85 100644 --- a/src/network/backbox/restapi/mode/configstatus.pm +++ b/src/network/backbox/restapi/mode/configstatus.pm @@ -24,7 +24,6 @@ use base qw(centreon::plugins::templates::counter); use strict; use warnings; -use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); sub set_counters { my ($self, %options) = @_; diff --git a/src/network/backbox/restapi/mode/devicebackup.pm b/src/network/backbox/restapi/mode/devicebackup.pm new file mode 100644 index 000000000..c30cdfe89 --- /dev/null +++ b/src/network/backbox/restapi/mode/devicebackup.pm @@ -0,0 +1,143 @@ +# +# Copyright 2024 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package network::backbox::restapi::mode::devicebackup; + +use base qw(centreon::plugins::templates::counter); + +use strict; +use warnings; +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); + +sub custom_status_output { + my ($self, %options) = @_; + + my $msg = sprintf("Device [id: %s] [name: %s] [status: %s] [status reason: %s]", + $self->{result_values}->{device_id}, + $self->{result_values}->{device_name}, + $self->{result_values}->{status}, + $self->{result_values}->{status_reason}); + return $msg; +} + +sub set_counters { + my ($self, %options) = @_; + + $self->{maps_counters_type} = [ + { name => 'backup', type => 0 }, + ]; + + $self->{maps_counters}->{backup} = [ + { label => 'status', + type => 2, + warning_default => '%{status} =~ /SUSPECT/i', + critical_default => '%{status} =~ /FAILURE/i', + set => { + key_values => [ { name => 'device_id' }, + { name => 'device_name' }, + { name => 'status' }, + { name => 'status_reason' } + ], + closure_custom_output => $self->can('custom_status_output'), + closure_custom_perfdata => sub { return 0; }, + closure_custom_threshold_check => \&catalog_status_threshold_ng + } + } + ]; +} + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1); + bless $self, $class; + + $options{options}->add_options(arguments => { + 'device-id:s' => { name => 'device_id' }, + 'device-name:s' => { name => 'device_name' } + }); + + return $self; +} + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::check_options(%options); + + if (centreon::plugins::misc::is_empty($self->{option_results}->{device_id}) && centreon::plugins::misc::is_empty($self->{option_results}->{device_name})) { + $self->{output}->add_option_msg(short_msg => "Need to specify --device-id or --device-name option."); + $self->{output}->option_exit(); + } +} + +sub manage_selection { + my ($self, %options) = @_; + + my $device_id = $self->{option_results}->{device_id}; + my $device_name = $self->{option_results}->{device_name} || ''; + if (centreon::plugins::misc::is_empty($device_id)) { + $device_id = $options{custom}->get_device_id_from_name(device_name => $device_name); + } + + my $backup = $options{custom}->get_device_backup_status(device_id => $device_id); + if (centreon::plugins::misc::is_empty($backup)) { + $self->{output}->add_option_msg(short_msg => "No backup found for device id '" . $device_id . "'."); + $self->{output}->option_exit(); + } + + $self->{backup} = { device_id => $device_id, + device_name => $device_name, + status => $backup->{historyStatus}, + status_reason => $backup->{statusReason} + }; +} + +1; + +__END__ + +=head1 MODE + +Check a device backup on BackBox. + +=over 8 + +=item B<--device-id> + +ID of the device (if you prefer to use the ID instead of the name). +ID or name is mandatory. + +=item B<--device-name> + +Name of the device (if you prefer to use the name instead of the ID). +ID or name is mandatory. If you specify both, the ID will be used. + +=item B<--warning-status> + +Set warning threshold for status (Default: '%{status} =~ /SUSPECT/i'). +You can use the following variables: %{status}, %{status_reason}, %{device_name}, %{device_id}. + +=item B<--critical-status> + +Set critical threshold for status (Default: '%{status} =~ /FAILURE/i'). +You can use the following variables: %{status}, %{status_reason}, %{device_name}, %{device_id}. + +=back + +=cut diff --git a/src/network/backbox/restapi/mode/intellicheck.pm b/src/network/backbox/restapi/mode/intellicheck.pm index 779218cc6..f90e6d7da 100644 --- a/src/network/backbox/restapi/mode/intellicheck.pm +++ b/src/network/backbox/restapi/mode/intellicheck.pm @@ -24,7 +24,6 @@ use base qw(centreon::plugins::templates::counter); use strict; use warnings; -use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); sub prefix_intellicheck_output { my ($self, %options) = @_; diff --git a/src/network/backbox/restapi/mode/listdevices.pm b/src/network/backbox/restapi/mode/listdevices.pm new file mode 100644 index 000000000..df0679860 --- /dev/null +++ b/src/network/backbox/restapi/mode/listdevices.pm @@ -0,0 +1,121 @@ +# +# Copyright 2024 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package network::backbox::restapi::mode::listdevices; + +use strict; +use warnings; + +use base qw(centreon::plugins::mode); + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options); + bless $self, $class; + + return $self; +} + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::init(%options); +} + +sub run { + my ($self, %options) = @_; + + my $jsondevices = $options{custom}->get_devices(); + + $self->{devices} = []; + + for my $jsondevice (@{$jsondevices}) { + my $device = { + id => $jsondevice->{deviceId}, + name => $jsondevice->{deviceName}, + description => defined($jsondevice->{description}) ? $jsondevice->{description} : '', + site => defined($jsondevice->{siteName}) ? $jsondevice->{siteName} : '', + group => defined($jsondevice->{groupName}) ? $jsondevice->{groupName} : '', + vendor => defined($jsondevice->{vendorName}) ? $jsondevice->{vendorName} : '', + product => defined($jsondevice->{productName}) ? $jsondevice->{productName} : '', + product_type => defined($jsondevice->{productTypeName}) ? $jsondevice->{productTypeName} : '', + version => defined($jsondevice->{versionName}) ? $jsondevice->{versionName} : '' + }; + push @{$self->{devices}}, $device; + $self->{output}->output_add( + long_msg => sprintf( + "[id: %s][name: %s][description: %s][site: %s][group: %s][vendor: %s][product: %s][product_type: %s][version: %s]", + $device->{id}, + $device->{name}, + $device->{description}, + $device->{site}, + $device->{group}, + $device->{vendor}, + $device->{product}, + $device->{product_type}, + $device->{version} + ) + ); + } + + if (!defined($options{disco_show})) { + $self->{output}->output_add(severity => 'OK', short_msg => 'Devices:'); + $self->{output}->display(nolabel => 1, force_ignore_perfdata => 1, force_long_output => 1); + } +} + +sub disco_format { + my ($self, %options) = @_; + + $self->{output}->add_disco_format(elements => [ 'id', 'name', 'description', 'site', 'group', 'vendor', 'product', 'product_type', 'version' ]); +} + +sub disco_show { + my ($self, %options) = @_; + + $options{disco_show} = 1; + $self->run(%options); + + for my $device (@{$self->{devices}}) { + $self->{output}->add_disco_entry( + id => $device->{id}, + name => $device->{name}, + description => $device->{description}, + site => $device->{site}, + group => $device->{group}, + vendor => $device->{vendor}, + product => $device->{product}, + product_type => $device->{product_type}, + version => $device->{version} + ); + } +} + +1; + +__END__ + +=head1 MODE + +List devices using the Backbox REST API. + +=back + +=cut + diff --git a/src/network/backbox/restapi/plugin.pm b/src/network/backbox/restapi/plugin.pm index f88a79e0a..edf447917 100644 --- a/src/network/backbox/restapi/plugin.pm +++ b/src/network/backbox/restapi/plugin.pm @@ -31,9 +31,11 @@ sub new { $self->{version} = '1.0'; $self->{modes} = { - 'backup' => 'network::backbox::restapi::mode::backup', - 'configstatus' => 'network::backbox::restapi::mode::configstatus', - 'intellicheck' => 'network::backbox::restapi::mode::intellicheck' + 'backup' => 'network::backbox::restapi::mode::backup', + 'device-backup' => 'network::backbox::restapi::mode::devicebackup', + 'configstatus' => 'network::backbox::restapi::mode::configstatus', + 'intellicheck' => 'network::backbox::restapi::mode::intellicheck', + 'list-devices' => 'network::backbox::restapi::mode::listdevices' }; $self->{custom_modes}->{api} = 'network::backbox::restapi::custom::api'; diff --git a/src/network/cisco/meraki/cloudcontroller/restapi/mode/discovery.pm b/src/network/cisco/meraki/cloudcontroller/restapi/mode/discovery.pm index 7c0aad890..f3cf9b317 100644 --- a/src/network/cisco/meraki/cloudcontroller/restapi/mode/discovery.pm +++ b/src/network/cisco/meraki/cloudcontroller/restapi/mode/discovery.pm @@ -37,6 +37,7 @@ sub new { 'filter-network-id:s' => { name => 'filter_network_id' }, 'filter-organization-name:s' => { name => 'filter_organization_name' }, 'filter-organization-id:s' => { name => 'filter_organization_id' }, + 'filter-model:s' => { name => 'filter_model' }, 'filter-tags:s' => { name => 'filter_tags' } }); @@ -70,14 +71,16 @@ sub discovery_devices { my @results; foreach (values %$devices) { - next if (defined($self->{option_results}->{filter_network_id}) && $self->{option_results}->{filter_network_id} ne '' && - $_->{networkId} !~ /$self->{option_results}->{filter_network_id}/); - next if (defined($self->{option_results}->{filter_tags}) && $self->{option_results}->{filter_tags} ne '' && - (!defined($_->{tags}) || $_->{tags} !~ /$self->{option_results}->{filter_tags}/)); - next if (defined($self->{option_results}->{filter_organization_id}) && $self->{option_results}->{filter_organization_id} ne '' && - $_->{orgId} !~ /$self->{option_results}->{filter_organization_id}/); - next if (defined($self->{option_results}->{filter_organization_name}) && $self->{option_results}->{filter_organization_name} ne '' && - $options{organizations}->{ $_->{orgId} }->{name} !~ /$self->{option_results}->{filter_organization_name}/); + next if ( !centreon::plugins::misc::is_empty($self->{option_results}->{filter_model}) + && $_->{model} !~ /$self->{option_results}->{filter_model}/); + next if ( !centreon::plugins::misc::is_empty($self->{option_results}->{filter_network_id}) + && $_->{networkId} !~ /$self->{option_results}->{filter_network_id}/); + next if ( !centreon::plugins::misc::is_empty($self->{option_results}->{filter_tags}) + && (!defined($_->{tags}) || $_->{tags} !~ /$self->{option_results}->{filter_tags}/)); + next if ( !centreon::plugins::misc::is_empty($self->{option_results}->{filter_organization_id}) + && $_->{orgId} !~ /$self->{option_results}->{filter_organization_id}/); + next if ( !centreon::plugins::misc::is_empty($self->{option_results}->{filter_organization_name}) + && $options{organizations}->{ $_->{orgId} }->{name} !~ /$self->{option_results}->{filter_organization_name}/); my $node = { name => $_->{name}, @@ -200,27 +203,36 @@ Resources discovery. =item B<--prettify> -Prettify JSON output. +Prettify the JSON output. =item B<--resource-type> -Choose the type of resources to discover (can be: 'device', 'network'). +Define the type of resources to discover (C or C). + +=item B<--filter-model> + +Define which resources should be discovered based on the resource's model. +This option will be treated as a regular expression. =item B<--filter-network-id> -Filter by network ID (can be a regexp). +Define which resources should be discovered based on the resource's network ID. +This option will be treated as a regular expression. =item B<--filter-organization-id> -Filter by organization ID (can be a regexp). +Define which resources should be discovered based on the resource's organization ID. +This option will be treated as a regular expression. =item B<--filter-organization-name> -Filter by organization name (can be a regexp). +Define which resources should be discovered based on the resource's organization name. +This option will be treated as a regular expression. =item B<--filter-tags> -Filter by tags (can be a regexp). +Define which resources should be discovered based on the resource's tags. +This option will be treated as a regular expression. =back diff --git a/src/network/cisco/meraki/cloudcontroller/restapi/mode/listvpntunnels.pm b/src/network/cisco/meraki/cloudcontroller/restapi/mode/listvpntunnels.pm index bdcfdf823..cb4b02607 100644 --- a/src/network/cisco/meraki/cloudcontroller/restapi/mode/listvpntunnels.pm +++ b/src/network/cisco/meraki/cloudcontroller/restapi/mode/listvpntunnels.pm @@ -31,8 +31,11 @@ my @labels = ( 'network_id', 'network_name', 'device_serial', - 'mode', - 'status' + 'device_mode', + 'device_status', + 'vpn_type', + 'vpn_name', + 'vpn_status' ); sub new { @@ -62,26 +65,46 @@ sub manage_selection { orgs => [keys %$organizations] ); - my $results = {}; - foreach (keys %$devices) { + my $results = []; + foreach my $id (keys %$devices) { next if (defined($self->{option_results}->{filter_network_id}) && $self->{option_results}->{filter_network_id} ne '' && - $devices->{$_}->{networkId} !~ /$self->{option_results}->{filter_network_id}/); + $devices->{$id}->{networkId} !~ /$self->{option_results}->{filter_network_id}/); next if (defined($self->{option_results}->{filter_organization_id}) && $self->{option_results}->{filter_organization_id} ne '' && - $devices->{$_}->{organizationId} !~ /$self->{option_results}->{filter_organization_id}/); + $devices->{$id}->{organizationId} !~ /$self->{option_results}->{filter_organization_id}/); - my $organization_name = $organizations->{ $devices->{$_}->{organizationId} }->{name}; + my $organization_name = $organizations->{ $devices->{$id}->{organizationId} }->{name}; next if (defined($self->{option_results}->{filter_organization_name}) && $self->{option_results}->{filter_organization_name} ne '' && $organization_name !~ /$self->{option_results}->{filter_organization_name}/); - $results->{$_} = { - network_id => $devices->{$_}->{networkId}, - network_name => $devices->{$_}->{networkName}, - device_serial => $devices->{$_}->{deviceSerial}, - organization_id => $devices->{$_}->{organizationId}, - organization_name => $organization_name, - mode => $devices->{$_}->{vpnMode}, - status => $devices->{$_}->{deviceStatus} - }; + foreach (@{$devices->{$id}->{merakiVpnPeers}}) { + push @$results, { + network_id => $devices->{$id}->{networkId}, + network_name => $devices->{$id}->{networkName}, + device_serial => $devices->{$id}->{deviceSerial}, + organization_id => $devices->{$id}->{organizationId}, + organization_name => $organization_name, + device_mode => $devices->{$id}->{vpnMode}, + device_status => $devices->{$id}->{deviceStatus}, + vpn_type => 'meraki', + vpn_name => $_->{networkName}, + vpn_status => $_->{reachability} + }; + } + + foreach (@{$devices->{$id}->{thirdPartyVpnPeers}}) { + push @$results, { + network_id => $devices->{$id}->{networkId}, + network_name => $devices->{$id}->{networkName}, + device_serial => $devices->{$id}->{deviceSerial}, + organization_id => $devices->{$id}->{organizationId}, + organization_name => $organization_name, + device_mode => $devices->{$id}->{vpnMode}, + device_status => $devices->{$id}->{deviceStatus}, + vpn_type => 'thirdParty', + vpn_name => $_->{name}, + vpn_status => $_->{reachability} + }; + } } return $results; @@ -91,9 +114,9 @@ sub run { my ($self, %options) = @_; my $results = $self->manage_selection(custom => $options{custom}); - foreach my $instance (sort keys %$results) { + foreach my $item (@$results) { $self->{output}->output_add(long_msg => - join('', map("[$_: " . $results->{$instance}->{$_} . ']', @labels)) + join('', map("[$_: " . $item->{$_} . ']', @labels)) ); } @@ -115,9 +138,9 @@ sub disco_show { my ($self, %options) = @_; my $results = $self->manage_selection(custom => $options{custom}); - foreach (sort keys %$results) { + foreach my $item (@$results) { $self->{output}->add_disco_entry( - %{$results->{$_}} + %$item ); } } diff --git a/src/network/cisco/meraki/cloudcontroller/restapi/mode/vpntunnels.pm b/src/network/cisco/meraki/cloudcontroller/restapi/mode/vpntunnels.pm index 61505a9df..f1b8cc6e7 100644 --- a/src/network/cisco/meraki/cloudcontroller/restapi/mode/vpntunnels.pm +++ b/src/network/cisco/meraki/cloudcontroller/restapi/mode/vpntunnels.pm @@ -27,22 +27,46 @@ use warnings; use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); use Digest::MD5 qw(md5_hex); -sub custom_status_output { +sub custom_device_status_output { my ($self, %options) = @_; - return 'status: ' . $self->{result_values}->{status} . ' [mode: ' . $self->{result_values}->{mode} . ']'; + return 'status: ' . $self->{result_values}->{deviceStatus} . ' [mode: ' . $self->{result_values}->{deviceMode} . ']'; } -sub prefix_tunnel_output { +sub custom_vpn_status_output { my ($self, %options) = @_; - return "vpn tunnel '" . $options{instance_value}->{deviceSerial} . "' "; + return 'status: ' . $self->{result_values}->{vpnStatus}; +} + +sub prefix_vpn_output { + my ($self, %options) = @_; + + return "vpn tunnel '" . $options{instance_value}->{vpnName} . "' [type: " . $options{instance_value}->{vpnType} . "] "; } sub prefix_global_output { my ($self, %options) = @_; - return 'Vpn tunnels '; + return 'Number of VPNS '; +} + +sub device_long_output { + my ($self, %options) = @_; + + return sprintf( + "checking device '%s'", + $options{instance_value}->{serial} + ); +} + +sub prefix_device_output { + my ($self, %options) = @_; + + return sprintf( + "device '%s' ", + $options{instance_value}->{serial} + ); } sub set_counters { @@ -50,29 +74,18 @@ sub set_counters { $self->{maps_counters_type} = [ { name => 'global', type => 0, cb_prefix_output => 'prefix_global_output', skipped_code => { -10 => 1 } }, - { name => 'tunnels', type => 1, cb_prefix_output => 'prefix_tunnel_output', message_multiple => 'All vpn tunnels are ok' } + { name => 'devices', type => 3, cb_prefix_output => 'prefix_device_output', cb_long_output => 'device_long_output', indent_long_output => ' ', message_multiple => 'All devices are ok', + group => [ + { name => 'status', type => 0, skipped_code => { -10 => 1 } }, + { name => 'vpns', type => 1, display_long => 1, cb_prefix_output => 'prefix_vpn_output', message_multiple => 'All VPNs are ok', skipped_code => { -10 => 1 } } + ] + } ]; - + $self->{maps_counters}->{global} = [ - { label => 'total-online', nlabel => 'vpn.tunnels.online.count', display_ok => 0, set => { - key_values => [ { name => 'online' }, { name => 'total' } ], - output_template => 'online: %s', - perfdatas => [ - { template => '%s', min => 0, max => 'total' } - ] - } - }, - { label => 'total-offline', nlabel => 'vpn.tunnels.offline.count', display_ok => 0, set => { - key_values => [ { name => 'offline' }, { name => 'total' } ], - output_template => 'offline: %s', - perfdatas => [ - { template => '%s', min => 0, max => 'total' } - ] - } - }, - { label => 'total-dormant', nlabel => 'vpn.tunnels.dormant.count', display_ok => 0, set => { - key_values => [ { name => 'dormant' }, { name => 'total' } ], - output_template => 'dormant: %s', + { label => 'total-unreachable', nlabel => 'vpn.tunnels.unreachable.count', display_ok => 0, set => { + key_values => [ { name => 'unreachable' }, { name => 'total' } ], + output_template => 'unreachable: %s', perfdatas => [ { template => '%s', min => 0, max => 'total' } ] @@ -80,13 +93,31 @@ sub set_counters { } ]; - $self->{maps_counters}->{tunnels} = [ + $self->{maps_counters}->{status} = [ { - label => 'status', type => 2, - critical_default => '%{status} =~ /offline/i', + label => 'device-status', + type => 2, + unknown_default => '%{status} =~ /offline/i', set => { - key_values => [ { name => 'status' }, { name => 'mode' }, { name => 'deviceSerial' } ], - closure_custom_output => $self->can('custom_status_output'), + key_values => [ { name => 'deviceStatus' }, { name => 'deviceMode' }, { name => 'deviceSerial' } ], + closure_custom_output => $self->can('custom_device_status_output'), + closure_custom_perfdata => sub { return 0; }, + closure_custom_threshold_check => \&catalog_status_threshold_ng + } + } + ]; + + $self->{maps_counters}->{vpns} = [ + { + label => 'vpn-status', + type => 2, + critical_default => '%{deviceStatus} =~ /online/i and %{vpnStatus} =~ /unreachable/i', + set => { + key_values => [ + { name => 'vpnStatus' }, { name => 'vpnName' }, { name => 'vpnType' }, + { name => 'deviceStatus' }, { name => 'deviceSerial' } + ], + closure_custom_output => $self->can('custom_vpn_status_output'), closure_custom_perfdata => sub { return 0; }, closure_custom_threshold_check => \&catalog_status_threshold_ng } @@ -103,7 +134,9 @@ sub new { 'filter-network-name:s' => { name => 'filter_network_name' }, 'filter-organization-name:s' => { name => 'filter_organization_name' }, 'filter-organization-id:s' => { name => 'filter_organization_id' }, - 'filter-device-serial:s' => { name => 'filter_device_serial' } + 'filter-device-serial:s' => { name => 'filter_device_serial' }, + 'filter-vpn-type:s' => { name => 'filter_vpn_type' }, + 'filter-vpn-name:s' => { name => 'filter_vpn_name' } }); return $self; @@ -114,26 +147,78 @@ sub manage_selection { my $datas = $options{custom}->get_datas(skipDevices => 1, skipDevicesStatus => 1, skipNetworks => 1); - $self->{global} = { total => 0, online => 0, offline => 0, dormant => 0 }; - $self->{tunnels} = {}; + $self->{global} = { unreachable => 0 }; + $self->{devices} = {}; foreach my $id (keys %{$datas->{vpn_tunnels_status}}) { next if (defined($self->{option_results}->{filter_network_name}) && $self->{option_results}->{filter_network_name} ne '' && $datas->{vpn_tunnels_status}->{$id}->{networkName} !~ /$self->{option_results}->{filter_network_name}/); + next if (defined($self->{option_results}->{filter_device_serial}) && $self->{option_results}->{filter_device_serial} ne '' && + $id !~ /$self->{option_results}->{filter_device_serial}/); next if (defined($self->{option_results}->{filter_organization_id}) && $self->{option_results}->{filter_organization_id} ne '' && $datas->{vpn_tunnels_status}->{$id}->{organizationId} !~ /$self->{option_results}->{filter_organization_id}/); next if (defined($self->{option_results}->{filter_organization_name}) && $self->{option_results}->{filter_organization_name} ne '' && $datas->{orgs}->{ $datas->{vpn_tunnels_status}->{$id}->{organizationId} }->{name} !~ /$self->{option_results}->{filter_organization_name}/); - $self->{tunnels}->{$id} = { - deviceSerial => $id, - status => $datas->{vpn_tunnels_status}->{$id}->{deviceStatus}, - mode => $datas->{vpn_tunnels_status}->{$id}->{vpnMode} + $self->{devices}->{$id} = { + serial => $id, + status => { + deviceSerial => $id, + deviceStatus => $datas->{vpn_tunnels_status}->{$id}->{deviceStatus}, + deviceMode => $datas->{vpn_tunnels_status}->{$id}->{vpnMode} + }, + vpns => {} }; - $self->{global}->{total}++; - $self->{global}->{ lc($datas->{vpn_tunnels_status}->{$id}->{deviceStatus}) }++ - if (defined($self->{global}->{ lc($datas->{vpn_tunnels_status}->{$id}->{deviceStatus}) })); + foreach (@{$datas->{vpn_tunnels_status}->{$id}->{merakiVpnPeers}}) { + my $type = 'meraki'; + next if (defined($self->{option_results}->{filter_vpn_type}) && $self->{option_results}->{filter_vpn_type} ne '' && + $type !~ /$self->{option_results}->{filter_vpn_type}/); + next if (defined($self->{option_results}->{filter_vpn_name}) && $self->{option_results}->{filter_vpn_name} ne '' && + $_->{networkName} !~ /$self->{option_results}->{filter_vpn_name}/); + + $self->{devices}->{$id}->{vpns}->{ $_->{networkName} } = { + deviceSerial => $id, + deviceStatus => $datas->{vpn_tunnels_status}->{$id}->{deviceStatus}, + vpnType => $type, + vpnName => $_->{networkName}, + vpnStatus => $_->{reachability} + }; + + $self->{global}->{total}++; + $self->{global}->{ lc($_->{reachability}) }++ + if (defined($self->{global}->{ lc($_->{reachability}) })); + } + + foreach (@{$datas->{vpn_tunnels_status}->{$id}->{thirdPartyVpnPeers}}) { + my $type = 'thirdParty'; + next if (defined($self->{option_results}->{filter_vpn_type}) && $self->{option_results}->{filter_vpn_type} ne '' && + $type !~ /$self->{option_results}->{filter_vpn_type}/); + next if (defined($self->{option_results}->{filter_vpn_name}) && $self->{option_results}->{filter_vpn_name} ne '' && + $_->{name} !~ /$self->{option_results}->{filter_vpn_name}/); + + $self->{devices}->{$id}->{vpns}->{ $_->{name} } = { + deviceSerial => $id, + deviceStatus => $datas->{vpn_tunnels_status}->{$id}->{deviceStatus}, + vpnType => $type, + vpnName => $_->{name}, + vpnStatus => $_->{reachability} + }; + + $self->{global}->{total}++; + $self->{global}->{ lc($_->{reachability}) }++ + if (defined($self->{global}->{ lc($_->{reachability}) })); + } + } + + # we remove entries if there is a --filter-vpn-[type|name] and no --filter-device-serial + if ((!defined($self->{option_results}->{filter_device_serial}) || $self->{option_results}->{filter_device_serial} eq '') && + ((defined($self->{option_results}->{filter_vpn_type}) && $self->{option_results}->{filter_vpn_type} ne '') || + (defined($self->{option_results}->{filter_vpn_name}) && $self->{option_results}->{filter_vpn_name} ne '')) + ) { + foreach my $id (keys %{$self->{devices}}) { + delete $self->{devices}->{$id} if (scalar(keys %{$self->{devices}->{$id}->{vpns}}) <= 0); + } } } @@ -163,25 +248,48 @@ Filter VPN tunnels by organization name (can be a regexp). Filter VPN tunnels by device serial (can be a regexp). -=item B<--unknown-status> +=item B<--filter-vpn-type> -Define the conditions to match for the status to be UNKNOWN. -You can use the following variables: %{status}, %{deviceSerial}, %{mode} +Filter VPN tunnels by VPN type (can be a regexp). -=item B<--warning-status> +=item B<--filter-vpn-name> + +Filter VPN tunnels by VPN name (can be a regexp). + +=item B<--unknown-device-status> + +Define the conditions to match for the status to be UNKNOWN (default: '%{deviceStatus} =~ /offline/i'). +You can use the following variables: %{deviceStatus}, %{deviceSerial}, %{deviceMode} + +=item B<--warning-device-status> Define the conditions to match for the status to be WARNING. -You can use the following variables: %{status}, %{deviceSerial}, %{mode} +You can use the following variables: %{deviceStatus}, %{deviceSerial}, %{deviceMode} -=item B<--critical-status> +=item B<--critical-device-status> -Define the conditions to match for the status to be CRITICAL (default: '%{status} =~ /offline/i'). -You can use the following variables: %{status}, %{deviceSerial}, %{mode} +Define the conditions to match for the status to be CRITICAL. +You can use the following variables: %{deviceStatus}, %{deviceSerial} + +=item B<--unknown-vpn-status> + +Define the conditions to match for the status to be UNKNOWN. +You can use the following variables: %{vpnStatus}, %{vpnName}, %{vpnType}, %{deviceStatus}, %{deviceSerial} + +=item B<--warning-vpn-status> + +Define the conditions to match for the status to be WARNING. +You can use the following variables: %{vpnStatus}, %{vpnName}, %{vpnType}, %{deviceStatus}, %{deviceSerial} + +=item B<--critical-vpn-status> + +Define the conditions to match for the status to be CRITICAL (default: '%{deviceStatus} =~ /online/i and %{vpnStatus} =~ /unreachable/i'). +You can use the following variables: %{vpnStatus}, %{vpnName}, %{vpnType}, %{deviceStatus}, %{deviceSerial} =item B<--warning-*> B<--critical-*> Thresholds. -Can be: 'total-online', 'total-offline', 'total-dormant'. +Can be: 'total-unreachable'. =back diff --git a/src/network/colubris/snmp/mode/load.pm b/src/network/colubris/snmp/mode/load.pm index fd3588d6c..6b51d738b 100644 --- a/src/network/colubris/snmp/mode/load.pm +++ b/src/network/colubris/snmp/mode/load.pm @@ -49,7 +49,7 @@ sub set_counters { ], } }, - { label => '1min', set => { + { label => '15min', set => { key_values => [ { name => 'load15' } ], output_template => '%s', perfdatas => [ @@ -104,24 +104,38 @@ __END__ =head1 MODE -Check load-average. +Check average system load. =over 8 =item B<--filter-counters> Only display some counters (regexp can be used). -Example: --filter-counters='15min' +Example: C<--filter-counters='15min'> -=item B<--warning-*> +=item B<--warning-1min> -Warning threshold. -Can be: '1min', '5min', '15min'. +Thresholds. -=item B<--critical-*> +=item B<--critical-1min> -Critical threshold. -Can be: '1min', '5min', '15min'. +Thresholds. + +=item B<--warning-5min> + +Thresholds. + +=item B<--critical-5min> + +Thresholds. + +=item B<--warning-15min> + +Thresholds. + +=item B<--critical-15min> + +Thresholds. =back diff --git a/src/network/hp/procurve/snmp/plugin.pm b/src/network/hp/procurve/snmp/plugin.pm index f58bd40db..7887a984c 100644 --- a/src/network/hp/procurve/snmp/plugin.pm +++ b/src/network/hp/procurve/snmp/plugin.pm @@ -31,13 +31,16 @@ sub new { $self->{version} = '1.0'; $self->{modes} = { - 'cpu' => 'network::hp::procurve::snmp::mode::cpu', - 'environment' => 'network::hp::procurve::snmp::mode::environment', - 'interfaces' => 'network::hp::procurve::snmp::mode::interfaces', - 'list-interfaces' => 'snmp_standard::mode::listinterfaces', - 'memory' => 'network::hp::procurve::snmp::mode::memory', - 'stack' => 'network::hp::procurve::snmp::mode::stack', - 'virtual-chassis' => 'network::hp::procurve::snmp::mode::virtualchassis' + 'cpu' => 'network::hp::procurve::snmp::mode::cpu', + 'environment' => 'network::hp::procurve::snmp::mode::environment', + 'interfaces' => 'network::hp::procurve::snmp::mode::interfaces', + 'list-interfaces' => 'snmp_standard::mode::listinterfaces', + 'list-spanning-trees' => 'snmp_standard::mode::listspanningtrees', + 'memory' => 'network::hp::procurve::snmp::mode::memory', + 'spanning-tree' => 'snmp_standard::mode::spanningtree', + 'stack' => 'network::hp::procurve::snmp::mode::stack', + 'uptime' => 'snmp_standard::mode::uptime', + 'virtual-chassis' => 'network::hp::procurve::snmp::mode::virtualchassis' }; return $self; diff --git a/src/network/huawei/snmp/plugin.pm b/src/network/huawei/standard/snmp/plugin.pm similarity index 75% rename from src/network/huawei/snmp/plugin.pm rename to src/network/huawei/standard/snmp/plugin.pm index ddae62efa..6e12a8944 100644 --- a/src/network/huawei/snmp/plugin.pm +++ b/src/network/huawei/standard/snmp/plugin.pm @@ -18,7 +18,7 @@ # limitations under the License. # -package network::huawei::snmp::plugin; +package network::huawei::standard::snmp::plugin; use strict; use warnings; @@ -30,11 +30,11 @@ sub new { bless $self, $class; $self->{modes} = { - 'cpu' => 'network::huawei::snmp::mode::cpu', - 'hardware' => 'network::huawei::snmp::mode::hardware', - 'interfaces' => 'network::huawei::snmp::mode::interfaces', + 'cpu' => 'centreon::common::huawei::standard::snmp::mode::cpu', + 'hardware' => 'centreon::common::huawei::standard::snmp::mode::hardware', + 'interfaces' => 'centreon::common::huawei::standard::snmp::mode::interfaces', 'list-interfaces' => 'snmp_standard::mode::listinterfaces', - 'memory' => 'network::huawei::snmp::mode::memory', + 'memory' => 'centreon::common::huawei::standard::snmp::mode::memory', 'uptime' => 'snmp_standard::mode::uptime' }; diff --git a/src/network/huawei/wlc/snmp/mode/aphealth.pm b/src/network/huawei/wlc/snmp/mode/aphealth.pm new file mode 100644 index 000000000..58c8a3e68 --- /dev/null +++ b/src/network/huawei/wlc/snmp/mode/aphealth.pm @@ -0,0 +1,412 @@ +# +# Copyright 2024 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package network::huawei::wlc::snmp::mode::aphealth; + +use base qw(centreon::plugins::templates::counter); + +use strict; +use warnings; +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); + +sub custom_status_output { + my ($self, %options) = @_; + + my $msg = 'data link state: ' . $self->{result_values}->{datalinkstate} . ', power-supply: ' . $self->{result_values}->{powersupply}; + return $msg; +} + +sub prefix_global_output { + my ($self, %options) = @_; + + return 'Access points '; +} + +sub ap_long_output { + my ($self, %options) = @_; + + return "checking access point '" . $options{instance_value}->{display} . "'"; +} + +sub prefix_ap_output { + my ($self, %options) = @_; + + return "access point '" . $options{instance_value}->{display} . "' "; +} + +sub custom_uptime_output { + my ($self, %options) = @_; + + return sprintf( + 'access point %s online time is: %s', $self->{result_values}->{display}, + centreon::plugins::misc::change_seconds(value => $self->{result_values}->{onlinetime}, start => 'd') + ); +} + +sub set_counters { + my ($self, %options) = @_; + + $self->{maps_counters_type} = [ + { name => 'ap', + type => 3, + cb_prefix_output => 'prefix_ap_output', + cb_long_output => 'ap_long_output', + indent_long_output => ' ', + message_multiple => 'All access points are ok', + group => [ + { name => 'health', type => 0 } + ] + } + ]; + + $self->{maps_counters}->{health} = [ + { + label => 'status', + type => 2, + critical_default => '%{powersupply} =~ /insufficient|limited/ || %{datalinkstate} !~ /run/', + warning_default => '%{powersupply} eq "limited"', + set => + { + key_values => + [ { name => 'powersupply' }, { name => 'display' }, { name => 'datalinkstate' } ], + closure_custom_output => + $self->can('custom_status_output'), + closure_custom_perfdata => + sub {return 0;}, + closure_custom_threshold_check => + \&catalog_status_threshold_ng + } + }, + { label => 'temperature', nlabel => 'ap.temperature.celsius', set => { + key_values => [ { name => 'temperature' }, { name => 'display' } ], + output_template => 'access point temperature: %.2f C', + perfdatas => [ + { template => '%.2f', unit => 'C', label_extra_instance => 1, instance_use => 'display' } + ] + } + }, + { label => 'onlinetime', nlabel => 'ap.online.time', set => { + key_values => [ { name => 'onlinetime' }, { name => 'display' } ], + closure_custom_output => $self->can('custom_uptime_output'), + perfdatas => [ + { template => '%d', unit => '', label_extra_instance => 1, instance_use => 'display' } + ] + } + }, + { label => 'bootcount-total', nlabel => 'ap.boot.total.count', set => { + key_values => [ { name => 'bootcount_total' }, { name => 'display' } ], + output_template => 'access point bootcount total: %d', + perfdatas => [ + { template => '%d', unit => '', label_extra_instance => 1, instance_use => 'display' } + ] + } + }, + { label => 'memory', nlabel => 'ap.memory.used.percentage', set => { + key_values => [ { name => 'memory' }, { name => 'display' } ], + output_template => 'access point memory: %.2f %%', + perfdatas => [ + { template => '%.2f', unit => '%', label_extra_instance => 1, instance_use => 'display' } + ] + } + }, + { label => 'cpu', nlabel => 'ap.cpu.used.percentage', set => { + key_values => [ { name => 'cpu' }, { name => 'display' } ], + output_template => 'access point cpu: %.2f%%', + perfdatas => [ + { template => '%.2f', unit => '%', label_extra_instance => 1, instance_use => 'display' } + ] + } + }, + { label => 'up-port-speed', nlabel => 'ap.up.port.bitspersecond', set => { + key_values => [ { name => 'up_port_speed' }, { name => 'display' } ], + output_template => 'access point up-Port speed: %s b/s', + perfdatas => [ + { template => '%s', unit => 'b/s', label_extra_instance => 1, instance_use => 'display' } + ] + } + }, + { label => 'up-port-packet-err', nlabel => 'ap.up.port.package.error.percentage', set => { + key_values => [ { name => 'up_port_per' }, { name => 'display' } ], + output_template => 'access point up-Port packet errors: %.2f%%', + perfdatas => [ + { template => '%.2f', unit => '', label_extra_instance => 1, instance_use => 'display' } + ] + } + }, + { label => 'online-user-num', nlabel => 'ap.online.user.count', set => { + key_values => [ { name => 'online_user_num' }, { name => 'display' } ], + output_template => 'access online user nums: %d', + perfdatas => [ + { template => '%d', unit => '', label_extra_instance => 1, instance_use => 'display' } + ] + } + } + ]; +} + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1); + bless $self, $class; + + $options{options}->add_options(arguments => { + "filter-name:s" => { name => 'filter_name' }, + "filter-address:s" => { name => 'filter_address' }, + "filter-group:s" => { name => 'filter_group' } + }); + + return $self; +} + +my $map_power_supply_state = { + 1 => 'normal', + 2 => 'insufficient', + 3 => 'limited', + 4 => 'invalid' +}; + +my $map_data_link_state = { + 1 => 'down', + 2 => 'run', + 3 => 'noneed' +}; + +my $mapping = { + name => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.4' },# hwWlanApName + address => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.13' }# hwWlanApIpAddress +}; + +my $mapping_stat = { + runtime => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.18' },# hwWlanApRunTime + group => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.5' },# hwWlanApGroup + temperature => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.43' },# hwWlanApTemperature + onlinetime => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.21' },# hwWlanApOnlineTime + bootcount_total => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.33' },# hwWlanApBootCountTotal + memory => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.40' },# hwWlanApMemoryUseRate + cpu => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.41' },# hwWlanApCPUUseRate + up_port_speed => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.54' },# hwWlanApUpPortSpeed + up_port_per => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.55' },# hwWlanAPUpPortPER + online_user_num => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.44' },# hwWlanApOnlineUserNum + powersupply => + { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.80', map => $map_power_supply_state },# hwWlanAPPowerSupplyState + datalinkstate => + { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.81', map => $map_data_link_state }# hwWlanApDataLinkState +}; + +sub manage_selection { + my ($self, %options) = @_; + + $self->{ap} = {}; + + my $request = [ { oid => $mapping->{name}->{oid} } ]; + push @$request, { oid => $mapping->{group}->{oid} } + if (defined($self->{option_results}->{filter_group}) && $self->{option_results}->{filter_group} ne ''); + + push @$request, { oid => $mapping->{address}->{oid} } + if (defined($self->{option_results}->{filter_address}) && $self->{option_results}->{filter_address} ne ''); + + my $snmp_result = $options{snmp}->get_multiple_table( + oids => $request, + return_type => 1, + nothing_quit => 1 + ); + + foreach (sort keys %$snmp_result) { + next if (!/^$mapping->{name}->{oid}\.(.*)/); + my $instance = $1; + + my $result = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => $instance); + if (!defined($result->{name}) || $result->{name} eq '') { + $self->{output}->output_add(long_msg => + "skipping WLC '$instance': cannot get a name. please set it.", + debug => 1); + next; + } + + if (defined($self->{option_results}->{filter_name}) && $self->{option_results}->{filter_name} ne '' && + $result->{name} !~ /$self->{option_results}->{filter_name}/) { + $self->{output}->output_add(long_msg => + "skipping '" . $result->{name} . "': no matching name filter.", + debug => 1); + next; + } + + if (defined($self->{option_results}->{filter_address}) && $self->{option_results}->{filter_address} ne '' && + $result->{address} !~ /$self->{option_results}->{filter_address}/) { + $self->{output}->output_add(long_msg => + "skipping '" . $result->{address} . "': no matching address filter.", + debug => 1); + next; + } + + if (defined($self->{option_results}->{filter_group}) && $self->{option_results}->{filter_group} ne '' && + $result->{group} !~ /$self->{option_results}->{filter_group}/) { + $self->{output}->output_add(long_msg => + "skipping '" . $result->{group} . "': no matching group filter.", + debug => 1); + next; + } + + $self->{ap}->{ $result->{name} } = { + instance => $instance, + display => $result->{name}, + health => { + display => $result->{name} + } + }; + } + + if (scalar(keys %{$self->{ap}}) <= 0) { + $self->{output}->output_add(long_msg => 'no AP associated'); + return; + } + + $options{snmp}->load( + oids => [ map($_->{oid}, values(%$mapping_stat)) ], + instances => [ map($_->{instance}, values %{$self->{ap}}) ], + instance_regexp => '^(.*)$' + ); + $snmp_result = $options{snmp}->get_leef(); + + foreach (sort keys %{$self->{ap}}) { + my $result = $options{snmp}->map_instance( + mapping => $mapping_stat, + results => $snmp_result, + instance => $self->{ap}->{$_}->{instance} + ); + + $self->{ap}->{$_}->{health}->{datalinkstate} = $result->{datalinkstate}; + $self->{ap}->{$_}->{health}->{powersupply} = $result->{powersupply}; + $self->{ap}->{$_}->{health}->{temperature} = $result->{temperature}; + $self->{ap}->{$_}->{health}->{onlinetime} = $result->{onlinetime}; + $self->{ap}->{$_}->{health}->{bootcount_total} = $result->{bootcount_total}; + $self->{ap}->{$_}->{health}->{memory} = $result->{memory}; + $self->{ap}->{$_}->{health}->{cpu} = $result->{cpu}; + $self->{ap}->{$_}->{health}->{up_port_speed} = $result->{up_port_speed} * 1000; + $self->{ap}->{$_}->{health}->{up_port_per} = $result->{up_port_per}; + $self->{ap}->{$_}->{health}->{online_user_num} = $result->{online_user_num}; + } +} + +1; + +__END__ + +=head1 MODE + +Check AP health. + +=over 8 + +=item B<--filter-counters> + +Only display some counters (regexp can be used). +Example: --filter-counters='^temperature|onlinetime$' + +=item B<--filter-name> + +Filter access point name (can be a regexp) + +=item B<--filter-address> + +Filter access point IP address (can be a regexp). + +=item B<--filter-group> + +Filter access point group (can be a regexp). + +=item B<--warning-status> + +Define the conditions to match for the status to be WARNING. (default: '%{powersupply} eq "limited"'). +You can use the following variables: %{powersupply}, %{datalinkstate}, %{display} + +=item B<--critical-status> + +Define the conditions to match for the status to be CRITICAL (default: '%{powersupply} =~ /insufficient|limited/ || %{datalinkstate} !~ /run/'). +You can use the following variables: %{powersupply}, %{datalinkstate}, %{display} + +=item B<--warning-temperature> + +Thresholds. + +=item B<--critical-temperature> + +Thresholds. + +=item B<--warning-onlinetime> + +Thresholds. + +=item B<--critical-onlinetime> + +Thresholds. + +=item B<--warning-bootcount-total> + +Thresholds. + +=item B<--critical-bootcount-total> + +Thresholds. + +=item B<--warning-memory> + +Thresholds. + +=item B<--critical-memory> + +Thresholds. + + +=item B<--warning-cpu> + +Thresholds. + +=item B<--critical-cpu> + +Thresholds. + +=item B<--warning-up-port-speed> + +Thresholds. + +=item B<--critical-up-port-speed> + +Thresholds. + +=item B<--warning-up-port-packet-err> + +Thresholds. + +=item B<--critical-up-port-packet-err> + +Thresholds. + +=item B<--warning-online-user-num> + +Thresholds. + +=item B<--critical-online-user-num> + +Thresholds. + +=back + +=cut diff --git a/src/network/huawei/wlc/snmp/mode/apradio.pm b/src/network/huawei/wlc/snmp/mode/apradio.pm new file mode 100644 index 000000000..034d22264 --- /dev/null +++ b/src/network/huawei/wlc/snmp/mode/apradio.pm @@ -0,0 +1,346 @@ +# +# Copyright 2024 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package network::huawei::wlc::snmp::mode::apradio; + +use base qw(centreon::plugins::templates::counter); + +use strict; +use warnings; +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); + +sub prefix_global_output { + my ($self, %options) = @_; + + return 'Access points '; +} + +sub ap_long_output { + my ($self, %options) = @_; + + return "checking access point '" . $options{instance_value}->{display} . "'"; +} + +sub prefix_ap_output { + my ($self, %options) = @_; + + return "access point '" . $options{instance_value}->{display} . "' "; +} + +sub custom_status_output { + my ($self, %options) = @_; + + my $msg = 'run state: ' . $self->{result_values}->{runstate}; + return $msg; +} + +sub set_counters { + my ($self, %options) = @_; + + $self->{maps_counters_type} = [ + { name => 'ap', + type => 3, + cb_prefix_output => 'prefix_ap_output', + cb_long_output => 'ap_long_output', + indent_long_output => ' ', + message_multiple => 'All access points are ok', + group => [ + { name => 'ap_radio', type => 0 } + ] + } + ]; + + $self->{maps_counters}->{ap_radio} = [ + { + label => 'status', + type => 2, + critical_default => '%{runstate} ne "up"', + set => + { + key_values => + [ { name => 'runstate' }, { name => 'display' } ], + closure_custom_output => + $self->can('custom_status_output'), + closure_custom_perfdata => + sub {return 0;}, + closure_custom_threshold_check => + \&catalog_status_threshold_ng + } + }, + { label => 'package-error-rate', nlabel => 'ap.radio.packageerror.percentage', set => { + key_values => [ { name => 'package_error_rate' }, { name => 'display' } ], + output_template => 'radio package error rate: %.2f%%', + perfdatas => [ + { template => '%.2f', unit => '%', label_extra_instance => 1, instance_use => 'display' } + ] + } + }, + { label => 'noise', nlabel => 'ap.radio.noise.dbm', set => { + key_values => [ { name => 'noise' }, { name => 'display' } ], + output_template => 'radio noise: %d dBm', + perfdatas => [ + { template => '%d', unit => 'dBm', label_extra_instance => 1, instance_use => 'display' } + ] + } + }, + { label => 'channel-utilization-rate', nlabel => 'ap.radio.channel.utilization.percentage', set => { + key_values => [ { name => 'channel_utilization_rate' }, { name => 'display' } ], + output_template => 'radio channel utilization rate: %.2f%%', + perfdatas => [ + { template => '%.2f', unit => '%', label_extra_instance => 1, instance_use => 'display' } + ] + } + }, + { label => 'channel-interference-rate', nlabel => 'ap.radio.channel.interference.percentage', set => { + key_values => [ { name => 'channel_interference_rate' }, { name => 'display' } ], + output_template => 'radio channel interference rate: %.2f%%', + perfdatas => [ + { template => '%.2f', unit => '%', label_extra_instance => 1, instance_use => 'display' } + ] + } + }, + { label => 'receive-rate', nlabel => 'ap.radio.receive.bitspersecond', set => { + key_values => [ { name => 'receive_rate' }, { name => 'display' } ], + output_template => 'radio channel receive rate: %d b/s', + perfdatas => [ + { template => '%d', unit => 'b/s', label_extra_instance => 1, instance_use => 'display' } + ] + } + }, + { label => 'send-rate', nlabel => 'ap.radio.send.bitspersecond', set => { + key_values => [ { name => 'send_rate' }, { name => 'display' } ], + output_template => 'radio channel send rate: %d b/s', + perfdatas => [ + { template => '%d', unit => 'b/s', label_extra_instance => 1, instance_use => 'display' } + ] + } + } + ]; +} + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1); + bless $self, $class; + + $options{options}->add_options(arguments => { + "filter-name:s" => { name => 'filter_name' }, + "filter-address:s" => { name => 'filter_address' }, + "filter-group:s" => { name => 'filter_group' } + }); + + return $self; +} + +my $map_runstate = { + 1 => 'up', + 2 => 'down', + 255 => 'invalid' +}; + +my $mapping = { + name => { oid => '.1.3.6.1.4.1.2011.6.139.16.1.2.1.3' },# hwWlanApName +}; + +my $mapping_stat = { + ap_group => { oid => '.1.3.6.1.4.1.2011.6.139.16.1.2.1.55' },# hwWlanRadioApGroup + runstate => { + oid => '.1.3.6.1.4.1.2011.6.139.16.1.2.1.6', map => $map_runstate + },# hwWlanRadioRunState + package_error_rate => { oid => '.1.3.6.1.4.1.2011.6.139.16.1.2.1.23' },# hwWlanRadioPER + noise => { oid => '.1.3.6.1.4.1.2011.6.139.16.1.2.1.24' },# hwWlanRadioNoise + channel_utilization_rate => { oid => '.1.3.6.1.4.1.2011.6.139.16.1.2.1.25' },# hwWlanRadioChUtilizationRate + channel_interference_rate => { oid => '.1.3.6.1.4.1.2011.6.139.16.1.2.1.29' },# hwWlanRadioChInterferenceRate + receive_rate => { oid => '.1.3.6.1.4.1.2011.6.139.16.1.2.1.32' },# hwWlanRadioRecvRate + send_rate => { oid => '.1.3.6.1.4.1.2011.6.139.16.1.2.1.37' },# hwWlanRadioSendRate +}; + +sub manage_selection { + my ($self, %options) = @_; + + $self->{ap} = {}; + + my $request = [ { oid => $mapping->{name}->{oid} } ]; + push @$request, { oid => $mapping->{ap_group}->{oid} } + if (defined($self->{option_results}->{filter_group}) && $self->{option_results}->{filter_group} ne ''); + + my $snmp_result = $options{snmp}->get_multiple_table( + oids => $request, + return_type => 1, + nothing_quit => 1 + ); + + foreach (sort keys %$snmp_result) { + next if (!/^$mapping->{name}->{oid}\.(.*)/); + my $instance = $1; + + my $result = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => $instance); + if (!defined($result->{name}) || $result->{name} eq '') { + $self->{output}->output_add(long_msg => + "skipping WLC '$instance': cannot get a name. please set it.", + debug => + 1); + next; + } + + if (defined($self->{option_results}->{filter_name}) && $self->{option_results}->{filter_name} ne '' && + $result->{name} !~ /$self->{option_results}->{filter_name}/) { + $self->{output}->output_add(long_msg => + "skipping '" . $result->{name} . "': no matching name filter.", + debug => + 1); + next; + } + + if (defined($self->{option_results}->{filter_group}) && $self->{option_results}->{filter_group} ne '' && + $result->{group} !~ /$self->{option_results}->{filter_group}/) { + $self->{output}->output_add(long_msg => + "skipping '" . $result->{group} . "': no matching group filter.", + debug => + 1); + next; + } + + $self->{ap}->{ $result->{name} } = { + instance => $instance, + display => $result->{name}, + ap_radio => { + display => $result->{name} + } + }; + } + + if (scalar(keys %{$self->{ap}}) <= 0) { + $self->{output}->output_add(long_msg => 'no AP associated'); + return; + } + + $options{snmp}->load( + oids => [ map($_->{oid}, values(%$mapping_stat)) ], + instances => [ map($_->{instance}, values %{$self->{ap}}) ], + instance_regexp => '^(.*)$' + ); + $snmp_result = $options{snmp}->get_leef(); + + foreach (sort keys %{$self->{ap}}) { + my $result = $options{snmp}->map_instance( + mapping => $mapping_stat, + results => $snmp_result, + instance => $self->{ap}->{$_}->{instance} + ); + + $self->{ap}->{$_}->{ap_radio}->{runstate} = $result->{runstate}; + $self->{ap}->{$_}->{ap_radio}->{package_error_rate} = $result->{package_error_rate}; + $self->{ap}->{$_}->{ap_radio}->{noise} = $result->{noise}; + $self->{ap}->{$_}->{ap_radio}->{channel_utilization_rate} = $result->{channel_utilization_rate}; + $self->{ap}->{$_}->{ap_radio}->{channel_interference_rate} = $result->{channel_interference_rate}; + $self->{ap}->{$_}->{ap_radio}->{receive_rate} = $result->{receive_rate} * 1000; + $self->{ap}->{$_}->{ap_radio}->{send_rate} = $result->{send_rate} * 1000; + } +} + +1; + +__END__ + +=head1 MODE + +Check AP radio status. + +=over 8 + +=item B<--filter-counters> + +Only display some counters (regexp can be used). +Example: --filter-counters='^temperature|onlinetime$' + +=item B<--filter-name> + +Filter access point radio name (can be a regexp) + +=item B<--filter-address> + +Filter access point radio IP address (can be a regexp). + +=item B<--filter-group> + +Filter access point group (can be a regexp). + +=item B<--warning-status> + +Define the conditions to match for the status to be WARNING. +You can use the following variables: %{runstate}, %{display} + +=item B<--critical-status> + +Define the conditions to match for the status to be CRITICAL (default: '%{runstate} ne "up"'). +You can use the following variables: %{runstate}, %{display} + +=item B<--warning-package-error-rate> + +Thresholds. + +=item B<--critical-package-error-rate> + +Thresholds. + +=item B<--warning-noise> + +Thresholds. + +=item B<--critical-noise> + +Thresholds. + +=item B<--warning-channel-utilization-rate> + +Thresholds. + +=item B<--critical-channel-utilization-rate> + +Thresholds. + +=item B<--warning-channel-interference-rate> + +Thresholds. + +=item B<--critical-channel-interference-rate> + +Thresholds. + +=item B<--warning-receive-rate> + +Thresholds. + +=item B<--critical-receive-rate> + +Thresholds. + +=item B<--warning-send-rate> + +Thresholds. + +=item B<--critical-send-rate> + +Thresholds. + +=back + +=cut diff --git a/src/network/huawei/wlc/snmp/mode/apstatus.pm b/src/network/huawei/wlc/snmp/mode/apstatus.pm new file mode 100644 index 000000000..dde79217d --- /dev/null +++ b/src/network/huawei/wlc/snmp/mode/apstatus.pm @@ -0,0 +1,544 @@ +# +# Copyright 2024 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package network::huawei::wlc::snmp::mode::apstatus; + +use base qw(centreon::plugins::templates::counter); + +use strict; +use warnings; +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); + +sub custom_status_output { + my ($self, %options) = @_; + + my $msg = 'status: ' . $self->{result_values}->{runstate}; + return $msg; +} + +sub prefix_global_output { + my ($self, %options) = @_; + + return 'Access points '; +} + +sub ap_long_output { + my ($self, %options) = @_; + + return "checking access point '" . $options{instance_value}->{display} . "'"; +} + +sub prefix_ap_output { + my ($self, %options) = @_; + + return "access point '" . $options{instance_value}->{display} . "' "; +} + +sub set_counters { + my ($self, %options) = @_; + + $self->{maps_counters_type} = [ + { name => 'global', type => 0, cb_prefix_output => 'prefix_global_output' }, + { name => 'ap', + type => 3, + cb_prefix_output => 'prefix_ap_output', + cb_long_output => 'ap_long_output', + indent_long_output => ' ', + message_multiple => 'All access points are ok', + group => [ + { name => 'ap_global', type => 0 } + ] + } + ]; + + $self->{maps_counters}->{global} = [ + { label => 'total', nlabel => 'accesspoints.total.count', set => { + key_values => [ { name => 'total' } ], + output_template => 'total: %s', + perfdatas => [ + { label => 'total', template => '%s', min => 0 } + ] + } + }, + { label => 'total-idle', nlabel => 'accesspoints.idle.count', set => { + key_values => [ { name => 'idle' } ], + output_template => 'idle: %s', + perfdatas => [ + { label => 'total_idle', template => '%s', min => 0 } + ] + } + }, + { label => 'total-autofind', nlabel => 'accesspoints.autofind.count', set => { + key_values => [ { name => 'autofind' } ], + output_template => 'autofind: %s', + perfdatas => [ + { label => 'total_autofind', template => '%s', min => 0 } + ] + } + }, + { label => 'total-typeNotMatch', nlabel => 'accesspoints.typenotmatch.count', display_ok => 0, set => { + key_values => [ { name => 'typeNotMatch' } ], + output_template => 'type not match: %s', + perfdatas => [ + { label => 'total_type_not_match', template => '%s', min => 0 } + ] + } + }, + { label => 'total-fault', nlabel => 'accesspoints.fault.count', set => { + key_values => [ { name => 'fault' } ], + output_template => 'fault: %s', + perfdatas => [ + { label => 'total_fault', template => '%s', min => 0 } + ] + } + }, + { label => 'total-config', nlabel => 'accesspoints.config.count', set => { + key_values => [ { name => 'config' } ], + output_template => 'config: %s', + perfdatas => [ + { label => 'total_config', template => '%s', min => 0 } + ] + } + }, + { label => 'total-config-failed', nlabel => 'accesspoints.configfailed.count', set => { + key_values => [ { name => 'configFailed' } ], + output_template => 'config failed: %s', + perfdatas => [ + { label => 'total_config_failed', template => '%s', min => 0 } + ] + } + }, + { label => 'total-download', nlabel => 'accesspoints.download.count', set => { + key_values => [ { name => 'download' } ], + output_template => 'download: %s', + perfdatas => [ + { label => 'total_download', template => '%s', min => 0 } + ] + } + }, + { label => 'total-normal', nlabel => 'accesspoints.normal.count', set => { + key_values => [ { name => 'normal' } ], + output_template => 'normal: %s', + perfdatas => [ + { label => 'total_normal', template => '%s', min => 0 } + ] + } + }, + { label => 'total-committing', nlabel => 'accesspoints.committing.count', set => { + key_values => [ { name => 'committing' } ], + output_template => 'committing: %s', + perfdatas => [ + { label => 'total_committing', template => '%s', min => 0 } + ] + } + }, + { label => 'total-commit-failed', nlabel => 'accesspoints.commitfailed.count', set => { + key_values => [ { name => 'commitFailed' } ], + output_template => 'commit failed: %s', + perfdatas => [ + { label => 'total_commit_failed', template => '%s', min => 0 } + ] + } + }, + { label => 'total-standby', nlabel => 'accesspoints.standby.count', set => { + key_values => [ { name => 'standby' } ], + output_template => 'standby: %s', + perfdatas => [ + { label => 'total_standby', template => '%s', min => 0 } + ] + } + }, + { label => 'total-version-mismatch', nlabel => 'accesspoints.vermismatch.count', set => { + key_values => [ { name => 'verMismatch' } ], + output_template => 'version mismatch: %s', + perfdatas => [ + { label => 'total_version_mismatch', template => '%s', min => 0 } + ] + } + }, + { label => 'total-name-conflicted', nlabel => 'accesspoints.nameconflicted.count', set => { + key_values => [ { name => 'nameConflicted' } ], + output_template => 'name conflicted: %s', + perfdatas => [ + { label => 'total_name_conflicted', template => '%s', min => 0 } + ] + } + }, + { label => 'total-invalid', nlabel => 'accesspoints.invalid.count', set => { + key_values => [ { name => 'invalid' } ], + output_template => 'invalid: %s', + perfdatas => [ + { label => 'total_invalid', template => '%s', min => 0 } + ] + } + }, + { label => 'total-country-code-mismatch', nlabel => 'accesspoints.countrycodemismatch.count', set => { + key_values => [ { name => 'countryCodeMismatch' } ], + output_template => 'country code mismatch: %s', + perfdatas => [ + { label => 'total_country_code_mismatch', template => '%s', min => 0 } + ] + } + } + ]; + + $self->{maps_counters}->{ap_global} = [ + { label => 'status', + type => 2, + critical_default => '%{runstate} =~ /fault|configFailed|commitFailed|verMismatch|nameConflicted|invalid/', + warning_default => '%{runstate} =~ /countryCodeMismatch|typeNotMatch/', + set => + { + key_values => + [ { name => 'runstate' }, { name => 'display' } ], + closure_custom_output => + $self->can('custom_status_output'), + closure_custom_perfdata => + sub {return 0;}, + closure_custom_threshold_check => + \&catalog_status_threshold_ng + } + } + ]; +} + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options); + bless $self, $class; + + $options{options}->add_options(arguments => { + "filter-name:s" => { name => 'filter_name' }, + "filter-address:s" => { name => 'filter_address' }, + "filter-group:s" => { name => 'filter_group' } + }); + + return $self; +} + +my $map_run_state = { + 1 => 'idle', + 2 => 'autofind', + 3 => 'typeNotMatch', + 4 => 'fault', + 5 => 'config', + 6 => 'configFailed', + 7 => 'download', + 8 => 'normal', + 9 => 'committing', + 10 => 'commitFailed', + 11 => 'standby', + 12 => 'verMismatch', + 13 => 'nameConflicted', + 14 => 'invalid', + 15 => 'countryCodeMismatch' +}; + +my $mapping = { + name => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.4' },# hwWlanApName + address => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.13' }# hwWlanApIpAddress +}; + +my $mapping_stat = { + runtime => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.18' },# hwWlanApRunTime + group => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.5' },# hwWlanApGroup + runstate => + { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.6', map => $map_run_state }# hwWlanApRunState +}; + +sub manage_selection { + my ($self, %options) = @_; + + $self->{ap} = {}; + $self->{global} = { + total => 0, + idle => 0, + autofind => 0, + typeNotMatch => 0, + fault => 0, + config => 0, + configFailed => 0, + download => 0, + normal => 0, + committing => 0, + commitFailed => 0, + standby => 0, + verMismatch => 0, + nameConflicted => 0, + invalid => 0, + countryCodeMismatch => 0 + }; + + my $request = [ { oid => $mapping->{name}->{oid} } ]; + push @$request, { oid => $mapping->{group}->{oid} } + if (defined($self->{option_results}->{filter_group}) + && $self->{option_results}->{filter_group} ne '' + ); + + push @$request, { oid => $mapping->{address}->{oid} } + if (defined($self->{option_results}->{filter_address}) && $self->{option_results}->{filter_address} ne ''); + + my $snmp_result = $options{snmp}->get_multiple_table( + oids => $request, + return_type => 1, + nothing_quit => 1 + ); + + foreach (sort keys %$snmp_result) { + next if (!/^$mapping->{name}->{oid}\.(.*)/); + my $instance = $1; + + my $result = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => $instance); + if (!defined($result->{name}) || $result->{name} eq '') { + $self->{output}->output_add( + long_msg => "skipping WLC '$instance': cannot get a name. please set it.", + debug => 1 + ); + next; + } + + if (defined($self->{option_results}->{filter_name}) && $self->{option_results}->{filter_name} ne '' && + $result->{name} !~ /$self->{option_results}->{filter_name}/) { + $self->{output}->output_add( + long_msg => "skipping '" . $result->{name} . "': no matching name filter.", + debug => 1 + ); + next; + } + + if (defined($self->{option_results}->{filter_address}) && $self->{option_results}->{filter_address} ne '' && + $result->{address} !~ /$self->{option_results}->{filter_address}/) { + $self->{output}->output_add( + long_msg => "skipping '" . $result->{address} . "': no matching address filter.", + debug => 1 + ); + next; + } + + if (defined($self->{option_results}->{filter_group}) && $self->{option_results}->{filter_group} ne '' && + $result->{group} !~ /$self->{option_results}->{filter_group}/) { + $self->{output}->output_add( + long_msg => "skipping '" . $result->{group} . "': no matching group filter.", + debug => 1 + ); + next; + } + + $self->{ap}->{ $result->{name} } = { + instance => $instance, + display => $result->{name}, + ap_global => { display => $result->{name} } + }; + } + + if (scalar(keys %{$self->{ap}}) <= 0) { + $self->{output}->output_add(long_msg => 'no AP associated'); + return; + } + + $options{snmp}->load( + oids => [ map($_->{oid}, values(%$mapping_stat)) ], + instances => [ map($_->{instance}, values %{$self->{ap}}) ], + instance_regexp => '^(.*)$' + ); + $snmp_result = $options{snmp}->get_leef(); + + foreach (sort keys %{$self->{ap}}) { + my $result = $options{snmp}->map_instance( + mapping => $mapping_stat, + results => $snmp_result, + instance => $self->{ap}->{$_}->{instance}); + + $self->{global}->{total}++; + $self->{global}->{ $result->{runstate} }++; + $self->{ap}->{$_}->{ap_global}->{runstate} = $result->{runstate}; + } +} + +1; + +__END__ + +=head1 MODE + +Check AP status. + +=over 8 + +=item B<--filter-counters> + +Only display some counters (regexp can be used). +Example: C<--filter-counters='^total$|^total-normal$'> + +=item B<--filter-name> + +Filter access point name (can be a regexp) + +=item B<--filter-address> + +Filter access point IP address (can be a regexp). + +=item B<--filter-group> + +Filter access point group (can be a regexp). + +=item B<--warning-status> + +Define the conditions to match for the status to be WARNING. (default: C<'%{runstate} =~ /countryCodeMismatch|typeNotMatch/'>). +You can use the following variables: C<%{runstate}>, C<%{display}>. +C<%(runstate)> can have one of these values: C, C, C, C, C, C, C, C, C, C, C, C, C, C, C. + +=item B<--critical-status> + +Define the conditions to match for the status to be CRITICAL. (default: C<'%{runstate} =~ /fault|configFailed|commitFailed|verMismatch|nameConflicted|invalid/'>). +You can use the following variables: C<%{runstate}>, C<%{display}>. +C<%(runstate)> can have one of these values: C, C, C, C, C, C, C, C, C, C, C, C, C, C, C. + +=item B<--warning-total> + +Thresholds. + +=item B<--critical-total> + +Thresholds. + +=item B<--warning-total-idle> + +Thresholds. + +=item B<--critical-total-idle> + +Thresholds. + +=item B<--warning-total-autofind> + +Thresholds. + +=item B<--critical-total-autofind> + +Thresholds. + +=item B<--warning-total-typeNotMatch> + +Thresholds. + +=item B<--critical-total-typeNotMatch> + +Thresholds. + +=item B<--warning-total-fault> + +Thresholds. + +=item B<--critical-total-fault> + +Thresholds. + +=item B<--warning-total-config> + +Thresholds. + +=item B<--critical-total-config> + +Thresholds. + +=item B<--warning-total-config-failed> + +Thresholds. + +=item B<--critical-total-config-failed> + +Thresholds. + +=item B<--warning-total-download> + +Thresholds. + +=item B<--critical-total-download> + +Thresholds. + +=item B<--warning-total-normal> + +Thresholds. + +=item B<--critical-total-normal> + +Thresholds. + +=item B<--warning-total-committing> + +Thresholds. + +=item B<--critical-total-committing> + +Thresholds. + +=item B<--warning-total-commit-failed> + +Thresholds. + +=item B<--critical-total-commit-failed> + +Thresholds. + +=item B<--warning-total-standby> + +Thresholds. + +=item B<--critical-total-standby> + +Thresholds. + +=item B<--warning-total-version-mismatch> + +Thresholds. + +=item B<--critical-total-version-mismatch> + +Thresholds. + +=item B<--warning-total-name-conflicted> + +Thresholds. + +=item B<--critical-total-name-conflicted> + +Thresholds. + +=item B<--warning-total-invalid> + +Thresholds. + +=item B<--critical-total-invalid> + +Thresholds. + +=item B<--warning-total-country-code-mismatch> + +Thresholds. + +=item B<--critical-total-country-code-mismatch> + +Thresholds. + +=back + +=cut diff --git a/src/network/huawei/wlc/snmp/mode/listaps.pm b/src/network/huawei/wlc/snmp/mode/listaps.pm new file mode 100644 index 000000000..b20673270 --- /dev/null +++ b/src/network/huawei/wlc/snmp/mode/listaps.pm @@ -0,0 +1,220 @@ +# +# Copyright 2024 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package network::huawei::wlc::snmp::mode::listaps; + +use base qw(centreon::plugins::mode); + +use strict; +use warnings; + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options); + bless $self, $class; + + $options{options}->add_options(arguments => { + "filter-name:s" => { name => 'filter_name' }, + "filter-address:s" => { name => 'filter_address' }, + "filter-group:s" => { name => 'filter_group' } + }); + + return $self; +} + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::init(%options); +} + +sub manage_selection { + my ($self, %options) = @_; + + # Collecting all the relevant informations user may needs when using discovery function for AP in Huawei WLC controllers. + # They had been select with https://support.huawei.com/enterprise/en/doc/EDOC1100306136/680fca71/huawei-wlan-ap-mib as support. + my $mapping = { + name => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.4' },# hwWlanApName + serial => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.2' },# hwWlanApSn + ap_group => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.5' },# hwWlanApGroup + address => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.13' },# hwWlanApIpAddress + software => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.22' },# hwWlanApSysSoftwareDesc + run_time => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.18' },# hwWlanApRunTime + hardware => { oid => '.1.3.6.1.4.1.2011.6.139.13.3.3.1.23' }# hwWlanApSysHardwareDesc + }; + # parent oid for all the mapping usage + my $oid_bsnAPEntry = '.1.3.6.1.4.1.2011.6.139.13.3.3'; + + my $snmp_result = $options{snmp}->get_table( + oid => $oid_bsnAPEntry, + start => $mapping->{serial}->{oid},# First oid of the mapping => here : 2 + end => $mapping->{hardware}->{oid}# Last oid of the mapping => here : 23 + ); + + my $results = {}; + # Iterate for all oids catch in snmp result above + foreach my $oid (keys %$snmp_result) { + next if ($oid !~ /^$mapping->{serial}->{oid}\.(.*)$/); + my $oid_path = $1; + + my $result = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => $oid_path); + + if (!defined($result->{name}) || $result->{name} eq '') { + $self->{output}->output_add(long_msg => + "skipping WLC '$oid_path': cannot get a name. please set it.", + debug => + 1); + next; + } + + if (!defined($result->{address}) || $result->{address} eq '') { + $self->{output}->output_add(long_msg => + "skipping WLC '$oid_path': cannot get a address. please set it.", + debug => + 1); + next; + } + + if (defined($self->{option_results}->{filter_name}) && $self->{option_results}->{filter_name} ne '' && + $result->{name} !~ /$self->{option_results}->{filter_name}/) { + $self->{output}->output_add(long_msg => + "skipping '" . $result->{name} . "': no matching name filter.", + debug => + 1); + next; + } + + if (defined($self->{option_results}->{filter_address}) && $self->{option_results}->{filter_address} ne '' && + $result->{address} !~ /$self->{option_results}->{filter_address}/) { + $self->{output}->output_add(long_msg => + "skipping '" . $result->{address} . "': no matching address filter.", + debug => + 1); + next; + } + + if (defined($self->{option_results}->{filter_group}) && $self->{option_results}->{filter_group} ne '' && + $result->{ap_group} !~ /$self->{option_results}->{filter_group}/) { + $self->{output}->output_add(long_msg => + "skipping '" . $result->{ap_group} . "': no matching group filter.", + debug => + 1); + next; + } + + $results->{$oid_path} = { + name => $result->{name}, + serial => $result->{serial}, + address => $result->{address}, + hardware => $result->{hardware}, + software => $result->{software}, + run_time => $result->{run_time}, + ap_group => $result->{ap_group} + }; + } + + return $results; +} + +sub run { + my ($self, %options) = @_; + + my $results = $self->manage_selection(snmp => $options{snmp}); + foreach my $oid_path (sort keys %$results) { + $self->{output}->output_add( + long_msg => sprintf( + '[oid_path: %s] [name: %s] [serial: %s] [address: %s] [hardware: %s] [software: %s] [run_time: %s] [ap_group: %s]', + $oid_path, + $results->{$oid_path}->{name}, + $results->{$oid_path}->{serial}, + $results->{$oid_path}->{address}, + $results->{$oid_path}->{hardware}, + $results->{$oid_path}->{software}, + centreon::plugins::misc::change_seconds(value => $results->{$oid_path}->{run_time}), + $results->{$oid_path}->{ap_group} + ) + ); + } + + $self->{output}->output_add( + severity => 'OK', + short_msg => 'List aps' + ); + $self->{output}->display(nolabel => 1, force_ignore_perfdata => 1, force_long_output => 1); + $self->{output}->exit(); +} + +sub disco_format { + my ($self, %options) = @_; + + $self->{output}->add_disco_format(elements => + [ 'name', 'serial', 'address', 'hardware', 'software', 'run_time', 'ap_group' ]); +} + +sub disco_show { + my ($self, %options) = @_; + + my $results = $self->manage_selection(snmp => $options{snmp}); + foreach my $oid_path (sort keys %$results) { + $self->{output}->add_disco_entry( + name => + $results->{$oid_path}->{name}, + serial => + $results->{$oid_path}->{serial}, + address => + $results->{$oid_path}->{address}, + hardware => + $results->{$oid_path}->{hardware}, + software => + $results->{$oid_path}->{software}, + run_time => + defined($results->{$oid_path}->{run_time}) ? + centreon::plugins::misc::change_seconds(value => $results->{$oid_path}->{run_time}) : + "", + ap_group => + $results->{$oid_path}->{ap_group} + ); + } +} + +1; + +__END__ + +=head1 MODE + +List wireless name. + +=over 8 + +=item B<--filter-name> + +Filter access points by name (can be a regexp). + +=item B<--filter-address> + +Filter access points by IP address (can be a regexp). + +=item B<--filter-group> + +Filter access point group (can be a regexp). + +=back + +=cut diff --git a/src/network/huawei/wlc/snmp/mode/listradios.pm b/src/network/huawei/wlc/snmp/mode/listradios.pm new file mode 100644 index 000000000..fbba5b29e --- /dev/null +++ b/src/network/huawei/wlc/snmp/mode/listradios.pm @@ -0,0 +1,205 @@ +# +# Copyright 2024 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package network::huawei::wlc::snmp::mode::listradios; + +use base qw(centreon::plugins::mode); + +use strict; +use warnings; + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options); + bless $self, $class; + + $options{options}->add_options(arguments => { + "filter-name:s" => { name => 'filter_name' }, + "filter-group:s" => { name => 'filter_group' } + }); + + return $self; +} + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::init(%options); +} + +my $map_runstate = { + 1 => 'up', + 2 => 'down', + 255 => 'invalid' +}; + +sub manage_selection { + my ($self, %options) = @_; + + # Collecting all the relevant information user may needs when using discovery function for AP in Huawei WLC controllers. + # They had been select with https://support.huawei.com/enterprise/en/doc/EDOC1100306136/680fca71/huawei-wlan-ap-mib as support. + my $mapping = { + name => { oid => '.1.3.6.1.4.1.2011.6.139.16.1.2.1.3' },# hwWlanRadioInfoApName + frequence_type => { oid => '.1.3.6.1.4.1.2011.6.139.16.1.2.1.5' },# hwWlanRadioFreqType + ap_group => { oid => '.1.3.6.1.4.1.2011.6.139.16.1.2.1.55' },# hwWlanRadioApGroup + run_state => { oid => '.1.3.6.1.4.1.2011.6.139.16.1.2.1.6', map => $map_runstate },# hwWlanRadioRunState + description => { oid => '.1.3.6.1.4.1.2011.6.139.16.1.2.1.16' },# hwWlanRadioDescription + }; + + my $request = [ { oid => $mapping->{name}->{oid} } ]; + push @$request, { oid => $mapping->{group}->{oid} } + if (defined($self->{option_results}->{filter_group}) && $self->{option_results}->{filter_group} ne ''); + + push @$request, { oid => $mapping->{address}->{oid} } + if (defined($self->{option_results}->{filter_address}) && $self->{option_results}->{filter_address} ne ''); + + my $snmp_result = $options{snmp}->get_multiple_table( + oids => $request, + return_type => 1, + nothing_quit => 1 + ); + + my $results = {}; + # Iterate for all oids catch in snmp result above + foreach my $oid (keys %$snmp_result) { + next if ($oid !~ /^$mapping->{name}->{oid}\.(.*)$/); + my $oid_path = $1; + + my $result = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => $oid_path); + + if (!defined($result->{name}) || $result->{name} eq '') { + $self->{output}->output_add(long_msg => "skipping WLC '$oid_path': cannot get a name. please set it.", debug => 1); + next; + } + + if (defined($self->{option_results}->{filter_name}) && $self->{option_results}->{filter_name} ne '' && + $result->{name} !~ /$self->{option_results}->{filter_name}/) { + $self->{output}->output_add(long_msg => "skipping '" . $result->{name} . "': no matching name filter.", debug => 1); + next; + } + + if (defined($self->{option_results}->{filter_group}) && $self->{option_results}->{filter_group} ne '' && + $result->{ap_group} !~ /$self->{option_results}->{filter_group}/) { + $self->{output}->output_add(long_msg => "skipping '" . $result->{ap_group} . "': no matching group filter.", debug => 1); + next; + } + + $self->{ap}->{ $result->{name} } = { + instance => $oid_path, + display => $result->{name}, + ap_global => { display => $result->{name} }, + interfaces => {} + }; + } + + $options{snmp}->load( + oids => [ map($_->{oid}, values(%$mapping)) ], + instances => [ map($_->{instance}, values %{$self->{ap}}) ], + instance_regexp => '^(.*)$' + ); + $snmp_result = $options{snmp}->get_leef(); + + foreach (keys %{$self->{ap}}) { + my $result = $options{snmp}->map_instance(mapping => + $mapping, results => + $snmp_result, + instance => + $self->{ap}->{$_}->{instance}); + + $results->{$self->{ap}->{$_}->{instance}} = { + name => $result->{name}, + frequence_type => $result->{frequence_type}, + run_state => $result->{run_state}, + description => $result->{description}, + ap_group => $result->{ap_group} + }; + } + + return $results; +} + +sub run { + my ($self, %options) = @_; + + my $results = $self->manage_selection(snmp => $options{snmp}); + foreach my $oid_path (sort keys %$results) { + $self->{output}->output_add( + long_msg => sprintf( + '[oid_path: %s] [name: %s] [frequence_type: %s] [run_state: %s] [description: %s] [ap_group: %s]', + $oid_path, + $results->{$oid_path}->{name}, + $results->{$oid_path}->{frequence_type}, + $results->{$oid_path}->{run_state}, + $results->{$oid_path}->{description}, + $results->{$oid_path}->{ap_group} + ) + ); + } + + $self->{output}->output_add( + severity => 'OK', + short_msg => 'List aps' + ); + $self->{output}->display(nolabel => 1, force_ignore_perfdata => 1, force_long_output => 1); + $self->{output}->exit(); +} + +sub disco_format { + my ($self, %options) = @_; + + $self->{output}->add_disco_format(elements => + [ 'name', 'frequence_type', 'run_state', 'description', 'ap_group' ]); +} + +sub disco_show { + my ($self, %options) = @_; + + my $results = $self->manage_selection(snmp => $options{snmp}); + foreach my $oid_path (sort keys %$results) { + $self->{output}->add_disco_entry( + name => $results->{$oid_path}->{name}, + frequence_type => $results->{$oid_path}->{frequence_type}, + run_state => $results->{$oid_path}->{run_state}, + description => $results->{$oid_path}->{description}, + ap_group => $results->{$oid_path}->{ap_group} + ); + } +} + +1; + +__END__ + +=head1 MODE + +List radios. + +=over 8 + +=item B<--filter-name> + +Display AP radios matching the filter. + +=item B<--filter-group> + +Display AP radios matching the filter. + +=back + +=cut diff --git a/src/network/huawei/wlc/snmp/mode/wlanglobal.pm b/src/network/huawei/wlc/snmp/mode/wlanglobal.pm new file mode 100644 index 000000000..d7c4fae69 --- /dev/null +++ b/src/network/huawei/wlc/snmp/mode/wlanglobal.pm @@ -0,0 +1,299 @@ +# +# Copyright 2024 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package network::huawei::wlc::snmp::mode::wlanglobal; + +use base qw(centreon::plugins::templates::counter); + +use strict; +use warnings; +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); + +sub custom_normal_output { + my ($self, %options) = @_; + + return sprintf( + 'Access Points normal state %s on %s (%.2f%%)', + $self->{result_values}->{normal}, + $self->{result_values}->{total}, + $self->{result_values}->{normal_prct}, + ); +} + +sub custom_success_auth_user_output { + my ($self, %options) = @_; + + return sprintf( + 'Access Points user authentications %s on %s (%.2f%%)', + $self->{result_values}->{current_auth_user}, + $self->{result_values}->{current_user}, + $self->{result_values}->{current_auth_user_prct}, + ); +} + +sub custom_current_auth_user_prct_output { + my ($self, %options) = @_; + + return sprintf( + 'Access Points user authentications %.2f%% (%s on %s)', + $self->{result_values}->{current_auth_user_prct}, + $self->{result_values}->{current_auth_user}, + $self->{result_values}->{current_user}, + ); +} + +sub custom_normal_prct_output { + my ($self, %options) = @_; + + return sprintf( + 'Access Points normal state %.2f%% (%s on %s)', + $self->{result_values}->{normal_prct}, + $self->{result_values}->{normal}, + $self->{result_values}->{total}, + ); +} + +sub custom_fault_prct_output { + my ($self, %options) = @_; + + return sprintf( + 'Access Points fault state %.2f%% (%s on %s)', + $self->{result_values}->{fault_prct}, + $self->{result_values}->{fault}, + $self->{result_values}->{total}, + ); +} + +sub custom_fault_output { + my ($self, %options) = @_; + + return sprintf( + 'Access Points fault state %s on %s (%.2f%%)', + $self->{result_values}->{fault}, + $self->{result_values}->{total}, + $self->{result_values}->{fault_prct} + ); +} + +sub set_counters { + my ($self, %options) = @_; + + $self->{maps_counters_type} = [ + { name => 'global', type => 0, cb_prefix_output => 'prefix_global_output' }, + ]; + + $self->{maps_counters}->{global} = [ + { label => 'total', nlabel => 'accesspoints.total.count', display_ok => 0, set => { + key_values => [ { name => 'total' } ], + output_template => 'total: %s', + perfdatas => [ + { template => '%s', min => 0 } + ] + } + }, + { label => 'normal', nlabel => 'accesspoints.normal.count', display_ok => 1, set => { + key_values => [ { name => 'normal' }, { name => 'total' }, { name => 'normal_prct' } ], + closure_custom_output => $self->can('custom_normal_output'), + perfdatas => [ + { template => '%s', min => 0 } + ] + } + }, + { label => 'fault', nlabel => 'accesspoints.fault.count', display_ok => 0, set => { + key_values => [ { name => 'fault' }, { name => 'total' }, { name => 'fault_prct' } ], + closure_custom_output => $self->can('custom_fault_output'), + perfdatas => [ + { template => '%s', min => 0 } + ] + } + }, + { label => 'normal-prct', nlabel => 'accesspoints.normal.percentage', display_ok => 0, set => { + key_values => [ { name => 'normal_prct' }, { name => 'total' }, { name => 'normal' } ], + closure_custom_output => $self->can('custom_normal_output_prct'), + perfdatas => [ + { template => '%.2f', unit => '%', min => 0, max => 100 } + ] + } + }, + { label => 'fault-prct', nlabel => 'accesspoints.fault.percentage', display_ok => 0, set => { + key_values => [ { name => 'fault_prct' }, { name => 'total' }, { name => 'fault' } ], + closure_custom_output => $self->can('custom_fault_output_prct'), + perfdatas => [ + { template => '%.2f', unit => '%', min => 0, max => 100 } + ] + } + }, + { label => 'current-user', nlabel => 'accesspoints.user.count', display_ok => 0, set => { + key_values => [ { name => 'current_user' } ], + output_template => 'current user: %s', + perfdatas => [ + { template => '%s', min => 0 } + ] + } + }, + { label => 'current-auth-user', nlabel => 'accesspoints.user.auth.count', display_ok => 0, set => { + key_values => [ { name => 'current_auth_user' }, { name => 'current_auth_user_prct' }, { name => 'current_user' } ], + closure_custom_output => $self->can('custom_success_auth_user_output'), + perfdatas => [ + { template => '%s', min => 0 } + ] + } + }, + { label => 'current-auth-user-prct', nlabel => 'accesspoints.user.auth.percentage', display_ok => 1, set => { + key_values => [ { name => 'current_auth_user_prct' }, { name => 'current_auth_user' }, { name => 'current_user' } ], + closure_custom_output => $self->can('custom_current_auth_user_prct_output'), + perfdatas => [ + { template => '%.2f', unit => '%', min => 0, max => 100 } + ] + } + } + ]; +} + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options); + bless $self, $class; + + $options{options}->add_options(arguments => {}); + + return $self; +} + +my $oid_normal = '.1.3.6.1.4.1.2011.6.139.12.1.5.6.0';# hwWlanServiceNormalAPCount +my $oid_total = '.1.3.6.1.4.1.2011.6.139.12.1.5.7.0';# hwWlanApCount +my $oid_cur_user = '.1.3.6.1.4.1.2011.6.139.12.1.2.2.0';# hwWlanCurAssocStaNum +my $oid_cur_auth_user = '.1.3.6.1.4.1.2011.6.139.12.1.2.3.0';# hwWlanCurAuthSuccessStaNum + +sub manage_selection { + my ($self, %options) = @_; + + $self->{global} = { + total => 0, + normal => 0, + normal_prct => 0, + fault => 0, + fault_prct => 0, + current_user => 0, + current_auth_user => 0 + }; + + my $snmp_result = $options{snmp}->get_leef( + oids => [ $oid_normal, $oid_total, $oid_cur_user, $oid_cur_auth_user ], + nothing_quit => 0 + ); + + $self->{global} = { + total => $snmp_result->{$oid_total}, + normal => $snmp_result->{$oid_normal}, + current_user => $snmp_result->{$oid_cur_user}, + current_auth_user => $snmp_result->{$oid_cur_auth_user} + }; + + $self->{global}->{fault} = $self->{global}->{total} > 0 && $self->{global}->{normal} > 0 ? + $self->{global}->{total} - $self->{global}->{normal} : 0; + + $self->{global}->{normal_prct} = $self->{global}->{total} > 0 ? + $self->{global}->{normal} * 100 / $self->{global}->{total} : 0; + + $self->{global}->{fault_prct} = $self->{global}->{total} > 0 ? + $self->{global}->{fault} * 100 / $self->{global}->{total} : 0; + + $self->{global}->{current_auth_user_prct} = $self->{global}->{current_user} > 0 ? + $self->{global}->{current_auth_user} * 100 / $self->{global}->{current_user} : 0; +} + +1; + +__END__ + +=head1 MODE + +Check global WLAN access point count and user associated and authenticated. + +=over 8 + +=item B<--warning-total> + +Thresholds. + +=item B<--critical-total> + +Thresholds. + +=item B<--warning-normal> + +Thresholds. + +=item B<--critical-normal> + +Thresholds. + +=item B<--warning-normal-prct> + +Thresholds. + +=item B<--critical-normal-prct> + +Thresholds. + +=item B<--warning-fault> + +Thresholds. + +=item B<--critical-fault> + +Thresholds. + +=item B<--warning-fault-prct> + +Thresholds. + +=item B<--critical-fault-prct> + +Thresholds. + +=item B<--warning-current-user> + +Thresholds. + +=item B<--critical-current-user> + +Thresholds. + +=item B<--warning-current-auth-user> + +Thresholds. + +=item B<--critical-current-auth-user> + +Thresholds. + +=item B<--warning-current-auth-user-prct> + +Thresholds. + +=item B<--critical-current-auth-user-prct> + +Thresholds. + +=back + +=cut diff --git a/src/network/huawei/wlc/snmp/plugin.pm b/src/network/huawei/wlc/snmp/plugin.pm new file mode 100644 index 000000000..acc3bc868 --- /dev/null +++ b/src/network/huawei/wlc/snmp/plugin.pm @@ -0,0 +1,58 @@ +# +# Copyright 2024 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package network::huawei::wlc::snmp::plugin; + +use strict; +use warnings; +use base qw(centreon::plugins::script_snmp); + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options); + bless $self, $class; + + $self->{modes} = { + 'ap-health' => 'network::huawei::wlc::snmp::mode::aphealth', + 'ap-radio' => 'network::huawei::wlc::snmp::mode::apradio', + 'ap-status' => 'network::huawei::wlc::snmp::mode::apstatus', + 'cpu' => 'centreon::common::huawei::standard::snmp::mode::cpu', + 'hardware' => 'centreon::common::huawei::standard::snmp::mode::hardware', + 'interfaces' => 'centreon::common::huawei::standard::snmp::mode::interfaces', + 'list-aps' => 'network::huawei::wlc::snmp::mode::listaps', + 'list-interfaces' => 'snmp_standard::mode::listinterfaces', + 'list-radios' => 'network::huawei::wlc::snmp::mode::listradios', + 'memory' => 'centreon::common::huawei::standard::snmp::mode::memory', + 'uptime' => 'snmp_standard::mode::uptime', + 'wlan-global' => 'network::huawei::wlc::snmp::mode::wlanglobal' + }; + + return $self; +} + +1; + +__END__ + +=head1 PLUGIN DESCRIPTION + +Check Huawei WLC in SNMP. + +=cut diff --git a/src/network/stormshield/api/mode/interfaces.pm b/src/network/stormshield/api/mode/interfaces.pm index 5de5b97ec..93087e4c9 100644 --- a/src/network/stormshield/api/mode/interfaces.pm +++ b/src/network/stormshield/api/mode/interfaces.pm @@ -234,7 +234,7 @@ sub set_counters { label => 'status', type => 2, filter => 'add_status', - critical_default => "%{state} eq 'enabled' and %{plugged} eq 'unplugged'", set => { + critical_default => "%{state} eq 'down'", set => { key_values => [ { name => 'state' }, { name => 'plugged' }, { name => 'real_name' }, { name => 'user_name' } ], closure_custom_output => $self->can('custom_status_output'), closure_custom_perfdata => sub { return 0; }, @@ -344,8 +344,8 @@ sub check_options { } } -my $map_state = { 0 => 'disabled', 1 => 'enabled' }; -my $map_plugged = { 0 => 'unplugged', 1 => 'plugged' }; +my $map_state = { 0 => 'down', 1 => 'up' }; +my $map_plugged = { 0 => 'passive', 1 => 'active' }; sub manage_selection { my ($self, %options) = @_; @@ -444,7 +444,7 @@ You can use the following variables: %{state}, %{plugged}, %{user_name}, %{real_ =item B<--critical-status> -Define the conditions to match for the status to be CRITICAL (default: "%{state} eq 'enabled' and %{plugged} eq 'unplugged'") +Define the conditions to match for the status to be CRITICAL (default: "%{state} eq 'down'") You can use the following variables: %{state}, %{plugged}, %{user_name}, %{real_name} =item B<--warning-*> B<--critical-*> diff --git a/src/os/freebsd/snmp/mode/storage.pm b/src/os/freebsd/snmp/mode/storage.pm new file mode 100644 index 000000000..3776b3b98 --- /dev/null +++ b/src/os/freebsd/snmp/mode/storage.pm @@ -0,0 +1,132 @@ +# +# Copyright 2024 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package os::freebsd::snmp::mode::storage; + +use base qw(snmp_standard::mode::storage); + +use strict; +use warnings; + +sub default_storage_type { + my ($self, %options) = @_; + + return '^(hrStorageFixedDisk|hrStorageNetworkDisk|hrFSBerkeleyFFS|hrFSOther)$'; +} + +1; + +__END__ + +=head1 MODE + +Check storage system. + +=over 8 + +=item B<--warning-usage> + +Warning threshold. + +=item B<--critical-usage> + +Critical threshold. + +=item B<--warning-access> + +Warning threshold. + +=item B<--critical-access> + +Critical threshold. +Check if storage is C: C<--critical-access=readOnly> + +=item B<--add-access> + +Check storage access (C, C). + +=item B<--units> + +Units of thresholds (default: '%') ('%', 'B'). + +=item B<--free> + +Thresholds are on free space left. + +=item B<--storage> + +Define the storage filter on IDs (OID indexes, e.g.: 1,2,...). If empty, all storage systems will be monitored. +To filter on storage names, see C<--name>. + +=item B<--name> + +Allows to use storage name with option C<--storage> instead of storage OID index. + +=item B<--regexp> + +Allows to use regexp to filter storage (with option C<--name>). + +=item B<--regexp-insensitive> + +Allows to use regexp non case-sensitive (with C<--regexp>). + +=item B<--path-best-match> + +Allows to select best path mount point (with C<--name>). + +=item B<--reload-cache-time> + +Time in minutes before reloading cache file (default: 180). + +=item B<--oid-filter> + +Choose OID used to filter storage (default: C) (values: C, C). + +=item B<--oid-display> + +Choose OID used to display storage (default: C) (values: C, C). + +=item B<--display-transform-src> B<--display-transform-dst> + +Modify the storage name displayed by using a regular expression. + +Example: adding C<--display-transform-src='dev' --display-transform-dst='run'> will replace all occurrences of C with C. + +=item B<--show-cache> + +Display cache storage data. + +=item B<--space-reservation> + +Some filesystem has space reserved (like ext4 for root). +The value is in percent of total (default: none) (results like 'df' command). + +=item B<--filter-duplicate> + +Filter duplicate storages (in used size and total size). + +=item B<--filter-storage-type> + +Filter storage types with a regexp (default: C<'^(hrStorageFixedDisk|hrStorageNetworkDisk|hrFSBerkeleyFFS|hrFSOther)$'>). +C is needed when the default file system is ZFS. + +=back + +=cut \ No newline at end of file diff --git a/src/os/freebsd/snmp/plugin.pm b/src/os/freebsd/snmp/plugin.pm index b96ada458..b62e56815 100644 --- a/src/os/freebsd/snmp/plugin.pm +++ b/src/os/freebsd/snmp/plugin.pm @@ -44,7 +44,7 @@ sub new { 'list-storages' => 'snmp_standard::mode::liststorages', 'memory' => 'os::freebsd::snmp::mode::memory', 'processcount' => 'snmp_standard::mode::processcount', - 'storage' => 'snmp_standard::mode::storage', + 'storage' => 'os::freebsd::snmp::mode::storage', 'swap' => 'snmp_standard::mode::swap', 'time' => 'snmp_standard::mode::ntp', 'tcpcon' => 'snmp_standard::mode::tcpcon', @@ -60,7 +60,7 @@ __END__ =head1 PLUGIN DESCRIPTION -Check Freebsd operating systems in SNMP. -Some modes ('cpu', 'load, 'swap', 'memory') needs 'bsnmp-ucd'. +Check FreeBSD operating systems in SNMP. +Some modes (C, C, C, C) need C. =cut diff --git a/src/snmp_standard/mode/cpu.pm b/src/snmp_standard/mode/cpu.pm index 8c43f2e86..092a7ea39 100644 --- a/src/snmp_standard/mode/cpu.pm +++ b/src/snmp_standard/mode/cpu.pm @@ -138,7 +138,7 @@ of time that this processor was not idle) =item B<--use-ucd> -Use UCD mib for CPU average. +Use UCD MIB for CPU average. =item B<--warning-average> diff --git a/src/snmp_standard/mode/diskio.pm b/src/snmp_standard/mode/diskio.pm index 7138101e0..28493ce28 100644 --- a/src/snmp_standard/mode/diskio.pm +++ b/src/snmp_standard/mode/diskio.pm @@ -304,7 +304,7 @@ __END__ =head1 MODE -Check read/write I/O disks (bytes per second, IOPs). +Check read/write I/O disks (bytes per second, IOPS). =over 8 @@ -324,11 +324,11 @@ Can be: 'read', 'write', 'read-iops', 'write-iops', =item B<--device> -Set the device (number expected) example: 1, 2,... (empty means 'check all devices'). +Specify the device to be checked (number expected) example: 1, 2,... (empty means 'check all devices'). =item B<--name> -Allows to use device name with option --device instead of devoce oid index. +Allows to use device name with option --device instead of device OID index. =item B<--regexp> diff --git a/src/snmp_standard/mode/inodes.pm b/src/snmp_standard/mode/inodes.pm index b17974edc..d448fdbd2 100644 --- a/src/snmp_standard/mode/inodes.pm +++ b/src/snmp_standard/mode/inodes.pm @@ -191,15 +191,15 @@ Critical threshold in percent. =item B<--diskpath> -Set the disk path (number expected) example: 1, 2,... (empty means 'check all disks path'). +Specify the path of the disk you want to check (number expected) example: 1, 2,... (empty means 'check all disks path'). =item B<--name> -Allows to use disk path name with option --diskpath instead of disk path oid index. +Allows to use disk path name with option --diskpath instead of disk path OID index. =item B<--regexp> -Allows to use regexp to filter diskpath (with option --name). +Allows to use regexp to filter disk path (with option --name). =item B<--regexp-insensitive> diff --git a/src/snmp_standard/mode/interfaces.pm b/src/snmp_standard/mode/interfaces.pm index ceebc8bcd..acd5e37d6 100644 --- a/src/snmp_standard/mode/interfaces.pm +++ b/src/snmp_standard/mode/interfaces.pm @@ -1694,7 +1694,7 @@ Display traffic perfdata to be compatible with NagVis widget. =item B<--interface> -Define the interface filter on IDs (OID indexes, e.g.: 1,2,...). If empty, all interfaces will be monitored. +Check only the interfaces with the specified IDs (OID indexes, e.g.: 1,2,...). If empty, all interfaces will be monitored. To filter on interface names, see --name. =item B<--name> @@ -1731,7 +1731,7 @@ Force to use 64 bits counters only. Can be used to improve performance. =item B<--force-counters32> -Force to use 32-bits counters (even with SNMP versions 2c and 3). To use when 64 bits counters are buggy. +Force to use 32-bit counters (even with SNMP versions 2c and 3). To use when 64 bits counters are buggy. =item B<--reload-cache-time> diff --git a/src/snmp_standard/mode/listdiskspath.pm b/src/snmp_standard/mode/listdiskspath.pm index ec934c14c..d56af21c8 100644 --- a/src/snmp_standard/mode/listdiskspath.pm +++ b/src/snmp_standard/mode/listdiskspath.pm @@ -211,15 +211,15 @@ Need to enable "includeAllDisks 10%" on snmpd.conf. =item B<--diskpath> -Set the disk path (number expected) example: 1, 2,... (empty means 'check all disks path'). +Specify the path of the disk you want to check (number expected) example: 1, 2,... (empty means 'check all disks path'). =item B<--name> -Allows to use disk path name with option --diskpath instead of disk path oid index. +Allows to use disk path name with option --diskpath instead of disk path OID index. =item B<--regexp> -Allows to use regexp to filter diskpath (with option --name). +Allows to use regexp to filter disk path (with option --name). =item B<--regexp-insensitive> diff --git a/src/snmp_standard/mode/listinterfaces.pm b/src/snmp_standard/mode/listinterfaces.pm index 3e4bfd587..a23e8cce5 100644 --- a/src/snmp_standard/mode/listinterfaces.pm +++ b/src/snmp_standard/mode/listinterfaces.pm @@ -161,7 +161,7 @@ sub run { $interface_speed = $self->{option_results}->{speed}; } - if (defined($self->{option_results}->{skip_speed0}) && $interface_speed == 0) { + if (defined($self->{option_results}->{skip_speed0}) && ($interface_speed eq '' || $interface_speed == 0)) { $self->{output}->output_add(long_msg => "skipping interface '" . $display_value . "': interface speed is 0 and option --skip-speed0 is set"); next; } @@ -395,7 +395,7 @@ __END__ =item B<--interface> -Set the interface (number expected) example: 1,2,... (empty means 'check all interfaces'). +Define which interfaces to monitor (number expected). Example: 1,2... (empty means 'check all interfaces'). =item B<--name> @@ -407,39 +407,41 @@ Set interface speed (in Mb). =item B<--skip-speed0> -Don't display interface with speed 0. +Avoid displaying interfaces with bandwidth/speed equal to 0. =item B<--filter-status> -Display interfaces matching the filter (example: 'up'). +Filter interfaces based on their status using a regular expression (example: 'up|UP'). =item B<--use-adminstatus> -Display interfaces with AdminStatus 'up'. +Display interfaces with C 'up'. =item B<--oid-filter> -Define the OID to be used to filter interfaces (default: ifName) (values: ifDesc, ifAlias, ifName). +Define the OID to be used to filter interfaces (default: C). +Available OIDs: C, C, C). =item B<--oid-display> -Define the OID that will be used to name the interfaces (default: ifName) (values: ifDesc, ifAlias, ifName). +Define the OID that will be used to name the interfaces (default: ifName). +Available OIDs: C, C, C). =item B<--display-transform-src> B<--display-transform-dst> Modify the interface name displayed by using a regular expression. -Example: adding --display-transform-src='eth' --display-transform-dst='ens' will replace all occurrences of 'eth' with 'ens' +Example: adding C<--display-transform-src='eth' --display-transform-dst='ens'> will replace all occurrences of 'eth' with 'ens' =item B<--add-extra-oid> Display an OID. -Example: --add-extra-oid='alias,.1.3.6.1.2.1.31.1.1.1.18' -or --add-extra-oid='vlan,.1.3.6.1.2.1.31.19,%{instance}\..*' +Example: C<--add-extra-oid='alias,.1.3.6.1.2.1.31.1.1.1.18'> +or C<--add-extra-oid='vlan,.1.3.6.1.2.1.31.19,%{instance}\..*'> =item B<--add-mac-address> -Display interface mac address. +Display interfaces MAC addresses. =back diff --git a/src/storage/emc/datadomain/snmp/mode/cleaning.pm b/src/storage/emc/datadomain/snmp/mode/cleaning.pm index 191f65682..762925ce4 100644 --- a/src/storage/emc/datadomain/snmp/mode/cleaning.pm +++ b/src/storage/emc/datadomain/snmp/mode/cleaning.pm @@ -116,10 +116,14 @@ sub manage_selection { if ($self->{global}->{lastExecSeconds} == -1 || $self->{global}->{lastExecSeconds} > $lastExecSeconds) { $self->{global}->{lastExecSeconds} = $lastExecSeconds; } + } elsif ($snmp_result->{$oid} =~ /Cleaning: phase (\d+) of (\d+) \(([^)]+)\)/) { + $self->{global}->{lastExecHuman} = "running (phase $1 of $2 : $3)"; + $self->{global}->{lastExecSeconds} = 0; } } - if ($self->{global}->{lastExecSeconds} != -1) { + # If there is a lastExecSeconds set (if above in the looop) and this is not a cleaning running (elsif above) + if ($self->{global}->{lastExecSeconds} > 0 || ($self->{global}->{lastExecSeconds} == 0 && $self->{global}->{lastExecHuman} eq "never")) { $self->{global}->{lastExecHuman} = centreon::plugins::misc::change_seconds( value => $self->{global}->{lastExecSeconds} ); diff --git a/src/storage/netapp/ontap/restapi/mode/aggregates.pm b/src/storage/netapp/ontap/restapi/mode/aggregates.pm index b8b8517cc..7a6a81176 100644 --- a/src/storage/netapp/ontap/restapi/mode/aggregates.pm +++ b/src/storage/netapp/ontap/restapi/mode/aggregates.pm @@ -219,7 +219,7 @@ sub new { sub manage_selection { my ($self, %options) = @_; - my $aggregates = $options{custom}->request_api(endpoint => '/api/storage/aggregates?fields=*'); + my $aggregates = $options{custom}->request_api(endpoint => '/api/storage/aggregates?fields=name,uuid,state,space'); $self->{aggregates} = {}; foreach (@{$aggregates->{records}}) { diff --git a/src/storage/netapp/ontap/restapi/mode/cluster.pm b/src/storage/netapp/ontap/restapi/mode/cluster.pm index 02adca3d1..a85178bfa 100644 --- a/src/storage/netapp/ontap/restapi/mode/cluster.pm +++ b/src/storage/netapp/ontap/restapi/mode/cluster.pm @@ -195,7 +195,7 @@ sub new { sub manage_selection { my ($self, %options) = @_; - my $cluster = $options{custom}->request_api(endpoint => '/api/cluster?fields=*'); + my $cluster = $options{custom}->request_api(endpoint => '/api/cluster?fields=name,statistics,metric'); $self->{clusters} = { $cluster->{name} => { @@ -219,7 +219,7 @@ sub manage_selection { } }; - my $nodes = $options{custom}->request_api(endpoint => '/api/cluster/nodes?fields=*'); + my $nodes = $options{custom}->request_api(endpoint => '/api/cluster/nodes?fields=name,service_processor'); foreach (@{$nodes->{records}}) { $self->{clusters}->{ $cluster->{name} }->{nodes}->{ $_->{name} } = { display => $_->{name}, @@ -245,7 +245,7 @@ Check cluster. =item B<--filter-counters> Only display some counters (regexp can be used). -Example: --filter-counters='node-status' +Example: C<--filter-counters='node-status'> =item B<--unknown-node-status> @@ -265,9 +265,9 @@ You can use the following variables: %{state}, %{link_status}, %{display} =item B<--warning-*> B<--critical-*> Thresholds. -Can be: 'cpu-utilization' (%), 'read' (B/s), 'write' (B/s), 'read-iops', 'write-iops', -'read-latency' (ms), 'write-lantency' (ms), 'other-latency' (ms), 'total-latency' (ms), -'other' (B/s), 'total' (B/s), 'other-iops', 'total-iops'. +Can be: C (%), C (B/s), C (B/s), C, C, +C (ms), C (ms), C (ms), C (ms), +C (B/s), C (B/s), C, C. =back diff --git a/src/storage/netapp/ontap/restapi/mode/components/fru.pm b/src/storage/netapp/ontap/restapi/mode/components/fru.pm index 247320c1f..14d4877a9 100644 --- a/src/storage/netapp/ontap/restapi/mode/components/fru.pm +++ b/src/storage/netapp/ontap/restapi/mode/components/fru.pm @@ -43,7 +43,7 @@ sub check { next if ($self->check_filter(section => 'shelf', instance => $shelf_instance)); foreach my $fru (@{$shelf->{frus}}) { - my $name = $fru->{type} . ':' . $fru->{id}; + my $name = $fru->{type} . ':' . (defined($fru->{id}) ? $fru->{id} : ''); if ($fru->{installed} !~ /true|1/i) { $self->{output}->output_add( diff --git a/src/storage/netapp/ontap/restapi/mode/hardware.pm b/src/storage/netapp/ontap/restapi/mode/hardware.pm index 8ec064039..5471ec4c9 100644 --- a/src/storage/netapp/ontap/restapi/mode/hardware.pm +++ b/src/storage/netapp/ontap/restapi/mode/hardware.pm @@ -68,7 +68,7 @@ sub new { sub get_disks { my ($self, %options) = @_; - return $self->{custom}->request_api(endpoint => '/api/storage/disks?fields=*'); + return $self->{custom}->request_api(endpoint => '/api/storage/disks?fields=name,state,serial_number,bay'); } sub get_shelves { @@ -76,7 +76,7 @@ sub get_shelves { return if (defined($self->{shelves})); - $self->{shelves} = $self->{custom}->request_api(endpoint => '/api/storage/shelves?fields=*'); + $self->{shelves} = $self->{custom}->request_api(endpoint => '/api/storage/shelves?fields=name,state,serial_number,bay,frus'); } sub save_custom { @@ -96,7 +96,7 @@ Check hardware. =item B<--component> Which component to check (default: '.*'). -Can be: 'bay', 'disk', 'fru', 'shelf'. +Can be: C, C, C, C. =item B<--filter> @@ -110,7 +110,7 @@ Define the expected status if no components are found (default: critical). =item B<--threshold-overload> Use this option to override the status returned by the plugin when the status label matches a regular expression (syntax: section,[instance,]status,regexp). -Example: --threshold-overload='fru,OK,error' +Example: C<--threshold-overload='fru,OK,error'> =back diff --git a/src/storage/netapp/ontap/restapi/mode/listvolumes.pm b/src/storage/netapp/ontap/restapi/mode/listvolumes.pm index 65ccc3ce3..2462f0577 100644 --- a/src/storage/netapp/ontap/restapi/mode/listvolumes.pm +++ b/src/storage/netapp/ontap/restapi/mode/listvolumes.pm @@ -44,7 +44,7 @@ sub check_options { sub manage_selection { my ($self, %options) = @_; - return $options{custom}->request_api(endpoint => '/api/storage/volumes?fields=*'); + return $options{custom}->request_api(endpoint => '/api/storage/volumes?fields=svm,state,name'); } sub run { diff --git a/src/storage/netapp/ontap/restapi/mode/luns.pm b/src/storage/netapp/ontap/restapi/mode/luns.pm index a347305b2..1e8158c30 100644 --- a/src/storage/netapp/ontap/restapi/mode/luns.pm +++ b/src/storage/netapp/ontap/restapi/mode/luns.pm @@ -75,7 +75,7 @@ sub new { sub manage_selection { my ($self, %options) = @_; - my $luns = $options{custom}->request_api(endpoint => '/api/storage/luns?fields=*'); + my $luns = $options{custom}->request_api(endpoint => '/api/storage/luns?fields=name,status'); $self->{luns} = {}; foreach (@{$luns->{records}}) { diff --git a/src/storage/netapp/ontap/restapi/mode/quotas.pm b/src/storage/netapp/ontap/restapi/mode/quotas.pm index c64f4737d..9560680f0 100644 --- a/src/storage/netapp/ontap/restapi/mode/quotas.pm +++ b/src/storage/netapp/ontap/restapi/mode/quotas.pm @@ -260,7 +260,7 @@ sub new { sub manage_selection { my ($self, %options) = @_; - my $quotas = $options{custom}->request_api(endpoint => '/api/storage/quota/reports?fields=*'); + my $quotas = $options{custom}->request_api(endpoint => '/api/storage/quota/reports?fields=index,qtree,volume,svm,space'); $self->{duplicated} = {}; @@ -318,7 +318,7 @@ Filter by index (identified entry in the /etc/quotas) (can be a regexp). =item B<--filter-vserver> -Filter by vserver name (can be a regexp). +Filter by Vserver name (can be a regexp). =item B<--filter-volume> @@ -326,7 +326,7 @@ Filter by volume name (can be a regexp). =item B<--filter-qtree> -Filter by qtree name (can be a regexp). +Filter by Qtree name (can be a regexp). =item B<--warning-*> B<--critical-*> diff --git a/src/storage/netapp/ontap/restapi/mode/snapmirrors.pm b/src/storage/netapp/ontap/restapi/mode/snapmirrors.pm index ea62b31ae..db1ce4400 100644 --- a/src/storage/netapp/ontap/restapi/mode/snapmirrors.pm +++ b/src/storage/netapp/ontap/restapi/mode/snapmirrors.pm @@ -76,7 +76,7 @@ sub new { sub manage_selection { my ($self, %options) = @_; - my $snapmirrors = $options{custom}->request_api(endpoint => '/api/snapmirror/relationships?fields=*'); + my $snapmirrors = $options{custom}->request_api(endpoint => '/api/snapmirror/relationships?fields=source,destination,healthy,state,transfer'); $self->{snapmirrors} = {}; foreach (@{$snapmirrors->{records}}) { @@ -89,7 +89,7 @@ sub manage_selection { $self->{snapmirrors}->{$name} = { display => $name, - healthy => $_->{healthy} =~ /true|1/i ? 'true' : 'false', + healthy => (defined($_->{healthy}) && $_->{healthy} =~ /true|1/i) ? 'true' : 'false', state => $_->{state}, transfer_state => defined($_->{transfer}->{state}) ? $_->{transfer}->{state} : 'n/a' }; @@ -107,13 +107,13 @@ __END__ =head1 MODE -Check snapmirrors. +Check SnapMirrors. =over 8 =item B<--filter-name> -Filter snapmirror name (can be a regexp). +Filter SnapMirror name (can be a regexp). =item B<--unknown-status> diff --git a/src/storage/netapp/ontap/restapi/mode/volumes.pm b/src/storage/netapp/ontap/restapi/mode/volumes.pm index d3d4719c2..ef4fc882c 100644 --- a/src/storage/netapp/ontap/restapi/mode/volumes.pm +++ b/src/storage/netapp/ontap/restapi/mode/volumes.pm @@ -46,6 +46,20 @@ sub custom_usage_output { ); } +sub custom_logical_usage_output { + my ($self, %options) = @_; + + my ($total_size_value, $total_size_unit) = $self->{perfdata}->change_bytes(value => $self->{result_values}->{total_logical_space}); + my ($total_used_value, $total_used_unit) = $self->{perfdata}->change_bytes(value => $self->{result_values}->{logical_used_space}); + my ($total_free_value, $total_free_unit) = $self->{perfdata}->change_bytes(value => $self->{result_values}->{logical_free_space}); + return sprintf( + 'logical space usage total: %s used: %s (%.2f%%) free: %s (%.2f%%)', + $total_size_value . " " . $total_size_unit, + $total_used_value . " " . $total_used_unit, $self->{result_values}->{logical_prct_used_space}, + $total_free_value . " " . $total_free_unit, $self->{result_values}->{logical_prct_free_space} + ); +} + sub prefix_volume_output { my ($self, %options) = @_; @@ -94,6 +108,33 @@ sub set_counters { ] } }, + { label => 'logical-usage', nlabel => 'volume.logicalspace.usage.bytes', set => { + key_values => [ { name => 'logical_used_space' }, { name => 'logical_free_space' }, { name => 'logical_prct_used_space' }, { name => 'logical_prct_free_space' }, { name => 'total_logical_space' }, { name => 'display' }, ], + closure_custom_output => $self->can('custom_logical_usage_output'), + perfdatas => [ + { template => '%d', min => 0, max => 'total_logical_space', + unit => 'B', cast_int => 1, label_extra_instance => 1 } + ] + } + }, + { label => 'logical-usage-free', nlabel => 'volume.logicalspace.free.bytes', display_ok => 0, set => { + key_values => [ { name => 'logical_free_space' }, { name => 'logical_used_space' }, { name => 'logical_prct_used_space' }, { name => 'logical_prct_free_space' }, { name => 'total_logical_space' }, { name => 'display' }, ], + closure_custom_output => $self->can('custom_logical_usage_output'), + perfdatas => [ + { template => '%d', min => 0, max => 'total_logical_space', + unit => 'B', cast_int => 1, label_extra_instance => 1 } + ] + } + }, + { label => 'logical-usage-prct', nlabel => 'volume.logicalspace.usage.percentage', display_ok => 0, set => { + key_values => [ { name => 'logical_prct_used_space' }, { name => 'logical_used_space' }, { name => 'logical_free_space' }, { name => 'logical_prct_free_space' }, { name => 'total_logical_space' }, { name => 'display' }, ], + closure_custom_output => $self->can('custom_logical_usage_output'), + perfdatas => [ + { template => '%.2f', min => 0, max => 100, + unit => '%', label_extra_instance => 1 } + ] + } + }, { label => 'read', nlabel => 'volume.io.read.usage.bytespersecond', display_ok => 0, set => { key_values => [ { name => 'read' } ], output_template => 'read: %s %s/s', @@ -203,6 +244,7 @@ sub new { bless $self, $class; $options{options}->add_options(arguments => { + 'filter-volume-name:s' => { name => 'filter_volume_name' }, 'filter-name:s' => { name => 'filter_name' }, 'filter-vserver-name:s' => { name => 'filter_vserver_name' } }); @@ -213,7 +255,13 @@ sub new { sub manage_selection { my ($self, %options) = @_; - my $volumes = $options{custom}->request_api(endpoint => '/api/storage/volumes?fields=*'); + my $endpoint = '/api/storage/volumes?fields=svm,name,space,metric'; + + if (defined($self->{option_results}->{filter_volume_name}) && $self->{option_results}->{filter_volume_name} ne '' ) { + $endpoint .= '&name=' . $self->{option_results}->{filter_volume_name} + } + + my $volumes = $options{custom}->request_api(endpoint => $endpoint); $self->{volumes} = {}; foreach (@{$volumes->{records}}) { @@ -249,11 +297,21 @@ sub manage_selection { write_iops => $_->{metric}->{iops}->{write}, other_iops => $_->{metric}->{iops}->{other}, total_iops => $_->{metric}->{iops}->{total}, - read_latency => $_->{metric}->{latency}->{read} / 1000, - write_latency => $_->{metric}->{latency}->{write} / 1000, - other_latency => $_->{metric}->{latency}->{other} / 1000, - total_latency => $_->{metric}->{latency}->{total} / 1000 + read_latency => (defined($_->{metric}->{latency}->{read})) ? ($_->{metric}->{latency}->{read} / 1000) : undef, + write_latency => (defined($_->{metric}->{latency}->{write})) ? ($_->{metric}->{latency}->{write} / 1000) : undef, + other_latency => (defined($_->{metric}->{latency}->{other})) ? ($_->{metric}->{latency}->{other} / 1000) : undef, + total_latency => (defined($_->{metric}->{latency}->{total})) ? ($_->{metric}->{latency}->{total} / 1000) : undef, }; + + if (defined($_->{space}->{logical_space})) { + $self->{volumes}->{$name}->{total_logical_space} = $_->{space}->{logical_space}->{used} + $_->{space}->{logical_space}->{available}; + $self->{volumes}->{$name}->{logical_used_space} = $_->{space}->{logical_space}->{used}; + $self->{volumes}->{$name}->{logical_free_space} = $_->{space}->{logical_space}->{available}; + $self->{volumes}->{$name}->{logical_prct_used_space} = $_->{space}->{logical_space}->{used_percent}; + $self->{volumes}->{$name}->{logical_prct_free_space} = 100 - $_->{space}->{logical_space}->{used_percent}; + } + + } if (scalar(keys %{$self->{volumes}}) <= 0) { @@ -275,15 +333,20 @@ Check volumes. =item B<--filter-counters> Only display some counters (regexp can be used). -Example: --filter-counters='^usage$' +Example: C<--filter-counters='^usage$'>. + +=item B<--filter-volume-name> + +Filter the API request by volumes name (* can be used, volumes name are separated by |). Required if you wan to retrieve +logical space metrics. =item B<--filter-name> -Filter volumes by volume name (can be a regexp). +Filter the API request result by volume name (can be a regexp). =item B<--filter-vserver-name> -Filter volumes by vserver name (can be a regexp). +Filter volumes by Vserver name (can be a regexp). =item B<--unknown-status> @@ -293,21 +356,22 @@ You can use the following variables: %{state}, %{display} =item B<--warning-status> Define the conditions to match for the status to be WARNING. -You can use the following variables: %{state}, %{display} +You can use the following variables: %{state}, %{display}. =item B<--critical-status> Define the conditions to match for the status to be CRITICAL (default: '%{state} !~ /online/i'). -You can use the following variables: %{state}, %{display} +You can use the following variables: %{state}, %{display}. =item B<--warning-*> B<--critical-*> Thresholds. -Can be: 'usage' (B), 'usage-free' (B), 'usage-prct' (%), -'read' (B/s), 'read-iops', 'write' (B/s), 'write-iops', -'read-latency' (ms), 'write-latency' (ms), 'total-latency' (ms), -'other-latency' (ms), 'other' (B/s), 'total' (B/s), -'other-iops', 'total-iops'. +Can be: usage' (B), usage-free (B), usage-prct (%), +logical-usage (B), logical-usage-free (B), logical-usage-prct (%), +read (B/s), read-iops, write (B/s), write-iops, +read-latency (ms), write-latency (ms), total-latency (ms), +other-latency (ms), other (B/s), total (B/s), +other-iops, total-iops. =back diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 000000000..bb7e28886 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,67 @@ +# centreon-plugins Automated tests + +## Robot tests + +In this project robot is used to order the integration tests. + +### install snmpsim + +See docker image in ./github/docker/testing/ to find the right package to install and the method to install it. +Once snmpsim is installed, you need to create the snmp user : + +````bash +useradd snmp +mkdir -p /var/lib/snmp/cert_indexes/ +chown snmp:snmp -R /var/lib/snmp/cert_indexes/ +```` + +to launch snmpsim use this from the root of the project (one level above this file) : +```bash +sudo snmpsim-command-responder --logging-method=null --agent-udpv4-endpoint=127.0.0.1:2024 --process-user=snmp --process-group=snmp --data-dir='./tests' & +# to test it : snmpwalk -v2c -c hardware/server/lenovo/xcc/snmp/system-health-ok 127.0.0.1:2024 +``` + +test should be run with the "robot" binary, indicating the path to the test file to run. +robot consider every file with .robot extension and try to execute every test case in it. + +```bash +robot tests/ +``` + +you can filter the tests run by specifying -e to exclude and -i to include a specific tag before the file path. + + +## Anonymize tests + +As most snmpwalk are provided by users, a script allow to anonymize the data and remove oid not used. +the option `--no-anonymization` allow to not anonymize the data and only remove oid not used. + +```bash +perl ./tests/scripts/slim_walk.pl --snmpwalk-path=tests/hardware/client.snmpwalk > smaller-file.snmpwalk +``` + + +## unit tests + +In this project perl test::v0 is used to run unit tests. + +## test coverage +To check your test coverage you can use Deve::Cover +when launching any type of test, prepend this to your command : + +```bash +PERL5OPT=-MDevel::Cover +``` + +for exemple for robot : + +```bash +PERL5OPT=-MDevel::Cover robot tests/ +``` + +It will create a cover_db/ folder to store all data, you can use the `cover` to generate a html report. +```bash +cover +``` + +Then open the coverage.html file in the cover_db/ folder to navigate your code with coverage. diff --git a/tests/database/informix/snmp/list-instances.robot b/tests/database/informix/snmp/list-instances.robot new file mode 100644 index 000000000..324c01505 --- /dev/null +++ b/tests/database/informix/snmp/list-instances.robot @@ -0,0 +1,28 @@ +*** Settings *** +Documentation List informix instances. + +Resource ${CURDIR}${/}..${/}..${/}..${/}resources/import.resource + +Test Timeout 120s + +*** Variables *** +${CMD} ${CENTREON_PLUGINS} --plugin=database::informix::snmp::plugin + +*** Test Cases *** +list-instances ${tc} + [Tags] database informix + ${command} Catenate + ... ${CMD} + ... --mode=list-instances + ... --hostname=${HOSTNAME} + ... --snmp-version=${SNMPVERSION} + ... --snmp-port=${SNMPPORT} + ... --snmp-community=database/informix/snmp/slim_informix-log + ... --snmp-timeout=1 + ... ${extra_options} + + Ctn Run Command And Check Result As Strings ${command} ${expected_result} + + Examples: tc extra_options expected_result -- + ... 1 --verbose List instances: [instance = default] + ... 2 --filter-instance='instance' List instances: [instance = default] \ No newline at end of file diff --git a/tests/database/informix/snmp/logfile-usage.robot b/tests/database/informix/snmp/logfile-usage.robot new file mode 100644 index 000000000..46d8faa01 --- /dev/null +++ b/tests/database/informix/snmp/logfile-usage.robot @@ -0,0 +1,30 @@ +*** Settings *** +Documentation Check log files usage. + +Resource ${CURDIR}${/}..${/}..${/}..${/}resources/import.resource + +Test Timeout 120s + +*** Variables *** +${CMD} ${CENTREON_PLUGINS} --plugin=database::informix::snmp::plugin + +*** Test Cases *** +logfile-usage ${tc} + [Tags] database informix + ${command} Catenate + ... ${CMD} + ... --mode=logfile-usage + ... --hostname=${HOSTNAME} + ... --snmp-version=${SNMPVERSION} + ... --snmp-port=${SNMPPORT} + ... --snmp-community=database/informix/snmp/slim_informix-log + ... --snmp-timeout=1 + ... ${extra_options} + + Ctn Run Command And Check Result As Strings ${command} ${expected_result} + + Examples: tc extra_options expected_result -- + ... 1 --verbose OK: All dbspace log files usage are ok | 'used_default.linies'=0.00%;;;0;100 'used_default.logical_log'=0.73%;;;0;100 'used_default.rootdbs'=0.00%;;;0;100 Dbspace 'default.linies' Log Files Used: 0.00% Dbspace 'default.logical_log' Log Files Used: 0.73% Dbspace 'default.rootdbs' Log Files Used: 0.00% + ... 2 --filter-name='default.linies' OK: Dbspace 'default.linies' Log Files Used: 0.00% | 'used'=0.00%;;;0;100 + ... 3 --warning-usage=80:90 WARNING: Dbspace 'default.linies' Log Files Used: 0.00% - Dbspace 'default.logical_log' Log Files Used: 0.73% - Dbspace 'default.rootdbs' Log Files Used: 0.00% | 'used_default.linies'=0.00%;80:90;;0;100 'used_default.logical_log'=0.73%;80:90;;0;100 'used_default.rootdbs'=0.00%;80:90;;0;100 + ... 4 --critical-usage=80:90 CRITICAL: Dbspace 'default.linies' Log Files Used: 0.00% - Dbspace 'default.logical_log' Log Files Used: 0.73% - Dbspace 'default.rootdbs' Log Files Used: 0.00% | 'used_default.linies'=0.00%;;80:90;0;100 'used_default.logical_log'=0.73%;;80:90;0;100 'used_default.rootdbs'=0.00%;;80:90;0;100 \ No newline at end of file diff --git a/tests/database/informix/snmp/slim_informix-log.snmpwalk b/tests/database/informix/snmp/slim_informix-log.snmpwalk new file mode 100644 index 000000000..3047a06b5 --- /dev/null +++ b/tests/database/informix/snmp/slim_informix-log.snmpwalk @@ -0,0 +1,345 @@ +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.1 = INTEGER: 364434 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.2 = INTEGER: 364435 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.3 = INTEGER: 364436 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.4 = INTEGER: 364437 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.5 = INTEGER: 364438 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.6 = INTEGER: 364370 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.7 = INTEGER: 364371 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.8 = INTEGER: 364372 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.9 = INTEGER: 364373 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.10 = INTEGER: 364374 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.11 = INTEGER: 364375 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.12 = INTEGER: 364376 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.13 = INTEGER: 364377 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.14 = INTEGER: 364378 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.15 = INTEGER: 364379 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.16 = INTEGER: 364380 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.17 = INTEGER: 364381 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.18 = INTEGER: 364382 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.19 = INTEGER: 364383 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.20 = INTEGER: 364384 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.21 = INTEGER: 364385 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.22 = INTEGER: 364386 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.23 = INTEGER: 364387 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.24 = INTEGER: 364388 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.25 = INTEGER: 364389 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.26 = INTEGER: 364390 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.27 = INTEGER: 364391 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.28 = INTEGER: 364392 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.29 = INTEGER: 364393 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.30 = INTEGER: 364394 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.31 = INTEGER: 364395 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.32 = INTEGER: 364396 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.33 = INTEGER: 364397 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.34 = INTEGER: 364398 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.35 = INTEGER: 364399 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.36 = INTEGER: 364400 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.37 = INTEGER: 364401 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.38 = INTEGER: 364402 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.39 = INTEGER: 364403 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.40 = INTEGER: 364404 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.41 = INTEGER: 364405 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.42 = INTEGER: 364406 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.43 = INTEGER: 364407 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.44 = INTEGER: 364408 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.45 = INTEGER: 364409 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.46 = INTEGER: 364410 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.47 = INTEGER: 364411 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.48 = INTEGER: 364412 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.49 = INTEGER: 364413 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.50 = INTEGER: 364414 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.51 = INTEGER: 364415 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.52 = INTEGER: 364416 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.53 = INTEGER: 364417 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.54 = INTEGER: 364418 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.55 = INTEGER: 364419 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.56 = INTEGER: 364420 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.57 = INTEGER: 364421 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.58 = INTEGER: 364422 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.59 = INTEGER: 364423 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.60 = INTEGER: 364424 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.61 = INTEGER: 364425 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.62 = INTEGER: 364426 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.63 = INTEGER: 364427 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.64 = INTEGER: 364428 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.65 = INTEGER: 364429 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.66 = INTEGER: 364430 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.67 = INTEGER: 364431 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.68 = INTEGER: 364432 +.1.3.6.1.4.1.893.1.1.1.8.1.2.893000000.69 = INTEGER: 364433 +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.1 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.2 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.3 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.4 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.5 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.6 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.7 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.8 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.9 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.10 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.11 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.12 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.13 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.14 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.15 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.16 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.17 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.18 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.19 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.20 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.21 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.22 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.23 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.24 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.25 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.26 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.27 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.28 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.29 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.30 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.31 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.32 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.33 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.34 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.35 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.36 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.37 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.38 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.39 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.40 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.41 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.42 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.43 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.44 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.45 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.46 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.47 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.48 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.49 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.50 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.51 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.52 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.53 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.54 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.55 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.56 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.57 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.58 = STRING: "rootdbs" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.59 = STRING: "linies" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.60 = STRING: "linies" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.61 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.62 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.63 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.64 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.65 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.66 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.67 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.68 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.3.893000000.69 = STRING: "logical_log" +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.1 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.2 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.3 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.4 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.5 = INTEGER: 3 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.6 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.7 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.8 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.9 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.10 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.11 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.12 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.13 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.14 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.15 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.16 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.17 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.18 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.19 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.20 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.21 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.22 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.23 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.24 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.25 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.26 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.27 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.28 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.29 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.30 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.31 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.32 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.33 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.34 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.35 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.36 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.37 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.38 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.39 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.40 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.41 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.42 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.43 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.44 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.45 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.46 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.47 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.48 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.49 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.50 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.51 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.52 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.53 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.54 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.55 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.56 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.57 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.58 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.59 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.60 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.61 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.62 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.63 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.64 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.65 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.66 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.67 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.68 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.4.893000000.69 = INTEGER: 5 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.1 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.2 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.3 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.4 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.5 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.6 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.7 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.8 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.9 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.10 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.11 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.12 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.13 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.14 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.15 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.16 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.17 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.18 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.19 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.20 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.21 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.22 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.23 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.24 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.25 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.26 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.27 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.28 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.29 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.30 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.31 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.32 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.33 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.34 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.35 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.36 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.37 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.38 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.39 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.40 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.41 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.42 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.43 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.44 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.45 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.46 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.47 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.48 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.49 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.50 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.51 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.52 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.53 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.54 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.55 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.56 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.57 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.58 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.59 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.60 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.61 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.62 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.63 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.64 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.65 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.66 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.67 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.68 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.7.893000000.69 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.1 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.2 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.3 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.4 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.5 = INTEGER: 12330 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.6 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.7 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.8 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.9 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.10 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.11 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.12 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.13 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.14 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.15 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.16 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.17 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.18 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.19 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.20 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.21 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.22 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.23 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.24 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.25 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.26 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.27 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.28 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.29 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.30 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.31 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.32 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.33 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.34 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.35 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.36 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.37 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.38 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.39 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.40 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.41 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.42 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.43 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.44 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.45 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.46 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.47 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.48 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.49 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.50 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.51 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.52 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.53 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.54 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.55 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.56 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.57 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.58 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.59 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.60 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.61 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.62 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.63 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.64 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.65 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.66 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.67 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.68 = INTEGER: 25600 +.1.3.6.1.4.1.893.1.1.1.8.1.8.893000000.69 = INTEGER: 25600 diff --git a/tests/hardware/server/lenovo/xcc/snmp/system-health-critical.snmpwalk b/tests/hardware/server/lenovo/xcc/snmp/system-health-critical.snmpwalk new file mode 100644 index 000000000..a4e419cfd --- /dev/null +++ b/tests/hardware/server/lenovo/xcc/snmp/system-health-critical.snmpwalk @@ -0,0 +1,419 @@ +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.2 = INTEGER: 2 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.3 = INTEGER: 3 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.4 = INTEGER: 4 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.5 = INTEGER: 5 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.6 = INTEGER: 6 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.7 = INTEGER: 7 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.8 = INTEGER: 8 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.9 = INTEGER: 9 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.10 = INTEGER: 10 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.1 = STRING: "Ambient Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.2 = STRING: "CPU 1 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.3 = STRING: "DIMM 2 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.4 = STRING: "DIMM 4 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.5 = STRING: "DIMM 5 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.6 = STRING: "DIMM 6 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.7 = STRING: "DIMM 7 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.8 = STRING: "DIMM 8 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.9 = STRING: "DIMM 9 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.10 = STRING: "DIMM 11 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.1 = STRING: "18" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.2 = STRING: "30" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.3 = STRING: "21" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.4 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.5 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.6 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.7 = STRING: "21" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.8 = STRING: "21" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.9 = STRING: "21" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.10 = STRING: "21" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.1 = STRING: "19" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.2 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.3 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.4 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.5 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.6 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.7 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.8 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.9 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.10 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.1 = STRING: "50" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.2 = STRING: "102" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.3 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.4 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.5 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.6 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.7 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.8 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.9 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.10 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.1 = STRING: "47" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.2 = STRING: "101" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.3 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.4 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.5 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.6 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.7 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.8 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.9 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.10 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.1 = STRING: "43" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.2 = STRING: "100" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.3 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.4 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.5 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.6 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.7 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.8 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.9 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.10 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.5 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.6 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.7 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.8 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.9 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.10 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.5 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.6 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.7 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.8 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.9 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.10 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.5 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.6 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.7 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.8 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.9 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.10 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.1 = STRING: "critical" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.2 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.3 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.4 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.5 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.6 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.7 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.8 = STRING: "critical" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.9 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.10 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.2.2.1.1.2 = INTEGER: 2 +.1.3.6.1.4.1.19046.11.1.1.2.2.1.1.3 = INTEGER: 3 +.1.3.6.1.4.1.19046.11.1.1.2.2.1.1.4 = INTEGER: 4 +.1.3.6.1.4.1.19046.11.1.1.2.2.1.2.1 = STRING: "CMOS Battery" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.2.2 = STRING: "SysBrd 12V" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.2.3 = STRING: "SysBrd 5V" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.2.4 = STRING: "SysBrd 3.3V" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.3.1 = STRING: "3.1070" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.3.2 = STRING: "12.040" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.3.3 = STRING: "4.9374" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.3.4 = STRING: "3.3015" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.4.1 = STRING: "3.0160" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.4.2 = STRING: "12.096" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.4.3 = STRING: "5.0544" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.4.4 = STRING: "3.3015" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.5.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.5.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.5.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.5.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.6.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.6.2 = STRING: "13.216" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.6.3 = STRING: "5.4990" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.6.4 = STRING: "3.6270" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.7.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.7.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.7.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.7.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.8.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.8.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.8.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.8.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.9.1 = STRING: "2.2490" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.9.2 = STRING: "10.808" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.9.3 = STRING: "4.4928" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.9.4 = STRING: "2.9760" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.10.1 = STRING: "2.3920" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.10.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.10.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.10.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.11.1 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.11.2 = STRING: "critical" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.11.3 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.11.4 = STRING: "critical" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.2 = INTEGER: 2 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.3 = INTEGER: 3 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.4 = INTEGER: 4 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.5 = INTEGER: 5 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.6 = INTEGER: 6 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.7 = INTEGER: 7 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.8 = INTEGER: 8 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.9 = INTEGER: 9 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.10 = INTEGER: 10 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.11 = INTEGER: 11 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.12 = INTEGER: 12 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.1 = STRING: "Fan 1 Front Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.2 = STRING: "Fan 2 Front Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.3 = STRING: "Fan 3 Front Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.4 = STRING: "Fan 4 Front Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.5 = STRING: "Fan 5 Front Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.6 = STRING: "Fan 6 Front Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.7 = STRING: "Fan 1 Rear Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.8 = STRING: "Fan 2 Rear Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.9 = STRING: "Fan 3 Rear Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.10 = STRING: "Fan 4 Rear Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.11 = STRING: "Fan 5 Rear Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.12 = STRING: "Fan 6 Rear Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.1 = STRING: " 26% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.2 = STRING: " 26% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.3 = STRING: " 26% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.4 = STRING: " 26% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.5 = STRING: " 26% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.6 = STRING: " 26% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.7 = STRING: " 27% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.8 = STRING: " 27% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.9 = STRING: " 27% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.10 = STRING: " 27% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.11 = STRING: " 27% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.12 = STRING: " 27% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.1 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.2 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.3 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.4 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.5 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.6 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.7 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.8 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.9 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.10 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.11 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.12 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.1 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.2 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.3 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.4 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.5 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.6 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.7 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.8 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.9 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.10 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.11 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.12 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.1 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.2 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.3 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.4 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.5 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.6 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.7 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.8 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.9 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.10 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.11 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.12 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.1 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.2 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.3 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.4 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.5 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.6 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.7 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.8 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.9 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.10 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.11 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.12 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.1 = Gauge32: 984 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.2 = Gauge32: 984 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.3 = Gauge32: 984 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.4 = Gauge32: 984 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.5 = Gauge32: 984 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.6 = Gauge32: 984 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.7 = Gauge32: 975 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.8 = Gauge32: 975 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.9 = Gauge32: 975 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.10 = Gauge32: 975 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.11 = Gauge32: 975 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.12 = Gauge32: 975 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.1 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.2 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.3 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.4 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.5 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.6 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.7 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.8 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.9 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.10 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.11 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.12 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.1 = STRING: "critical" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.2 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.3 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.4 = STRING: "critical" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.5 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.6 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.7 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.8 = STRING: "critical" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.9 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.10 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.11 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.12 = STRING: "critical" +.1.3.6.1.4.1.19046.11.1.1.4.2.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.1.2 = INTEGER: 2 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.1.3 = INTEGER: 3 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.1.4 = INTEGER: 4 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.2.1 = STRING: "Error" +.1.3.6.1.4.1.19046.11.1.1.4.2.1.2.2 = STRING: "Error" +.1.3.6.1.4.1.19046.11.1.1.4.2.1.2.3 = STRING: "Error" +.1.3.6.1.4.1.19046.11.1.1.4.2.1.2.4 = STRING: "Warning" +.1.3.6.1.4.1.19046.11.1.1.4.2.1.3.1 = STRING: Anonymized 144 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.3.2 = STRING: Anonymized 149 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.3.3 = STRING: Anonymized 127 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.3.4 = STRING: Anonymized 130 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.2.1 = STRING: Anonymized 155 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.3.1 = INTEGER: 4150 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.4.1 = STRING: Anonymized 167 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.5.1 = STRING: Anonymized 030 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.6.1 = STRING: Anonymized 184 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.7.1 = INTEGER: 24 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.8.1 = INTEGER: 48 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.9.1 = INTEGER: 900 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.10.1 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.11.1 = STRING: Anonymized 227 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.12.1 = STRING: Anonymized 032 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.2 = INTEGER: 2 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.3 = INTEGER: 3 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.4 = INTEGER: 4 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.5 = INTEGER: 5 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.6 = INTEGER: 6 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.7 = INTEGER: 7 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.8 = INTEGER: 8 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.1 = STRING: "DIMM_2" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.2 = STRING: "DIMM_4" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.3 = STRING: "DIMM_5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.4 = STRING: "DIMM_6" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.5 = STRING: "DIMM_7" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.6 = STRING: "DIMM_8" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.7 = STRING: "DIMM_9" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.8 = STRING: "DIMM_11" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.1 = STRING: Anonymized 118 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.2 = STRING: Anonymized 221 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.3 = STRING: Anonymized 187 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.4 = STRING: Anonymized 012 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.5 = STRING: Anonymized 101 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.6 = STRING: Anonymized 138 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.7 = STRING: Anonymized 196 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.8 = STRING: Anonymized 033 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.1 = STRING: Anonymized 125 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.2 = STRING: Anonymized 078 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.3 = STRING: Anonymized 110 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.4 = STRING: Anonymized 010 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.5 = STRING: Anonymized 142 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.6 = STRING: Anonymized 019 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.7 = STRING: Anonymized 075 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.8 = STRING: Anonymized 028 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.1 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.2 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.3 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.4 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.5 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.6 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.7 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.8 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.1 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.2 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.3 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.4 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.5 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.6 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.7 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.8 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.1 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.2 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.3 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.4 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.5 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.6 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.7 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.8 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.1 = STRING: "critical" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.2 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.3 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.4 = STRING: "critical" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.5 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.6 = STRING: "critical" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.7 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.8 = STRING: "critical" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.1 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.2 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.3 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.4 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.5 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.6 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.7 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.8 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.1 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.2 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.3 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.4 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.5 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.6 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.7 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.8 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.1 = STRING: Anonymized 210 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.2 = STRING: Anonymized 006 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.3 = STRING: Anonymized 102 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.4 = STRING: Anonymized 100 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.5 = STRING: Anonymized 107 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.6 = STRING: Anonymized 084 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.7 = STRING: Anonymized 145 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.8 = STRING: Anonymized 032 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.1 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.2 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.3 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.4 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.5 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.6 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.7 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.8 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.1.2 = INTEGER: 2 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.2.1 = STRING: Anonymized 250 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.2.2 = STRING: Anonymized 193 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.3.1 = STRING: Anonymized 185 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.3.2 = STRING: Anonymized 044 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.4.1 = STRING: Anonymized 121 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.4.2 = STRING: Anonymized 154 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.5.1 = STRING: Anonymized 172 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.5.2 = STRING: Anonymized 226 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.6.1 = STRING: Anonymized 022 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.6.2 = STRING: Anonymized 076 +.1.3.6.1.4.1.19046.11.1.1.12.2.1.1.40 = INTEGER: 40 +.1.3.6.1.4.1.19046.11.1.1.12.2.1.1.41 = INTEGER: 41 +.1.3.6.1.4.1.19046.11.1.1.12.2.1.2.40 = STRING: Anonymized 016 +.1.3.6.1.4.1.19046.11.1.1.12.2.1.2.41 = STRING: Anonymized 104 +.1.3.6.1.4.1.19046.11.1.1.12.2.1.3.40 = STRING: "critical" +.1.3.6.1.4.1.19046.11.1.1.12.2.1.3.41 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.2.1 = STRING: Anonymized 215 +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.3.1 = STRING: Anonymized 032 +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.4.1 = STRING: Optimal +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.5.1 = STRING: Anonymized 069 +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.6.1 = STRING: Anonymized 081 +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.7.1 = STRING: Anonymized 100 diff --git a/tests/hardware/server/lenovo/xcc/snmp/system-health-nonRecoverable.snmpwalk b/tests/hardware/server/lenovo/xcc/snmp/system-health-nonRecoverable.snmpwalk new file mode 100644 index 000000000..367c5bdfb --- /dev/null +++ b/tests/hardware/server/lenovo/xcc/snmp/system-health-nonRecoverable.snmpwalk @@ -0,0 +1,419 @@ +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.2 = INTEGER: 2 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.3 = INTEGER: 3 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.4 = INTEGER: 4 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.5 = INTEGER: 5 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.6 = INTEGER: 6 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.7 = INTEGER: 7 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.8 = INTEGER: 8 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.9 = INTEGER: 9 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.10 = INTEGER: 10 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.1 = STRING: "Ambient Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.2 = STRING: "CPU 1 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.3 = STRING: "DIMM 2 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.4 = STRING: "DIMM 4 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.5 = STRING: "DIMM 5 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.6 = STRING: "DIMM 6 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.7 = STRING: "DIMM 7 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.8 = STRING: "DIMM 8 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.9 = STRING: "DIMM 9 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.10 = STRING: "DIMM 11 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.1 = STRING: "18" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.2 = STRING: "30" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.3 = STRING: "21" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.4 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.5 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.6 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.7 = STRING: "21" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.8 = STRING: "21" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.9 = STRING: "21" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.10 = STRING: "21" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.1 = STRING: "19" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.2 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.3 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.4 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.5 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.6 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.7 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.8 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.9 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.10 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.1 = STRING: "50" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.2 = STRING: "102" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.3 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.4 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.5 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.6 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.7 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.8 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.9 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.10 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.1 = STRING: "47" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.2 = STRING: "101" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.3 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.4 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.5 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.6 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.7 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.8 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.9 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.10 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.1 = STRING: "43" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.2 = STRING: "100" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.3 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.4 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.5 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.6 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.7 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.8 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.9 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.10 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.5 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.6 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.7 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.8 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.9 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.10 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.5 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.6 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.7 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.8 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.9 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.10 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.5 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.6 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.7 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.8 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.9 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.10 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.1 = STRING: "nonRecoverable" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.2 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.3 = STRING: "nonRecoverable" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.4 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.5 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.6 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.7 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.8 = STRING: "nonRecoverable" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.9 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.10 = STRING: "nonRecoverable" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.2.2.1.1.2 = INTEGER: 2 +.1.3.6.1.4.1.19046.11.1.1.2.2.1.1.3 = INTEGER: 3 +.1.3.6.1.4.1.19046.11.1.1.2.2.1.1.4 = INTEGER: 4 +.1.3.6.1.4.1.19046.11.1.1.2.2.1.2.1 = STRING: "CMOS Battery" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.2.2 = STRING: "SysBrd 12V" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.2.3 = STRING: "SysBrd 5V" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.2.4 = STRING: "SysBrd 3.3V" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.3.1 = STRING: "3.1070" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.3.2 = STRING: "12.040" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.3.3 = STRING: "4.9374" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.3.4 = STRING: "3.3015" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.4.1 = STRING: "3.0160" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.4.2 = STRING: "12.096" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.4.3 = STRING: "5.0544" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.4.4 = STRING: "3.3015" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.5.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.5.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.5.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.5.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.6.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.6.2 = STRING: "13.216" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.6.3 = STRING: "5.4990" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.6.4 = STRING: "3.6270" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.7.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.7.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.7.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.7.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.8.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.8.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.8.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.8.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.9.1 = STRING: "2.2490" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.9.2 = STRING: "10.808" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.9.3 = STRING: "4.4928" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.9.4 = STRING: "2.9760" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.10.1 = STRING: "2.3920" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.10.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.10.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.10.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.11.1 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.11.2 = STRING: "nonRecoverable" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.11.3 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.11.4 = STRING: "nonRecoverable" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.2 = INTEGER: 2 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.3 = INTEGER: 3 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.4 = INTEGER: 4 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.5 = INTEGER: 5 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.6 = INTEGER: 6 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.7 = INTEGER: 7 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.8 = INTEGER: 8 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.9 = INTEGER: 9 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.10 = INTEGER: 10 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.11 = INTEGER: 11 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.12 = INTEGER: 12 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.1 = STRING: "Fan 1 Front Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.2 = STRING: "Fan 2 Front Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.3 = STRING: "Fan 3 Front Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.4 = STRING: "Fan 4 Front Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.5 = STRING: "Fan 5 Front Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.6 = STRING: "Fan 6 Front Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.7 = STRING: "Fan 1 Rear Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.8 = STRING: "Fan 2 Rear Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.9 = STRING: "Fan 3 Rear Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.10 = STRING: "Fan 4 Rear Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.11 = STRING: "Fan 5 Rear Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.12 = STRING: "Fan 6 Rear Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.1 = STRING: " 26% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.2 = STRING: " 26% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.3 = STRING: " 26% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.4 = STRING: " 26% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.5 = STRING: " 26% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.6 = STRING: " 26% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.7 = STRING: " 27% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.8 = STRING: " 27% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.9 = STRING: " 27% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.10 = STRING: " 27% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.11 = STRING: " 27% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.12 = STRING: " 27% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.1 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.2 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.3 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.4 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.5 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.6 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.7 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.8 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.9 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.10 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.11 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.12 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.1 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.2 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.3 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.4 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.5 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.6 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.7 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.8 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.9 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.10 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.11 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.12 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.1 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.2 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.3 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.4 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.5 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.6 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.7 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.8 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.9 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.10 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.11 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.12 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.1 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.2 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.3 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.4 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.5 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.6 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.7 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.8 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.9 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.10 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.11 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.12 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.1 = Gauge32: 984 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.2 = Gauge32: 984 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.3 = Gauge32: 984 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.4 = Gauge32: 984 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.5 = Gauge32: 984 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.6 = Gauge32: 984 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.7 = Gauge32: 975 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.8 = Gauge32: 975 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.9 = Gauge32: 975 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.10 = Gauge32: 975 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.11 = Gauge32: 975 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.12 = Gauge32: 975 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.1 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.2 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.3 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.4 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.5 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.6 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.7 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.8 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.9 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.10 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.11 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.12 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.1 = STRING: "nonRecoverable" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.2 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.3 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.4 = STRING: "nonRecoverable" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.5 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.6 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.7 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.8 = STRING: "nonRecoverable" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.9 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.10 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.11 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.12 = STRING: "nonRecoverable" +.1.3.6.1.4.1.19046.11.1.1.4.2.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.1.2 = INTEGER: 2 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.1.3 = INTEGER: 3 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.1.4 = INTEGER: 4 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.2.1 = STRING: "NonRecoverable" +.1.3.6.1.4.1.19046.11.1.1.4.2.1.2.2 = STRING: "NonRecoverable" +.1.3.6.1.4.1.19046.11.1.1.4.2.1.2.3 = STRING: "NonRecoverable" +.1.3.6.1.4.1.19046.11.1.1.4.2.1.2.4 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.4.2.1.3.1 = STRING: Anonymized 144 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.3.2 = STRING: Anonymized 149 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.3.3 = STRING: Anonymized 127 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.3.4 = STRING: Anonymized 130 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.2.1 = STRING: Anonymized 155 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.3.1 = INTEGER: 4150 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.4.1 = STRING: Anonymized 167 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.5.1 = STRING: Anonymized 030 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.6.1 = STRING: Anonymized 184 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.7.1 = INTEGER: 24 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.8.1 = INTEGER: 48 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.9.1 = INTEGER: 900 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.10.1 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.11.1 = STRING: Anonymized 227 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.12.1 = STRING: Anonymized 032 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.2 = INTEGER: 2 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.3 = INTEGER: 3 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.4 = INTEGER: 4 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.5 = INTEGER: 5 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.6 = INTEGER: 6 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.7 = INTEGER: 7 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.8 = INTEGER: 8 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.1 = STRING: "DIMM_2" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.2 = STRING: "DIMM_4" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.3 = STRING: "DIMM_5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.4 = STRING: "DIMM_6" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.5 = STRING: "DIMM_7" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.6 = STRING: "DIMM_8" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.7 = STRING: "DIMM_9" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.8 = STRING: "DIMM_11" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.1 = STRING: Anonymized 118 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.2 = STRING: Anonymized 221 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.3 = STRING: Anonymized 187 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.4 = STRING: Anonymized 012 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.5 = STRING: Anonymized 101 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.6 = STRING: Anonymized 138 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.7 = STRING: Anonymized 196 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.8 = STRING: Anonymized 033 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.1 = STRING: Anonymized 125 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.2 = STRING: Anonymized 078 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.3 = STRING: Anonymized 110 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.4 = STRING: Anonymized 010 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.5 = STRING: Anonymized 142 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.6 = STRING: Anonymized 019 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.7 = STRING: Anonymized 075 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.8 = STRING: Anonymized 028 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.1 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.2 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.3 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.4 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.5 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.6 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.7 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.8 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.1 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.2 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.3 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.4 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.5 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.6 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.7 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.8 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.1 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.2 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.3 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.4 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.5 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.6 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.7 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.8 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.1 = STRING: "nonRecoverable" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.2 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.3 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.4 = STRING: "nonRecoverable" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.5 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.6 = STRING: "nonRecoverable" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.7 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.8 = STRING: "nonRecoverable" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.1 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.2 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.3 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.4 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.5 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.6 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.7 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.8 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.1 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.2 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.3 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.4 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.5 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.6 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.7 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.8 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.1 = STRING: Anonymized 210 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.2 = STRING: Anonymized 006 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.3 = STRING: Anonymized 102 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.4 = STRING: Anonymized 100 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.5 = STRING: Anonymized 107 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.6 = STRING: Anonymized 084 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.7 = STRING: Anonymized 145 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.8 = STRING: Anonymized 032 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.1 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.2 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.3 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.4 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.5 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.6 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.7 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.8 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.1.2 = INTEGER: 2 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.2.1 = STRING: Anonymized 250 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.2.2 = STRING: Anonymized 193 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.3.1 = STRING: Anonymized 185 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.3.2 = STRING: Anonymized 044 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.4.1 = STRING: Anonymized 121 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.4.2 = STRING: Anonymized 154 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.5.1 = STRING: Anonymized 172 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.5.2 = STRING: Anonymized 226 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.6.1 = STRING: Normal +.1.3.6.1.4.1.19046.11.1.1.11.2.1.6.2 = STRING: Normal +.1.3.6.1.4.1.19046.11.1.1.12.2.1.1.40 = INTEGER: 40 +.1.3.6.1.4.1.19046.11.1.1.12.2.1.1.41 = INTEGER: 41 +.1.3.6.1.4.1.19046.11.1.1.12.2.1.2.40 = STRING: Anonymized 016 +.1.3.6.1.4.1.19046.11.1.1.12.2.1.2.41 = STRING: Anonymized 104 +.1.3.6.1.4.1.19046.11.1.1.12.2.1.3.40 = STRING: "nonRecoverable" +.1.3.6.1.4.1.19046.11.1.1.12.2.1.3.41 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.2.1 = STRING: Anonymized 215 +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.3.1 = STRING: Anonymized 032 +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.4.1 = STRING: Optimal +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.5.1 = STRING: Anonymized 069 +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.6.1 = STRING: Anonymized 081 +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.7.1 = STRING: Anonymized 100 diff --git a/tests/hardware/server/lenovo/xcc/snmp/system-health-ok.snmpwalk b/tests/hardware/server/lenovo/xcc/snmp/system-health-ok.snmpwalk new file mode 100644 index 000000000..1c3363950 --- /dev/null +++ b/tests/hardware/server/lenovo/xcc/snmp/system-health-ok.snmpwalk @@ -0,0 +1,419 @@ +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.2 = INTEGER: 2 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.3 = INTEGER: 3 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.4 = INTEGER: 4 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.5 = INTEGER: 5 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.6 = INTEGER: 6 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.7 = INTEGER: 7 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.8 = INTEGER: 8 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.9 = INTEGER: 9 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.1.10 = INTEGER: 10 +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.1 = STRING: "Ambient Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.2 = STRING: "CPU 1 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.3 = STRING: "DIMM 2 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.4 = STRING: "DIMM 4 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.5 = STRING: "DIMM 5 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.6 = STRING: "DIMM 6 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.7 = STRING: "DIMM 7 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.8 = STRING: "DIMM 8 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.9 = STRING: "DIMM 9 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.2.10 = STRING: "DIMM 11 Temp" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.1 = STRING: "18" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.2 = STRING: "30" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.3 = STRING: "21" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.4 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.5 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.6 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.7 = STRING: "21" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.8 = STRING: "21" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.9 = STRING: "21" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.3.10 = STRING: "21" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.1 = STRING: "19" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.2 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.3 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.4 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.5 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.6 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.7 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.8 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.9 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.4.10 = STRING: "22" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.1 = STRING: "50" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.2 = STRING: "102" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.3 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.4 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.5 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.6 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.7 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.8 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.9 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.5.10 = STRING: "91" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.1 = STRING: "47" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.2 = STRING: "101" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.3 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.4 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.5 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.6 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.7 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.8 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.9 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.6.10 = STRING: "87" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.1 = STRING: "43" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.2 = STRING: "100" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.3 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.4 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.5 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.6 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.7 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.8 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.9 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.7.10 = STRING: "85" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.5 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.6 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.7 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.8 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.9 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.8.10 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.5 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.6 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.7 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.8 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.9 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.9.10 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.5 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.6 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.7 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.8 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.9 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.10.10 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.1 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.2 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.3 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.4 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.5 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.6 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.7 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.8 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.9 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.1.2.1.11.10 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.2.2.1.1.2 = INTEGER: 2 +.1.3.6.1.4.1.19046.11.1.1.2.2.1.1.3 = INTEGER: 3 +.1.3.6.1.4.1.19046.11.1.1.2.2.1.1.4 = INTEGER: 4 +.1.3.6.1.4.1.19046.11.1.1.2.2.1.2.1 = STRING: "CMOS Battery" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.2.2 = STRING: "SysBrd 12V" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.2.3 = STRING: "SysBrd 5V" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.2.4 = STRING: "SysBrd 3.3V" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.3.1 = STRING: "3.1070" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.3.2 = STRING: "12.040" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.3.3 = STRING: "4.9374" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.3.4 = STRING: "3.3015" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.4.1 = STRING: "3.0160" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.4.2 = STRING: "12.096" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.4.3 = STRING: "5.0544" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.4.4 = STRING: "3.3015" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.5.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.5.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.5.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.5.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.6.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.6.2 = STRING: "13.216" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.6.3 = STRING: "5.4990" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.6.4 = STRING: "3.6270" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.7.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.7.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.7.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.7.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.8.1 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.8.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.8.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.8.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.9.1 = STRING: "2.2490" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.9.2 = STRING: "10.808" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.9.3 = STRING: "4.4928" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.9.4 = STRING: "2.9760" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.10.1 = STRING: "2.3920" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.10.2 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.10.3 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.10.4 = STRING: "N/A" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.11.1 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.11.2 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.11.3 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.2.2.1.11.4 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.2 = INTEGER: 2 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.3 = INTEGER: 3 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.4 = INTEGER: 4 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.5 = INTEGER: 5 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.6 = INTEGER: 6 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.7 = INTEGER: 7 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.8 = INTEGER: 8 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.9 = INTEGER: 9 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.10 = INTEGER: 10 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.11 = INTEGER: 11 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.1.12 = INTEGER: 12 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.1 = STRING: "Fan 1 Front Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.2 = STRING: "Fan 2 Front Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.3 = STRING: "Fan 3 Front Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.4 = STRING: "Fan 4 Front Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.5 = STRING: "Fan 5 Front Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.6 = STRING: "Fan 6 Front Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.7 = STRING: "Fan 1 Rear Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.8 = STRING: "Fan 2 Rear Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.9 = STRING: "Fan 3 Rear Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.10 = STRING: "Fan 4 Rear Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.11 = STRING: "Fan 5 Rear Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.2.12 = STRING: "Fan 6 Rear Tach" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.1 = STRING: " 26% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.2 = STRING: " 26% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.3 = STRING: " 26% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.4 = STRING: " 26% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.5 = STRING: " 26% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.6 = STRING: " 26% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.7 = STRING: " 27% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.8 = STRING: " 27% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.9 = STRING: " 27% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.10 = STRING: " 27% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.11 = STRING: " 27% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.3.12 = STRING: " 27% of maximum" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.1 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.2 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.3 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.4 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.5 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.6 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.7 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.8 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.9 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.10 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.11 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.4.12 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.1 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.2 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.3 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.4 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.5 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.6 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.7 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.8 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.9 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.10 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.11 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.5.12 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.1 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.2 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.3 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.4 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.5 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.6 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.7 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.8 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.9 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.10 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.11 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.6.12 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.1 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.2 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.3 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.4 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.5 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.6 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.7 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.8 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.9 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.10 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.11 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.7.12 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.1 = Gauge32: 984 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.2 = Gauge32: 984 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.3 = Gauge32: 984 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.4 = Gauge32: 984 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.5 = Gauge32: 984 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.6 = Gauge32: 984 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.7 = Gauge32: 975 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.8 = Gauge32: 975 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.9 = Gauge32: 975 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.10 = Gauge32: 975 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.11 = Gauge32: 975 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.8.12 = Gauge32: 975 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.1 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.2 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.3 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.4 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.5 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.6 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.7 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.8 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.9 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.10 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.11 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.9.12 = Gauge32: 0 +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.1 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.2 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.3 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.4 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.5 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.6 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.7 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.8 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.9 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.10 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.11 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.3.2.1.10.12 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.4.2.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.1.2 = INTEGER: 2 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.1.3 = INTEGER: 3 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.1.4 = INTEGER: 4 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.2.1 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.4.2.1.2.2 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.4.2.1.2.3 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.4.2.1.2.4 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.4.2.1.3.1 = STRING: Anonymized 144 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.3.2 = STRING: Anonymized 149 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.3.3 = STRING: Anonymized 127 +.1.3.6.1.4.1.19046.11.1.1.4.2.1.3.4 = STRING: Anonymized 130 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.2.1 = STRING: Anonymized 155 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.3.1 = INTEGER: 4150 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.4.1 = STRING: Anonymized 167 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.5.1 = STRING: Anonymized 030 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.6.1 = STRING: Anonymized 184 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.7.1 = INTEGER: 24 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.8.1 = INTEGER: 48 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.9.1 = INTEGER: 900 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.10.1 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.20.1.11.1 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.5.20.1.12.1 = STRING: Anonymized 032 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.2 = INTEGER: 2 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.3 = INTEGER: 3 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.4 = INTEGER: 4 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.5 = INTEGER: 5 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.6 = INTEGER: 6 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.7 = INTEGER: 7 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.1.8 = INTEGER: 8 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.1 = STRING: "DIMM_2" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.2 = STRING: "DIMM_4" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.3 = STRING: "DIMM_5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.4 = STRING: "DIMM_6" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.5 = STRING: "DIMM_7" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.6 = STRING: "DIMM_8" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.7 = STRING: "DIMM_9" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.2.8 = STRING: "DIMM_11" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.1 = STRING: Anonymized 118 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.2 = STRING: Anonymized 221 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.3 = STRING: Anonymized 187 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.4 = STRING: Anonymized 012 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.5 = STRING: Anonymized 101 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.6 = STRING: Anonymized 138 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.7 = STRING: Anonymized 196 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.3.8 = STRING: Anonymized 033 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.1 = STRING: Anonymized 125 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.2 = STRING: Anonymized 078 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.3 = STRING: Anonymized 110 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.4 = STRING: Anonymized 010 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.5 = STRING: Anonymized 142 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.6 = STRING: Anonymized 019 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.7 = STRING: Anonymized 075 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.4.8 = STRING: Anonymized 028 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.1 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.2 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.3 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.4 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.5 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.6 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.7 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.5.8 = STRING: "4222" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.1 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.2 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.3 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.4 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.5 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.6 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.7 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.6.8 = STRING: "DDR5" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.1 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.2 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.3 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.4 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.5 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.6 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.7 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.7.8 = INTEGER: 64 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.1 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.2 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.3 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.4 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.5 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.6 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.7 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.8.8 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.1 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.2 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.3 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.4 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.5 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.6 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.7 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.9.8 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.1 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.2 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.3 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.4 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.5 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.6 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.7 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.10.8 = INTEGER: 4800 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.1 = STRING: Anonymized 210 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.2 = STRING: Anonymized 006 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.3 = STRING: Anonymized 102 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.4 = STRING: Anonymized 100 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.5 = STRING: Anonymized 107 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.6 = STRING: Anonymized 084 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.7 = STRING: Anonymized 145 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.11.8 = STRING: Anonymized 032 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.1 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.2 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.3 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.4 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.5 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.6 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.7 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.5.21.1.12.8 = INTEGER: 0 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.1.2 = INTEGER: 2 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.2.1 = STRING: Anonymized 250 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.2.2 = STRING: Anonymized 193 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.3.1 = STRING: Anonymized 185 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.3.2 = STRING: Anonymized 044 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.4.1 = STRING: Anonymized 121 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.4.2 = STRING: Anonymized 154 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.5.1 = STRING: Anonymized 172 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.5.2 = STRING: Anonymized 226 +.1.3.6.1.4.1.19046.11.1.1.11.2.1.6.1 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.11.2.1.6.2 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.12.2.1.1.40 = INTEGER: 40 +.1.3.6.1.4.1.19046.11.1.1.12.2.1.1.41 = INTEGER: 41 +.1.3.6.1.4.1.19046.11.1.1.12.2.1.2.40 = STRING: Anonymized 016 +.1.3.6.1.4.1.19046.11.1.1.12.2.1.2.41 = STRING: Anonymized 104 +.1.3.6.1.4.1.19046.11.1.1.12.2.1.3.40 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.12.2.1.3.41 = STRING: "Normal" +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.2.1 = STRING: Anonymized 215 +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.3.1 = STRING: Anonymized 032 +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.4.1 = STRING: Optimal +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.5.1 = STRING: Anonymized 069 +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.6.1 = STRING: Anonymized 081 +.1.3.6.1.4.1.19046.11.1.1.13.1.7.1.7.1 = STRING: Anonymized 100 diff --git a/tests/hardware/server/lenovo/xcc/snmp/xcc-hardware-snmp.robot b/tests/hardware/server/lenovo/xcc/snmp/xcc-hardware-snmp.robot new file mode 100644 index 000000000..42acf7ee5 --- /dev/null +++ b/tests/hardware/server/lenovo/xcc/snmp/xcc-hardware-snmp.robot @@ -0,0 +1,39 @@ +*** Settings *** +Documentation Hardware lenovo xcc SNMP checks + +Resource ${CURDIR}${/}..${/}..${/}..${/}..${/}..${/}resources/import.resource + +Suite Setup Ctn Generic Suite Setup +Test Timeout 120s + + +*** Variables *** +${CMD} ${CENTREON_PLUGINS} +... --plugin=hardware::server::lenovo::xcc::snmp::plugin +... --mode=hardware +... --hostname=${HOSTNAME} +... --snmp-port=${SNMPPORT} + +*** Test Cases *** +lenovo xcc hardware Alarms ${tc} + [Documentation] Hardware lenovo xcc SNMP + [Tags] hardware lenovo + ${command} Catenate + ... ${CMD} + ... --snmp-community=hardware/server/lenovo/xcc/snmp/${arguments} + ... --component=${component} + + Ctn Run Command And Check Result As Strings ${command} ${expected_result} + + Examples: tc arguments component expected_result -- + ... 1 system-health-critical health CRITICAL: 'Error' health status for 'Anonymized 144' - 'Error' health status for 'Anonymized 149' - 'Error' health status for 'Anonymized 127' - 'Warning' health status for 'Anonymized 130' | 'count_health'=4;;;; + ... 2 system-health-ok health OK: All 4 components are ok [4/4 health]. | 'count_health'=4;;;; + ... 3 system-health-nonRecoverable health CRITICAL: 'NonRecoverable' health status for 'Anonymized 144' - 'NonRecoverable' health status for 'Anonymized 149' - 'NonRecoverable' health status for 'Anonymized 127' | 'count_health'=4;;;; + # check filters, each mode have to implement it, here we test only the health thoroughly and some part of the other modes. + ... 4 system-health-ok --output-ignore-perfdata ${space} OK: All 44 components are ok [1/1 cpu, 2/2 disk, 12/12 fans, 4/4 health, 8/8 memory, 2/2 psu, 1/1 raidvolume, 10/10 temperatures, 4/4 voltages]. + ... 5 system-health-ok --output-ignore-perfdata --filter='health' ${space} OK: All 40 components are ok [1/1 cpu, 2/2 disk, 12/12 fans, 8/8 memory, 2/2 psu, 1/1 raidvolume, 10/10 temperatures, 4/4 voltages]. + ... 6 system-health-critical --filter='health,1' --output-ignore-perfdata ${space} CRITICAL: Temperature 'Ambient Temp' status is 'critical' - Temperature 'DIMM 8 Temp' status is 'critical' - Voltage 'SysBrd 12V' status is 'critical' - Voltage 'SysBrd 3.3V' status is 'critical' - Fan 'Fan 1 Front Tach' status is 'critical' - Fan 'Fan 4 Front Tach' status is 'critical' - Fan 'Fan 2 Rear Tach' status is 'critical' - Fan 'Fan 6 Rear Tach' status is 'critical' - Power supply 'Anonymized 250' status is 'Anonymized 022' - Power supply 'Anonymized 193' status is 'Anonymized 076' - Disk 'Anonymized 016' status is 'critical' - 'Error' health status for 'Anonymized 149' - 'Error' health status for 'Anonymized 127' - 'Warning' health status for 'Anonymized 130' - 'Anonymized 227' cpu status for 'Anonymized 155' - 'critical' memory status for 'DIMM_2' - 'critical' memory status for 'DIMM_6' - 'critical' memory status for 'DIMM_8' - 'critical' memory status for 'DIMM_11' + ... 7 system-health-ok --filter='cpu' --filter='disk' --filter='fan' --filter='memory' --filter='psu' --filter='raidvolume' --filter='temperature' --filter='voltage' --output-ignore-perfdata ${space} OK: All 4 components are ok [4/4 health]. + ... 8 system-health-ok cpu OK: All 1 components are ok [1/1 cpu]. | 'count_cpu'=1;;;; + ... 9 system-health-ok memory OK: All 8 components are ok [8/8 memory]. | 'count_memory'=8;;;; + ... 10 system-health-critical --output-ignore-perfdata temperature CRITICAL: Temperature 'Ambient Temp' status is 'critical' - Temperature 'DIMM 8 Temp' status is 'critical' \ No newline at end of file diff --git a/tests/monitoring/iplabel/ekara/restapi/incidents.robot b/tests/monitoring/iplabel/ekara/restapi/incidents.robot new file mode 100644 index 000000000..384e5708b --- /dev/null +++ b/tests/monitoring/iplabel/ekara/restapi/incidents.robot @@ -0,0 +1,36 @@ +*** Settings *** +Documentation Check Iplabel incidents + +Resource ${CURDIR}${/}..${/}..${/}..${/}..${/}resources/import.resource + +Suite Setup Start Mockoon ${MOCKOON_JSON} +Suite Teardown Stop Mockoon +Test Timeout 120s + + +*** Variables *** +${MOCKOON_JSON} ${CURDIR}${/}monitoring-iplabel-ekara.json +${cmd} ${CENTREON_PLUGINS} +... --plugin=apps::monitoring::iplabel::ekara::restapi::plugin +... --hostname=localhost +... --api-username='username' +... --api-password='password' +... --port='3000' +... --proto='http' + +*** Test Cases *** + +incidents ${tc} + [Documentation] Check Iplabel scenarios + [Tags] monitoring iplabel restapi + + ${command} Catenate + ... ${cmd} + ... --mode=incidents + ... ${extra_options} + + Ctn Run Command And Check Result As Strings ${command} ${expected_result} + + Examples: tc extra_options expected_result -- + ... 1 --filter-name='Centreon Demo Navigation|AKILA - .Web.' CRITICAL: Incident #25421291, Scenario 'Centreon Demo Navigation' severity: Critical - Incident #25421962, Scenario 'AKILA - (Web)' severity: Critical - Incident #25422458, Scenario 'Centreon Demo Navigation' severity: Critical - Incident #25423513, Scenario 'Centreon Demo Navigation' status: Open, severity: Critical | 'ekara.incidents.current.total.count'=4;;;0; + ... 2 --filter-name='not a name' UNKNOWN: No scenarios found, can't search for incidents. Please check filters. diff --git a/tests/monitoring/iplabel/ekara/restapi/monitoring-iplabel-ekara.json b/tests/monitoring/iplabel/ekara/restapi/monitoring-iplabel-ekara.json new file mode 100644 index 000000000..d4cd686c6 --- /dev/null +++ b/tests/monitoring/iplabel/ekara/restapi/monitoring-iplabel-ekara.json @@ -0,0 +1,1003 @@ +{ + "uuid": "7cb573a3-d7c3-4d52-9c9d-51afb22705e1", + "lastMigration": 33, + "name": "Scenario (copy)", + "endpointPrefix": "", + "latency": 0, + "port": 3000, + "hostname": "", + "folders": [], + "routes": [ + { + "uuid": "655cde3b-919e-4849-932b-8f5e8f7c000e", + "type": "http", + "documentation": "", + "method": "get", + "endpoint": "", + "responses": [ + { + "uuid": "2c9ac093-4a53-400a-83f8-d5516223f33b", + "body": "{}", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null, + "streamingMode": null, + "streamingInterval": 0 + }, + { + "uuid": "c5445880-be60-406c-b722-a8ca5ef5068b", + "type": "http", + "documentation": "", + "method": "post", + "endpoint": "auth/login", + "responses": [ + { + "uuid": "9648cbc2-0bbe-40c9-8416-8a2209406f97", + "body": "{\"success\":true,\"token\":\"VeryLongTokenToAuthenticate\",\"refreshToken\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjFkY2YyYzY3LTFkYjAtNGRmZC1iNWRhLTFlZGI1YmE1NjU5MyIsImlhdCI6MTczNTU1NTA5MSwiZXhwIjoxNzM1NjQxNDkxfQ.vlFegdSvC9207ATXpb4ocNBESBU7wPfMsGwXOvZd8yU\",\"language\":\"fr-FR\",\"role\":[{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"restitution\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"configuration\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"infrastructure\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"administration\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"script\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"script\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"script\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"script\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"rum.bo.tracker\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"rum.bo.tracker\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"rum.bo.tracker\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"rum.bo.tracker\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"rum.bo.urlgroup\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"rum.bo.urlgroup\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"rum.bo.urlgroup\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"rum.bo.customdims\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"rum.bo.customdims\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"rum.bo.customdims\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"rum.bo.reference\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"rum.bo.reference\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"rum.bo.reference\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"rum.bo.reference\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"rum.restit\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"client\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"client\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"client\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"client\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"enterprise\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"application\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"application\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"application\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"application\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"scenario\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"scenario\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"scenario\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"scenario\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"user\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"user\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"user\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"user\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"zone\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"zone\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"zone\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"zone\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"planning\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"planning\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"planning\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"planning\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"queue\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"site\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"user.current\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"dataviz\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"alert\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"alert\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"alert\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"alert\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"report\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"report\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"report\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"report\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.restitution.overview\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.restitution.consoles\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.restitution.performance\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.restitution.rum\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.restitution.rumtendency\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.configuration.zones\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.configuration.scenarios\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.configuration.scripts\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.configuration.trackers\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.configuration.urlgroup\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.configuration.customdim\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.administration.entities\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.administration.applications\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.administration.users\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"robot\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.configuration.plannings\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"rumbi\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.configuration.alerts\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"rum.bo.tracker.ratio\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.restitution.incidents\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.configuration.reports.views\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.configuration.reports.share\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.restitution.report\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"exposedConfig\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"useractionlog\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.administration.useractionlog\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"downloadvuecontent\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"shareddata\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"shareddata\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"shareddata\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"shareddata\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.configuration.shareddata\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.administration.workspaces\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"workspace\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"workspace\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"workspace\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"workspace\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"dataexclusion\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"dataexclusion\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"dataexclusion\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.restitution.failures\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.restitution.designCompare\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"clientrestriction\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"notificationpush\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"notificationpush\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"notificationpush\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.restitution.sitesCompare\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"webhooks\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"webhooks\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"webhooks\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"webhooks\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"tagvalues\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.configuration.dataexclusion\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"proxy\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"proxy\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"proxy\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.administration.integration.webhooks\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.administration.integration.identityproviders\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"identityproviders\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"identityproviders\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"identityproviders\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"identityproviders\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.administration.proxiesConfigurations\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"proxiesConfigurations\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"proxiesConfigurations\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"proxiesConfigurations\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"proxiesConfigurations\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"comment\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"comment\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"comment\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"comment\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.restitution.comments\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.administration.usage.consumption\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"failurespersites\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.restitution.failurespersites\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"usageConsumption\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.restitution.goals\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.configuration.reports.published\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.restitution.statustimeline\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.infrastructure.home\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"inventories\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.infrastructure.load\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"infra_sitesworkersload\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.restitution.trend\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"green_app\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.green.home\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"scenarioreplay\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"scenarioreplay\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"scenarioreplay\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"scenariodetail\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.administration.integration.apikeys\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"apikeys\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"apikeys\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"apikeys\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"apikeys\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.restitution.scenariostatus\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.administration.browseragents\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"browseragents\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"browseragents\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"browseragents\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"browseragents\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.administration.roles\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"role\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"role\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"role\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"role\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"component\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"component\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"component\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"component\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.configuration.browseragents\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.configuration.browseragents.targeturls\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"targeturl\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"targeturl\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"targeturl\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"targeturl\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"scenario-startstop\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"falsepositive\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.falsepositive.home\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"robot-ip\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"consumption-quota\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"configuration-dataexclusion\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"configuration-dataexclusion\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"menu.restitution.dashboard\"},{\"role\":\"Manager\",\"action\":\"read:any\",\"resource\":\"ekara-availability\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"restitution-dataexclusion\"},{\"role\":\"Manager\",\"action\":\"delete:any\",\"resource\":\"restitution-dataexclusion\"},{\"role\":\"Manager\",\"action\":\"create:any\",\"resource\":\"configuration-script\"},{\"role\":\"Manager\",\"action\":\"update:any\",\"resource\":\"configuration-script\"}],\"password\":{\"status\":\"ACTIVE\",\"expirationDate\":\"2025-06-10\"},\"rgpd\":\"2023-10-11T07:56:13Z\",\"license\":{\"customerName\":\"IPLABEL PROD\",\"expirationDate\":\"2028-02-06\",\"platform\":\"Cloud Platform\",\"options\":{\"ekaraOnCall\":false,\"browserAgent\":true},\"status\":\"ACTIVE\"},\"features\":[]}\r\n", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [ + { + "target": "body", + "modifier": "$.password", + "value": "password", + "invert": false, + "operator": "equals" + }, + { + "target": "body", + "modifier": "$.email", + "value": "username", + "invert": false, + "operator": "equals" + } + ], + "rulesOperator": "AND", + "disableTemplating": false, + "fallbackTo404": false, + "default": false, + "crudKey": "id", + "callbacks": [] + }, + { + "uuid": "78743a5e-1c29-4fa3-8a5d-b9e0298a9318", + "body": "{\n \"success\": false,\n \"message\": \"Wrong email or password\"\n}", + "latency": 0, + "statusCode": 401, + "label": "if user/password are not sent, don't send back the token.", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null, + "streamingMode": null, + "streamingInterval": 0 + }, + { + "uuid": "a6aab3c4-806e-4d3d-a3ba-2be0dec50ef5", + "type": "http", + "documentation": "", + "method": "post", + "endpoint": "results-api/scenarios/status", + "responses": [ + { + "uuid": "e68a70e7-5eef-4f78-808c-e3cdaa19606c", + "body": "[\n {\n \"scenarioId\": \"09fe2561-315b-470f-a7ac-9c30fbd2e0fb\",\n \"scenarioName\": \"AKILA - (Web) \",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-30T10:21:03Z\"\n },\n {\n \"scenarioId\": \"127a149b-0fa6-4859-820e-9c4db23b6454\",\n \"scenarioName\": \"AKILA - (Browser Page Load)\",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-30T07:20:08Z\"\n },\n {\n \"scenarioId\": \"41d36b91-a4d3-4b00-a3ca-9e4fcf737d30\",\n \"scenarioName\": \"Centreon Demo Parcours - Custom views\",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-29T23:48:39Z\"\n },\n {\n \"scenarioId\": \"425bff8b-51eb-4b68-8529-6258e7b7888c\",\n \"scenarioName\": \"Centreon Demo ping Paris\",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-04T06:15:00Z\"\n },\n {\n \"scenarioId\": \"478a6915-1c00-4e85-9fe2-7d919e28ce88\",\n \"scenarioName\": \"Centreon Demo Navigation\",\n \"currentStatus\": 2,\n \"startTime\": \"2024-12-30T10:06:04Z\"\n },\n {\n \"scenarioId\": \"4fa9f25d-ae49-4848-823a-945e7f865f4b\",\n \"scenarioName\": \"Centreon Demo ping NA\",\n \"currentStatus\": 8,\n \"startTime\": \"2024-12-30T10:30:21Z\"\n },\n {\n \"scenarioId\": \"7622678e-ffec-49f5-8a67-7d1b4452bff6\",\n \"scenarioName\": \"wrong currentstatus, no perfdata\",\n \"currentStatus\": 14,\n \"startTime\": \"2024-12-30T02:00:45Z\"\n },\n {\n \"scenarioId\": \"8d0a798c-1b47-4142-869d-9bdabc9c126c\",\n \"scenarioName\": \"Centreon Demo Parcours - Login\",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-29T23:51:35Z\"\n },\n {\n \"scenarioId\": \"eae701ac-4231-4fc5-94e3-08601ac591e9\",\n \"scenarioName\": \"Centreon Demo ping Singapore\",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-30T10:15:11Z\"\n },\n {\n \"scenarioId\": \"fc6b739e-c18c-40ab-917c-61d20dff830c\",\n \"scenarioName\": \"AKILA - Business App\",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-30T09:30:23Z\"\n },\n {\n \"scenarioId\": \"fe1ca10e-1cf6-45c8-a7e9-b9b85272c086\",\n \"scenarioName\": \"AKILA - (API) \",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-30T10:10:55Z\"\n }\n]", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [ + { + "target": "header", + "modifier": "authorization", + "value": "Bearer VeryLongTokenToAuthenticate", + "invert": false, + "operator": "equals" + }, + { + "target": "body", + "modifier": "$.statusFilter", + "value": "", + "invert": false, + "operator": "null" + } + ], + "rulesOperator": "AND", + "disableTemplating": false, + "fallbackTo404": false, + "default": false, + "crudKey": "id", + "callbacks": [] + }, + { + "uuid": "04e28b1e-32fa-4f4b-bee2-b9ef5ad96516", + "body": "[\n {\n \"scenarioId\": \"478a6915-1c00-4e85-9fe2-7d919e28ce88\",\n \"scenarioName\": \"Centreon Demo Navigation\",\n \"currentStatus\": 2,\n \"startTime\": \"2024-12-30T10:06:04Z\"\n }\n]", + "latency": 0, + "statusCode": 200, + "label": "filter by status for status 2", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [ + { + "target": "body", + "modifier": "$.statusFilter.[*]", + "value": "2", + "invert": false, + "operator": "array_includes" + } + ], + "rulesOperator": "AND", + "disableTemplating": false, + "fallbackTo404": false, + "default": false, + "crudKey": "id", + "callbacks": [] + }, + { + "uuid": "e22fcbe0-73a7-43c5-acd9-8d2f32974117", + "body": "{\"success\":false,\"code\":\"AUTH40001\",\"message\":\"No token provided.\"}", + "latency": 0, + "statusCode": 400, + "label": "if token not present don't send back data.", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null, + "streamingMode": null, + "streamingInterval": 0 + }, + { + "uuid": "12d2126c-a45d-40b1-82c7-abc002d2d235", + "type": "http", + "documentation": "", + "method": "post", + "endpoint": "results-api/results/09fe2561-315b-470f-a7ac-9c30fbd2e0fb", + "responses": [ + { + "uuid": "debf59fb-35ca-4482-b957-5cdf3b7777da", + "body": "{\n \"kpis\": [\n {\n \"name\": \"Availability\",\n \"order\": 0,\n \"type\": \"User\",\n \"unit\": \"percent\",\n \"label\": \"availability\",\n \"value\": 100\n },\n {\n \"name\": \"Total time for all steps\",\n \"order\": 100,\n \"type\": \"User\",\n \"unit\": \"ms\",\n \"label\": \"time_total_allsteps\",\n \"value\": 5822\n }\n ],\n \"results\": [\n {\n \"planningTime\": \"2024-12-30T10:30:00Z\",\n \"stepId\": \"0\",\n \"metric\": \"time_step\",\n \"duration\": 9215,\n \"count\": 2,\n \"value\": 4608\n },\n {\n \"planningTime\": \"2024-12-30T10:30:00Z\",\n \"stepId\": \"1\",\n \"metric\": \"time_step\",\n \"duration\": 109,\n \"count\": 1,\n \"value\": 109\n },\n {\n \"planningTime\": \"2024-12-30T10:30:00Z\",\n \"stepId\": \"2\",\n \"metric\": \"time_step\",\n \"duration\": 87,\n \"count\": 1,\n \"value\": 87\n }\n ],\n \"siteIds\": [\n {\n \"id\": \"76300f93-1714-4235-aa20-105d0815b4e0\",\n \"name\": \"Paris (Iliad)\"\n },\n {\n \"id\": \"d1c377bf-745f-4d63-b25f-904b16582649\",\n \"name\": \"Paris (SFR)\"\n }\n ],\n \"metrics\": [\n {\n \"mtr_id\": \"eco_index\",\n \"mtr_name\": \"Eco Efficiency\",\n \"mtr_order\": 300,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \" \",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"nb_dom_elements\",\n \"mtr_name\": \"Number of DOM Elements\",\n \"mtr_order\": -1,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \" \",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"rum_speedindex\",\n \"mtr_name\": \"RUM Speed Index\",\n \"mtr_order\": 40,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": 10,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"start_render\",\n \"mtr_name\": \"Start render time\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_appcache\",\n \"mtr_name\": \"Application cache\",\n \"mtr_order\": 220,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_connect\",\n \"mtr_name\": \"Connection time\",\n \"mtr_order\": 240,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_interaction\",\n \"mtr_name\": \"Time to interact\",\n \"mtr_order\": 20,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": 20,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_multi_step\",\n \"mtr_name\": \"Cumulative Time Step\",\n \"mtr_order\": 100,\n \"mtr_type\": \"Cumulative\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_namelookup\",\n \"mtr_name\": \"Lookup time\",\n \"mtr_order\": 230,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_pageload\",\n \"mtr_name\": \"Page load time\",\n \"mtr_order\": 280,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_received\",\n \"mtr_name\": \"Response time\",\n \"mtr_order\": 270,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_redirect\",\n \"mtr_name\": \"Redirection time\",\n \"mtr_order\": 210,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_request\",\n \"mtr_name\": \"First byte time\",\n \"mtr_order\": 260,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_security_connect\",\n \"mtr_name\": \"TLS time\",\n \"mtr_order\": 250,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_step\",\n \"mtr_name\": \"Time Step\",\n \"mtr_order\": 100,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_total_allsteps\",\n \"mtr_name\": \"Total time for all steps\",\n \"mtr_order\": 100,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": 30,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_wv_fcp\",\n \"mtr_name\": \"First Contentful Paint\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_wv_fid\",\n \"mtr_name\": \"First Input Delay\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_wv_inp\",\n \"mtr_name\": \"Interaction to Next Paint\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_wv_lcp\",\n \"mtr_name\": \"Largest Contentful Paint\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"wv_cls\",\n \"mtr_name\": \"Cumulative Layout Shift\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \" \",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n }\n ],\n \"retries\": [],\n \"replays\": [],\n \"updates\": [],\n \"runningReplayId\": null,\n \"steps\": [\n {\n \"name\": \"Home\",\n \"index\": 1\n },\n {\n \"name\": \"Dashboard v2\",\n \"index\": 2\n },\n {\n \"name\": \"Dashboard v3\",\n \"index\": 3\n }\n ],\n \"infos\": {\n \"active_filter\": [\n {\n \"type\": \"measurementIds\",\n \"items\": [\n \"time_step\",\n \"time_multi_step\",\n \"time_total_allsteps\"\n ]\n }\n ],\n \"plugin_id\": \"WEB\",\n \"plugin_name\": \"Web\",\n \"info\": {\n \"hasStep\": true,\n \"showKPI\": true,\n \"hasWaterfall\": true,\n \"hasEcoEfficiency\": true,\n \"showThirdPartyContent\": true\n },\n \"scenarioName\": \"AKILA - (Web) \",\n \"default_plugin\": false\n },\n \"timelineDetails\": [\n {\n \"status\": 1,\n \"startTime\": \"2024-12-30T10:23:11Z\",\n \"endTime\": \"2024-12-30T10:38:11Z\",\n \"execs\": [\n {\n \"period\": \"PT10M\",\n \"siteId\": \"76300f93-1714-4235-aa20-105d0815b4e0\",\n \"status\": 1,\n \"execTime\": \"2024-12-30T10:21:03Z\",\n \"siteName\": \"Paris (Iliad)\",\n \"executionId\": \"51cd37fd-2210-4e92-9690-f6bfd833e560.32\",\n \"planningTime\": \"2024-12-30T10:20:00Z\",\n \"thresholdExceeded\": null\n }\n ]\n }\n ],\n \"aggregate\": \"rowdata\",\n \"emptyResults\": [],\n \"retentionDateExceeded\": false\n}", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [ + { + "target": "header", + "modifier": "authorization", + "value": "Bearer VeryLongTokenToAuthenticate", + "invert": false, + "operator": "equals" + } + ], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": false, + "crudKey": "id", + "callbacks": [] + }, + { + "uuid": "8977f4b6-97c8-4d6b-a6f5-ff5dbebdef24", + "body": "{\"success\":false,\"code\":\"AUTH40001\",\"message\":\"No token provided.\"}", + "latency": 0, + "statusCode": 400, + "label": "if token not present don't send back data.", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null, + "streamingMode": null, + "streamingInterval": 0 + }, + { + "uuid": "73af6aa6-3809-45cf-8c3f-a057ba5fc7a5", + "type": "http", + "documentation": "", + "method": "post", + "endpoint": "results-api/results/127a149b-0fa6-4859-820e-9c4db23b6454", + "responses": [ + { + "uuid": "e1882d7b-2d65-41fa-b7e5-ca33713138db", + "body": "{\n \"kpis\": [\n {\n \"name\": \"Availability\",\n \"order\": 0,\n \"type\": \"User\",\n \"unit\": \"percent\",\n \"label\": \"availability\",\n \"value\": 100\n },\n {\n \"name\": \"Time to interact\",\n \"order\": 20,\n \"type\": \"User\",\n \"unit\": \"ms\",\n \"label\": \"time_interaction\",\n \"value\": 887\n },\n {\n \"name\": \"Perceptual Speed Index\",\n \"order\": 30,\n \"type\": \"User\",\n \"unit\": \"ms\",\n \"label\": \"perceptual_speedindex\",\n \"value\": 835\n },\n {\n \"name\": \"Full page load time\",\n \"order\": 100,\n \"type\": \"User\",\n \"unit\": \"ms\",\n \"label\": \"time_total\",\n \"value\": 1097\n }\n ],\n \"results\": [\n {\n \"planningTime\": \"2024-12-30T10:30:00Z\",\n \"stepId\": \"0\",\n \"metric\": \"time_interaction\",\n \"duration\": 1773,\n \"count\": 2,\n \"value\": 887\n },\n {\n \"planningTime\": \"2024-12-30T10:30:00Z\",\n \"stepId\": \"0\",\n \"metric\": \"time_total\",\n \"duration\": 2193,\n \"count\": 2,\n \"value\": 1097\n },\n {\n \"planningTime\": \"2024-12-30T10:30:00Z\",\n \"stepId\": \"0\",\n \"metric\": \"perceptual_speedindex\",\n \"duration\": 1670,\n \"count\": 2,\n \"value\": 835\n }\n ],\n \"siteIds\": [\n {\n \"id\": \"76300f93-1714-4235-aa20-105d0815b4e0\",\n \"name\": \"Paris (Iliad)\"\n },\n {\n \"id\": \"d1c377bf-745f-4d63-b25f-904b16582649\",\n \"name\": \"Paris (SFR)\"\n }\n ],\n \"metrics\": [\n {\n \"mtr_id\": \"cls\",\n \"mtr_name\": \"Cumulative Layout Shift\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"BROWSER PAGE LOAD\",\n \"mtr_unit\": \" \",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"eco_index\",\n \"mtr_name\": \"Eco Efficiency\",\n \"mtr_order\": 300,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"BROWSER PAGE LOAD\",\n \"mtr_unit\": \" \",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"nb_dom_elements\",\n \"mtr_name\": \"Number of DOM Elements\",\n \"mtr_order\": -1,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"BROWSER PAGE LOAD\",\n \"mtr_unit\": \" \",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"perceptual_speedindex\",\n \"mtr_name\": \"Perceptual Speed Index\",\n \"mtr_order\": 30,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"BROWSER PAGE LOAD\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": 20,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"rum_speedindex\",\n \"mtr_name\": \"RUM Speed Index\",\n \"mtr_order\": 40,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"BROWSER PAGE LOAD\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": 10,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"start_render\",\n \"mtr_name\": \"Start render time\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"BROWSER PAGE LOAD\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_appcache\",\n \"mtr_name\": \"Application cache\",\n \"mtr_order\": 220,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"BROWSER PAGE LOAD\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_connect\",\n \"mtr_name\": \"Connection time\",\n \"mtr_order\": 240,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"BROWSER PAGE LOAD\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_fcp\",\n \"mtr_name\": \"First Contentful Paint\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"BROWSER PAGE LOAD\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_interaction\",\n \"mtr_name\": \"Time to interact\",\n \"mtr_order\": 20,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"BROWSER PAGE LOAD\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": 30,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_lcp\",\n \"mtr_name\": \"Largest Contentful Paint\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"BROWSER PAGE LOAD\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_namelookup\",\n \"mtr_name\": \"Lookup time\",\n \"mtr_order\": 230,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"BROWSER PAGE LOAD\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_pageload\",\n \"mtr_name\": \"Page load time\",\n \"mtr_order\": 280,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"BROWSER PAGE LOAD\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_received\",\n \"mtr_name\": \"Response time\",\n \"mtr_order\": 270,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"BROWSER PAGE LOAD\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_redirect\",\n \"mtr_name\": \"Redirection time\",\n \"mtr_order\": 210,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"BROWSER PAGE LOAD\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_request\",\n \"mtr_name\": \"First byte time\",\n \"mtr_order\": 260,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"BROWSER PAGE LOAD\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_security_connect\",\n \"mtr_name\": \"TLS time\",\n \"mtr_order\": 250,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"BROWSER PAGE LOAD\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_total\",\n \"mtr_name\": \"Full page load time\",\n \"mtr_order\": 100,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"BROWSER PAGE LOAD\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": 40,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n }\n ],\n \"retries\": [],\n \"replays\": [],\n \"updates\": [],\n \"runningReplayId\": null,\n \"steps\": [\n {\n \"name\": \"Home\",\n \"index\": 1\n }\n ],\n \"infos\": {\n \"active_filter\": [\n {\n \"type\": \"measurementIds\",\n \"items\": [\n \"perceptual_speedindex\",\n \"time_interaction\",\n \"time_total\"\n ]\n }\n ],\n \"plugin_id\": \"BROWSER PAGE LOAD\",\n \"plugin_name\": \"Browser Page Load\",\n \"info\": {\n \"hasStep\": false,\n \"showKPI\": true,\n \"hasWaterfall\": true,\n \"hasEcoEfficiency\": true,\n \"showThirdPartyContent\": true\n },\n \"scenarioName\": \"AKILA - (Browser Page Load)\",\n \"default_plugin\": false\n },\n \"timelineDetails\": [\n {\n \"status\": 1,\n \"startTime\": \"2024-12-30T10:23:11Z\",\n \"endTime\": \"2024-12-30T10:38:11Z\",\n \"execs\": [\n {\n \"period\": \"PT10M\",\n \"siteId\": \"d1c377bf-745f-4d63-b25f-904b16582649\",\n \"status\": 1,\n \"execTime\": \"2024-12-30T07:20:08Z\",\n \"siteName\": \"Paris (SFR)\",\n \"executionId\": \"2d793bbc-b49d-4359-81a8-25b0b40d69c9.14\",\n \"planningTime\": \"2024-12-30T07:20:00Z\",\n \"thresholdExceeded\": null\n }\n ]\n }\n ],\n \"aggregate\": \"rowdata\",\n \"emptyResults\": [],\n \"retentionDateExceeded\": false\n}", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [ + { + "target": "header", + "modifier": "authorization", + "value": "Bearer VeryLongTokenToAuthenticate", + "invert": false, + "operator": "equals" + } + ], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": false, + "crudKey": "id", + "callbacks": [] + }, + { + "uuid": "23147a3c-6da3-4370-897f-2b484ee11f65", + "body": "{\"success\":false,\"code\":\"AUTH40001\",\"message\":\"No token provided.\"}", + "latency": 0, + "statusCode": 400, + "label": "if token not present don't send back data.", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null, + "streamingMode": null, + "streamingInterval": 0 + }, + { + "uuid": "9a91468b-aae8-40a7-994f-2aa7536f7c49", + "type": "http", + "documentation": "", + "method": "post", + "endpoint": "results-api/results/41d36b91-a4d3-4b00-a3ca-9e4fcf737d30", + "responses": [ + { + "uuid": "07c2e64c-53c7-48c4-a684-328fc7baeb57", + "body": "{\"kpis\":[{\"name\":\"Availability\",\"order\":0,\"type\":\"User\",\"unit\":\"percent\",\"label\":\"availability\",\"value\":100},{\"name\":\"Total time for all steps\",\"order\":100,\"type\":\"User\",\"unit\":\"ms\",\"label\":\"time_total_allsteps\",\"value\":9359}],\"results\":[{\"planningTime\":\"2024-12-30T10:30:00Z\",\"stepId\":\"0\",\"metric\":\"time_step\",\"duration\":2382,\"count\":1,\"value\":2382},{\"planningTime\":\"2024-12-30T10:30:00Z\",\"stepId\":\"1\",\"metric\":\"time_step\",\"duration\":3874,\"count\":1,\"value\":3874},{\"planningTime\":\"2024-12-30T10:30:00Z\",\"stepId\":\"2\",\"metric\":\"time_step\",\"duration\":3103,\"count\":1,\"value\":3103}],\"siteIds\":[{\"id\":\"8e9538eb-dafe-46fd-9cee-6605fe3e4f60\",\"name\":\"Paris (Orange)\"}],\"metrics\":[{\"mtr_id\":\"eco_index\",\"mtr_name\":\"Eco Efficiency\",\"mtr_order\":300,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\" \",\"mtr_preferred_metric\":-1,\"filterEnabled\":false,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"nb_dom_elements\",\"mtr_name\":\"Number of DOM Elements\",\"mtr_order\":-1,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\" \",\"mtr_preferred_metric\":-1,\"filterEnabled\":false,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"rum_speedindex\",\"mtr_name\":\"RUM Speed Index\",\"mtr_order\":40,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":10,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"start_render\",\"mtr_name\":\"Start render time\",\"mtr_order\":10,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_appcache\",\"mtr_name\":\"Application cache\",\"mtr_order\":220,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_connect\",\"mtr_name\":\"Connection time\",\"mtr_order\":240,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_interaction\",\"mtr_name\":\"Time to interact\",\"mtr_order\":20,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":20,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_multi_step\",\"mtr_name\":\"Cumulative Time Step\",\"mtr_order\":100,\"mtr_type\":\"Cumulative\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":false,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_namelookup\",\"mtr_name\":\"Lookup time\",\"mtr_order\":230,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_pageload\",\"mtr_name\":\"Page load time\",\"mtr_order\":280,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_received\",\"mtr_name\":\"Response time\",\"mtr_order\":270,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_redirect\",\"mtr_name\":\"Redirection time\",\"mtr_order\":210,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_request\",\"mtr_name\":\"First byte time\",\"mtr_order\":260,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_security_connect\",\"mtr_name\":\"TLS time\",\"mtr_order\":250,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_step\",\"mtr_name\":\"Time Step\",\"mtr_order\":100,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_total_allsteps\",\"mtr_name\":\"Total time for all steps\",\"mtr_order\":100,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":30,\"filterEnabled\":false,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_wv_fcp\",\"mtr_name\":\"First Contentful Paint\",\"mtr_order\":-1,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_wv_fid\",\"mtr_name\":\"First Input Delay\",\"mtr_order\":-1,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_wv_inp\",\"mtr_name\":\"Interaction to Next Paint\",\"mtr_order\":-1,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_wv_lcp\",\"mtr_name\":\"Largest Contentful Paint\",\"mtr_order\":-1,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"wv_cls\",\"mtr_name\":\"Cumulative Layout Shift\",\"mtr_order\":-1,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\" \",\"mtr_preferred_metric\":-1,\"filterEnabled\":false,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false}],\"retries\":[],\"replays\":[],\"updates\":[],\"runningReplayId\":null,\"steps\":[{\"name\":\"Reach Centreon Demo\",\"index\":1},{\"name\":\"Log-in\",\"index\":2},{\"name\":\"Custom views\",\"index\":3}],\"infos\":{\"active_filter\":[{\"type\":\"measurementIds\",\"items\":[\"time_step\",\"time_multi_step\",\"time_total_allsteps\"]}],\"plugin_id\":\"WEB\",\"plugin_name\":\"Web\",\"info\":{\"hasStep\":true,\"showKPI\":true,\"hasWaterfall\":true,\"hasEcoEfficiency\":true,\"showThirdPartyContent\":true},\"scenarioName\":\"Centreon Demo Parcours - Custom views\",\"default_plugin\":false},\"timelineDetails\":[{\"status\":1,\"startTime\":\"2024-12-30T10:23:11Z\",\"endTime\":\"2024-12-30T10:38:11Z\",\"execs\":[{\"period\":\"PT15M\",\"siteId\":\"8e9538eb-dafe-46fd-9cee-6605fe3e4f60\",\"status\":1,\"execTime\":\"2024-12-29T23:48:39Z\",\"siteName\":\"Paris (Orange)\",\"executionId\":\"75da9c65-cdf2-405f-af0e-5d20886463b3.3\",\"planningTime\":\"2024-12-29T23:45:00Z\",\"thresholdExceeded\":null}]}],\"aggregate\":\"rowdata\",\"emptyResults\":[],\"retentionDateExceeded\":false}\r\n", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [ + { + "target": "header", + "modifier": "authorization", + "value": "Bearer VeryLongTokenToAuthenticate", + "invert": false, + "operator": "equals" + } + ], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": false, + "crudKey": "id", + "callbacks": [] + }, + { + "uuid": "32bbafbb-dde7-446a-8313-6083d03ead1e", + "body": "{\"success\":false,\"code\":\"AUTH40001\",\"message\":\"No token provided.\"}", + "latency": 0, + "statusCode": 400, + "label": "if token not present don't send back data.", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null, + "streamingMode": null, + "streamingInterval": 0 + }, + { + "uuid": "129e5dd8-feb9-4405-926f-ef2944dec47c", + "type": "http", + "documentation": "", + "method": "post", + "endpoint": "results-api/results/425bff8b-51eb-4b68-8529-6258e7b7888c", + "responses": [ + { + "uuid": "b862b4f5-de3a-49b0-83a5-75aaf19a4d68", + "body": "{\"kpis\":[{\"name\":\"Availability\",\"order\":0,\"type\":\"User\",\"unit\":\"percent\",\"label\":\"availability\",\"value\":100},{\"name\":\"Total time\",\"order\":100,\"type\":\"User\",\"unit\":\"ms\",\"label\":\"time_total\",\"value\":154}],\"results\":[{\"planningTime\":\"2024-12-30T10:30:00Z\",\"stepId\":\"0\",\"metric\":\"time_total\",\"duration\":154,\"count\":1,\"value\":154}],\"siteIds\":[{\"id\":\"8e9538eb-dafe-46fd-9cee-6605fe3e4f60\",\"name\":\"Paris (Orange)\"}],\"metrics\":[{\"mtr_id\":\"time_connect\",\"mtr_name\":\"Connection time\",\"mtr_order\":220,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_namelookup\",\"mtr_name\":\"Lookup time\",\"mtr_order\":210,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_received\",\"mtr_name\":\"Response time\",\"mtr_order\":260,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_redirect\",\"mtr_name\":\"Redirection time\",\"mtr_order\":240,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_request\",\"mtr_name\":\"First byte time\",\"mtr_order\":250,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_security_connect\",\"mtr_name\":\"TLS time\",\"mtr_order\":230,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_total\",\"mtr_name\":\"Total time\",\"mtr_order\":100,\"mtr_type\":\"User\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":10,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false}],\"retries\":[],\"replays\":[],\"updates\":[],\"runningReplayId\":null,\"steps\":[{\"name\":\"Login\",\"index\":1}],\"infos\":{\"active_filter\":[{\"type\":\"measurementIds\",\"items\":[\"time_total\"]}],\"plugin_id\":\"HTTP REQUEST\",\"plugin_name\":\"Check HTTP\",\"info\":{\"hasStep\":false,\"showKPI\":false,\"hasWaterfall\":false},\"scenarioName\":\"Centreon Demo ping Paris\",\"default_plugin\":false},\"timelineDetails\":[{\"status\":1,\"startTime\":\"2024-12-30T10:23:11Z\",\"endTime\":\"2024-12-30T10:38:11Z\",\"execs\":[{\"period\":\"PT15M\",\"siteId\":\"8e9538eb-dafe-46fd-9cee-6605fe3e4f60\",\"status\":1,\"execTime\":\"2024-12-04T06:15:00Z\",\"siteName\":\"Paris (Orange)\",\"executionId\":\"6bf2b683-c352-4d9a-9508-673f3eaaf996.29\",\"planningTime\":\"2024-12-04T06:15:00Z\",\"thresholdExceeded\":null}]}],\"aggregate\":\"rowdata\",\"emptyResults\":[],\"retentionDateExceeded\":false}\r\n", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [ + { + "target": "header", + "modifier": "authorization", + "value": "Bearer VeryLongTokenToAuthenticate", + "invert": false, + "operator": "equals" + } + ], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": false, + "crudKey": "id", + "callbacks": [] + }, + { + "uuid": "c8076fd8-3708-44ef-bf31-dd77490daa6f", + "body": "{\"success\":false,\"code\":\"AUTH40001\",\"message\":\"No token provided.\"}", + "latency": 0, + "statusCode": 400, + "label": "if token not present don't send back data.", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null, + "streamingMode": null, + "streamingInterval": 0 + }, + { + "uuid": "c05b9a70-fe37-44c8-a099-2f393901290c", + "type": "http", + "documentation": "", + "method": "post", + "endpoint": "results-api/results/478a6915-1c00-4e85-9fe2-7d919e28ce88", + "responses": [ + { + "uuid": "49056e84-6551-40ae-b477-d2d02d7cb23b", + "body": "{\n \"kpis\": [\n {\n \"name\": \"Availability\",\n \"order\": 0,\n \"type\": \"User\",\n \"unit\": \"percent\",\n \"label\": \"availability\",\n \"value\": 20\n },\n {\n \"name\": \"Total time for all steps\",\n \"order\": 100,\n \"type\": \"User\",\n \"unit\": \"ms\",\n \"label\": \"time_total_allsteps\",\n \"value\": 17535\n }\n ],\n \"results\": [\n {\n \"planningTime\": \"2024-12-30T22:00:00Z\",\n \"stepId\": \"2\",\n \"metric\": \"time_step\",\n \"duration\": 2179,\n \"count\": 1,\n \"value\": 2179\n },\n {\n \"planningTime\": \"2024-12-30T22:00:00Z\",\n \"stepId\": \"3\",\n \"metric\": \"time_step\",\n \"duration\": 6059,\n \"count\": 1,\n \"value\": 6059\n },\n {\n \"planningTime\": \"2024-12-30T22:00:00Z\",\n \"stepId\": \"0\",\n \"metric\": \"time_step\",\n \"duration\": 2341,\n \"count\": 1,\n \"value\": 2341\n },\n {\n \"planningTime\": \"2024-12-30T22:00:00Z\",\n \"stepId\": \"1\",\n \"metric\": \"time_step\",\n \"duration\": 4243,\n \"count\": 1,\n \"value\": 4243\n },\n {\n \"planningTime\": \"2024-12-30T22:00:00Z\",\n \"stepId\": \"4\",\n \"metric\": \"time_step\",\n \"duration\": 2713,\n \"count\": 1,\n \"value\": 2713\n }\n ],\n \"siteIds\": [\n {\n \"id\": \"8e9538eb-dafe-46fd-9cee-6605fe3e4f60\",\n \"name\": \"Paris (Orange)\"\n }\n ],\n \"metrics\": [\n {\n \"mtr_id\": \"eco_index\",\n \"mtr_name\": \"Eco Efficiency\",\n \"mtr_order\": 300,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \" \",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"nb_dom_elements\",\n \"mtr_name\": \"Number of DOM Elements\",\n \"mtr_order\": -1,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \" \",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"rum_speedindex\",\n \"mtr_name\": \"RUM Speed Index\",\n \"mtr_order\": 40,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": 10,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"start_render\",\n \"mtr_name\": \"Start render time\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_appcache\",\n \"mtr_name\": \"Application cache\",\n \"mtr_order\": 220,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_connect\",\n \"mtr_name\": \"Connection time\",\n \"mtr_order\": 240,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_interaction\",\n \"mtr_name\": \"Time to interact\",\n \"mtr_order\": 20,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": 20,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_multi_step\",\n \"mtr_name\": \"Cumulative Time Step\",\n \"mtr_order\": 100,\n \"mtr_type\": \"Cumulative\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_namelookup\",\n \"mtr_name\": \"Lookup time\",\n \"mtr_order\": 230,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_pageload\",\n \"mtr_name\": \"Page load time\",\n \"mtr_order\": 280,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_received\",\n \"mtr_name\": \"Response time\",\n \"mtr_order\": 270,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_redirect\",\n \"mtr_name\": \"Redirection time\",\n \"mtr_order\": 210,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_request\",\n \"mtr_name\": \"First byte time\",\n \"mtr_order\": 260,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_security_connect\",\n \"mtr_name\": \"TLS time\",\n \"mtr_order\": 250,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_step\",\n \"mtr_name\": \"Time Step\",\n \"mtr_order\": 100,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_total_allsteps\",\n \"mtr_name\": \"Total time for all steps\",\n \"mtr_order\": 100,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": 30,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_wv_fcp\",\n \"mtr_name\": \"First Contentful Paint\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_wv_fid\",\n \"mtr_name\": \"First Input Delay\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_wv_inp\",\n \"mtr_name\": \"Interaction to Next Paint\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_wv_lcp\",\n \"mtr_name\": \"Largest Contentful Paint\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"wv_cls\",\n \"mtr_name\": \"Cumulative Layout Shift\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \" \",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n }\n ],\n \"retries\": [],\n \"replays\": [],\n \"updates\": [],\n \"runningReplayId\": null,\n \"steps\": [\n {\n \"name\": \"Reach Centreon Demo\",\n \"index\": 1\n },\n {\n \"name\": \"Log-in\",\n \"index\": 2\n },\n {\n \"name\": \"Resources Menu\",\n \"index\": 3\n },\n {\n \"name\": \"Type searchbar\",\n \"index\": 4\n },\n {\n \"name\": \"Disconnect\",\n \"index\": 5\n }\n ],\n \"infos\": {\n \"active_filter\": [\n {\n \"type\": \"measurementIds\",\n \"items\": [\n \"time_step\",\n \"time_multi_step\",\n \"time_total_allsteps\"\n ]\n }\n ],\n \"plugin_id\": \"WEB\",\n \"plugin_name\": \"Web\",\n \"info\": {\n \"hasStep\": true,\n \"showKPI\": true,\n \"hasWaterfall\": true,\n \"hasEcoEfficiency\": true,\n \"showThirdPartyContent\": true\n },\n \"scenarioName\": \"Centreon Demo Navigation\",\n \"default_plugin\": false\n },\n \"timelineDetails\": [\n {\n \"status\": 1,\n \"startTime\": \"2024-12-30T21:35:10Z\",\n \"endTime\": \"2024-12-30T22:25:10Z\",\n \"execs\": [\n {\n \"period\": \"PT1H\",\n \"siteId\": \"8e9538eb-dafe-46fd-9cee-6605fe3e4f60\",\n \"status\": 1,\n \"execTime\": \"2024-12-30T21:06:49Z\",\n \"siteName\": \"Paris (Orange)\",\n \"executionId\": \"694a796c-21e2-442f-ba38-30317529539e.22\",\n \"planningTime\": \"2024-12-30T21:00:00Z\",\n \"thresholdExceeded\": null\n }\n ]\n }\n ],\n \"aggregate\": \"rowdata\",\n \"emptyResults\": [],\n \"retentionDateExceeded\": false\n}", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [ + { + "target": "header", + "modifier": "authorization", + "value": "Bearer VeryLongTokenToAuthenticate", + "invert": false, + "operator": "equals" + } + ], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": false, + "crudKey": "id", + "callbacks": [] + }, + { + "uuid": "6ab96810-7550-4299-8ebb-9d0813f8c089", + "body": "{\"success\":false,\"code\":\"AUTH40001\",\"message\":\"No token provided.\"}", + "latency": 0, + "statusCode": 400, + "label": "if token not present don't send back data.", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null, + "streamingMode": null, + "streamingInterval": 0 + }, + { + "uuid": "0c06529b-c638-46ef-b9f5-83bcb54b077d", + "type": "http", + "documentation": "", + "method": "post", + "endpoint": "results-api/results/4fa9f25d-ae49-4848-823a-945e7f865f4b", + "responses": [ + { + "uuid": "ecc298b8-8328-496c-a1d1-7a7e3b21ea55", + "body": "{\"kpis\":[{\"name\":\"Availability\",\"order\":0,\"type\":\"User\",\"unit\":\"percent\",\"label\":\"availability\",\"value\":100},{\"name\":\"Total time\",\"order\":100,\"type\":\"User\",\"unit\":\"ms\",\"label\":\"time_total\",\"value\":480}],\"results\":[{\"planningTime\":\"2024-12-30T10:30:00Z\",\"stepId\":\"0\",\"metric\":\"time_total\",\"duration\":959,\"count\":2,\"value\":480}],\"siteIds\":[{\"id\":\"8b63e658-e446-4a26-a8df-d119eb267f2a\",\"name\":\"Toronto (Azure)\"},{\"id\":\"d20cfff8-bc80-4b79-b1b1-6ee6ead86dc2\",\"name\":\"Washington DC (AWS)\"}],\"metrics\":[{\"mtr_id\":\"time_connect\",\"mtr_name\":\"Connection time\",\"mtr_order\":220,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_namelookup\",\"mtr_name\":\"Lookup time\",\"mtr_order\":210,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_received\",\"mtr_name\":\"Response time\",\"mtr_order\":260,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_redirect\",\"mtr_name\":\"Redirection time\",\"mtr_order\":240,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_request\",\"mtr_name\":\"First byte time\",\"mtr_order\":250,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_security_connect\",\"mtr_name\":\"TLS time\",\"mtr_order\":230,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_total\",\"mtr_name\":\"Total time\",\"mtr_order\":100,\"mtr_type\":\"User\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":10,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false}],\"retries\":[],\"replays\":[],\"updates\":[],\"runningReplayId\":null,\"steps\":[{\"name\":\"Login\",\"index\":1}],\"infos\":{\"active_filter\":[{\"type\":\"measurementIds\",\"items\":[\"time_total\"]}],\"plugin_id\":\"HTTP REQUEST\",\"plugin_name\":\"Check HTTP\",\"info\":{\"hasStep\":false,\"showKPI\":false,\"hasWaterfall\":false},\"scenarioName\":\"Centreon Demo ping NA\",\"default_plugin\":false},\"timelineDetails\":[{\"status\":8,\"startTime\":\"2024-12-30T10:23:11Z\",\"endTime\":\"2024-12-30T10:30:01Z\",\"execs\":[{\"period\":\"PT15M\",\"siteId\":\"8b63e658-e446-4a26-a8df-d119eb267f2a\",\"status\":1,\"execTime\":\"2024-12-30T10:15:36Z\",\"siteName\":\"Toronto (Azure)\",\"executionId\":\"244079ac-f115-4379-8116-a136ad7328a4.45\",\"planningTime\":\"2024-12-30T10:15:00Z\",\"thresholdExceeded\":\"PT0.617S\"}]},{\"status\":1,\"startTime\":\"2024-12-30T10:30:01Z\",\"endTime\":\"2024-12-30T10:30:21Z\",\"execs\":[{\"period\":\"PT15M\",\"siteId\":\"d20cfff8-bc80-4b79-b1b1-6ee6ead86dc2\",\"status\":1,\"execTime\":\"2024-12-30T10:30:01Z\",\"siteName\":\"Washington DC (AWS)\",\"executionId\":\"d19ec309-0939-4908-83d2-c3ff9a643197.46\",\"planningTime\":\"2024-12-30T10:30:00Z\",\"thresholdExceeded\":null}]},{\"status\":8,\"startTime\":\"2024-12-30T10:30:21Z\",\"endTime\":\"2024-12-30T10:38:11Z\",\"execs\":[{\"period\":\"PT15M\",\"siteId\":\"8b63e658-e446-4a26-a8df-d119eb267f2a\",\"status\":1,\"execTime\":\"2024-12-30T10:30:21Z\",\"siteName\":\"Toronto (Azure)\",\"executionId\":\"244079ac-f115-4379-8116-a136ad7328a4.46\",\"planningTime\":\"2024-12-30T10:30:00Z\",\"thresholdExceeded\":\"PT0.652S\"}]}],\"aggregate\":\"rowdata\",\"emptyResults\":[],\"retentionDateExceeded\":false}\r\n", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [ + { + "target": "header", + "modifier": "authorization", + "value": "Bearer VeryLongTokenToAuthenticate", + "invert": false, + "operator": "equals" + } + ], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": false, + "crudKey": "id", + "callbacks": [] + }, + { + "uuid": "dca50edf-c6ef-468c-a614-c368f8e494c0", + "body": "{\"success\":false,\"code\":\"AUTH40001\",\"message\":\"No token provided.\"}", + "latency": 0, + "statusCode": 400, + "label": "if token not present don't send back data.", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null, + "streamingMode": null, + "streamingInterval": 0 + }, + { + "uuid": "756da49e-1ce5-4a1e-a1a0-b90fe6a79046", + "type": "http", + "documentation": "", + "method": "post", + "endpoint": "results-api/results/7622678e-ffec-49f5-8a67-7d1b4452bff6", + "responses": [ + { + "uuid": "1e9dd117-758d-42c9-a3b3-8be8510b5cf7", + "body": "{\n \"kpis\": [],\n \"results\": [],\n \"siteIds\": [],\n \"metrics\": [\n {\n \"mtr_id\": \"time_connect\",\n \"mtr_name\": \"Connection time\",\n \"mtr_order\": 220,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"HTTP REQUEST\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_namelookup\",\n \"mtr_name\": \"Lookup time\",\n \"mtr_order\": 210,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"HTTP REQUEST\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_received\",\n \"mtr_name\": \"Response time\",\n \"mtr_order\": 260,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"HTTP REQUEST\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_redirect\",\n \"mtr_name\": \"Redirection time\",\n \"mtr_order\": 240,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"HTTP REQUEST\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_request\",\n \"mtr_name\": \"First byte time\",\n \"mtr_order\": 250,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"HTTP REQUEST\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_security_connect\",\n \"mtr_name\": \"TLS time\",\n \"mtr_order\": 230,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"HTTP REQUEST\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_total\",\n \"mtr_name\": \"Total time\",\n \"mtr_order\": 100,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"HTTP REQUEST\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": 10,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n }\n ],\n \"retries\": [],\n \"replays\": [],\n \"updates\": [],\n \"runningReplayId\": null,\n \"steps\": [],\n \"infos\": {\n \"active_filter\": [\n {\n \"type\": \"measurementIds\",\n \"items\": [\n \"time_total\"\n ]\n }\n ],\n \"plugin_id\": \"HTTP REQUEST\",\n \"plugin_name\": \"Check HTTP\",\n \"info\": {\n \"hasStep\": false,\n \"showKPI\": false,\n \"hasWaterfall\": false\n },\n \"scenarioName\": \"AKILA - (HTTP Request) 🌐\",\n \"default_plugin\": false\n },\n \"timelineDetails\": [\n {\n \"status\": 5,\n \"startTime\": \"2024-12-30T23:51:29Z\",\n \"endTime\": \"2024-12-30T23:51:59Z\",\n \"execs\": [\n {\n \"period\": \"PT1H56.079S\",\n \"siteId\": \"76300f93-1714-4235-aa20-105d0815b4e0\",\n \"status\": 5,\n \"execTime\": null,\n \"siteName\": \"Paris (Iliad)\",\n \"executionId\": null,\n \"planningTime\": \"2024-12-30T22:00:00Z\",\n \"thresholdExceeded\": null\n }\n ]\n }\n ],\n \"aggregate\": \"rowdata\",\n \"emptyResults\": [],\n \"retentionDateExceeded\": false\n}", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [ + { + "target": "header", + "modifier": "authorization", + "value": "Bearer VeryLongTokenToAuthenticate", + "invert": false, + "operator": "equals" + } + ], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": false, + "crudKey": "id", + "callbacks": [] + }, + { + "uuid": "d0bc8061-ab14-4178-8a4e-73b04bd8f12b", + "body": "{\"success\":false,\"code\":\"AUTH40001\",\"message\":\"No token provided.\"}", + "latency": 0, + "statusCode": 400, + "label": "if token not present don't send back data.", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null, + "streamingMode": null, + "streamingInterval": 0 + }, + { + "uuid": "2646ada3-d2e2-459e-97e0-6bc0c9a226e3", + "type": "http", + "documentation": "", + "method": "post", + "endpoint": "results-api/results/8d0a798c-1b47-4142-869d-9bdabc9c126c", + "responses": [ + { + "uuid": "adcada46-8c3c-423a-8d15-4d8ac47c68a9", + "body": "{\"kpis\":[{\"name\":\"Availability\",\"order\":0,\"type\":\"User\",\"unit\":\"percent\",\"label\":\"availability\",\"value\":100},{\"name\":\"Total time for all steps\",\"order\":100,\"type\":\"User\",\"unit\":\"ms\",\"label\":\"time_total_allsteps\",\"value\":8239}],\"results\":[{\"planningTime\":\"2024-12-30T10:30:00Z\",\"stepId\":\"0\",\"metric\":\"time_step\",\"duration\":2457,\"count\":1,\"value\":2457},{\"planningTime\":\"2024-12-30T10:30:00Z\",\"stepId\":\"1\",\"metric\":\"time_step\",\"duration\":3855,\"count\":1,\"value\":3855},{\"planningTime\":\"2024-12-30T10:30:00Z\",\"stepId\":\"2\",\"metric\":\"time_step\",\"duration\":1927,\"count\":1,\"value\":1927}],\"siteIds\":[{\"id\":\"8e9538eb-dafe-46fd-9cee-6605fe3e4f60\",\"name\":\"Paris (Orange)\"}],\"metrics\":[{\"mtr_id\":\"eco_index\",\"mtr_name\":\"Eco Efficiency\",\"mtr_order\":300,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\" \",\"mtr_preferred_metric\":-1,\"filterEnabled\":false,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"nb_dom_elements\",\"mtr_name\":\"Number of DOM Elements\",\"mtr_order\":-1,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\" \",\"mtr_preferred_metric\":-1,\"filterEnabled\":false,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"rum_speedindex\",\"mtr_name\":\"RUM Speed Index\",\"mtr_order\":40,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":10,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"start_render\",\"mtr_name\":\"Start render time\",\"mtr_order\":10,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_appcache\",\"mtr_name\":\"Application cache\",\"mtr_order\":220,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_connect\",\"mtr_name\":\"Connection time\",\"mtr_order\":240,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_interaction\",\"mtr_name\":\"Time to interact\",\"mtr_order\":20,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":20,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_multi_step\",\"mtr_name\":\"Cumulative Time Step\",\"mtr_order\":100,\"mtr_type\":\"Cumulative\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":false,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_namelookup\",\"mtr_name\":\"Lookup time\",\"mtr_order\":230,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_pageload\",\"mtr_name\":\"Page load time\",\"mtr_order\":280,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_received\",\"mtr_name\":\"Response time\",\"mtr_order\":270,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_redirect\",\"mtr_name\":\"Redirection time\",\"mtr_order\":210,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_request\",\"mtr_name\":\"First byte time\",\"mtr_order\":260,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_security_connect\",\"mtr_name\":\"TLS time\",\"mtr_order\":250,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_step\",\"mtr_name\":\"Time Step\",\"mtr_order\":100,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_total_allsteps\",\"mtr_name\":\"Total time for all steps\",\"mtr_order\":100,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":30,\"filterEnabled\":false,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_wv_fcp\",\"mtr_name\":\"First Contentful Paint\",\"mtr_order\":-1,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_wv_fid\",\"mtr_name\":\"First Input Delay\",\"mtr_order\":-1,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_wv_inp\",\"mtr_name\":\"Interaction to Next Paint\",\"mtr_order\":-1,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_wv_lcp\",\"mtr_name\":\"Largest Contentful Paint\",\"mtr_order\":-1,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"wv_cls\",\"mtr_name\":\"Cumulative Layout Shift\",\"mtr_order\":-1,\"mtr_type\":\"User\",\"mtr_scn_type\":\"WEB\",\"mtr_unit\":\" \",\"mtr_preferred_metric\":-1,\"filterEnabled\":false,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false}],\"retries\":[],\"replays\":[],\"updates\":[],\"runningReplayId\":null,\"steps\":[{\"name\":\"Reach Centreon Demo\",\"index\":1},{\"name\":\"Log-in\",\"index\":2},{\"name\":\"Resources Status\",\"index\":3}],\"infos\":{\"active_filter\":[{\"type\":\"measurementIds\",\"items\":[\"time_step\",\"time_multi_step\",\"time_total_allsteps\"]}],\"plugin_id\":\"WEB\",\"plugin_name\":\"Web\",\"info\":{\"hasStep\":true,\"showKPI\":true,\"hasWaterfall\":true,\"hasEcoEfficiency\":true,\"showThirdPartyContent\":true},\"scenarioName\":\"Centreon Demo Parcours - Login\",\"default_plugin\":false},\"timelineDetails\":[{\"status\":1,\"startTime\":\"2024-12-30T10:23:11Z\",\"endTime\":\"2024-12-30T10:38:11Z\",\"execs\":[{\"period\":\"PT15M\",\"siteId\":\"8e9538eb-dafe-46fd-9cee-6605fe3e4f60\",\"status\":1,\"execTime\":\"2024-12-29T23:51:35Z\",\"siteName\":\"Paris (Orange)\",\"executionId\":\"BAO4HABVJLLT5B81UKVTCJS2UT.3\",\"planningTime\":\"2024-12-29T23:45:00Z\",\"thresholdExceeded\":null}]}],\"aggregate\":\"rowdata\",\"emptyResults\":[],\"retentionDateExceeded\":false}\r\n", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [ + { + "target": "header", + "modifier": "authorization", + "value": "Bearer VeryLongTokenToAuthenticate", + "invert": false, + "operator": "equals" + } + ], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": false, + "crudKey": "id", + "callbacks": [] + }, + { + "uuid": "5ced752d-467b-48e3-8564-75f1e56136f4", + "body": "{\"success\":false,\"code\":\"AUTH40001\",\"message\":\"No token provided.\"}", + "latency": 0, + "statusCode": 400, + "label": "if token not present don't send back data.", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null, + "streamingMode": null, + "streamingInterval": 0 + }, + { + "uuid": "571c4527-56d6-48bc-93d0-522efd99ed9f", + "type": "http", + "documentation": "", + "method": "post", + "endpoint": "results-api/results/eae701ac-4231-4fc5-94e3-08601ac591e9", + "responses": [ + { + "uuid": "19b10ca6-e4c9-4038-9ce2-f83a0f1639e0", + "body": "{\"kpis\":[{\"name\":\"Availability\",\"order\":0,\"type\":\"User\",\"unit\":\"percent\",\"label\":\"availability\",\"value\":100},{\"name\":\"Total time\",\"order\":100,\"type\":\"User\",\"unit\":\"ms\",\"label\":\"time_total\",\"value\":750}],\"results\":[{\"planningTime\":\"2024-12-30T10:30:00Z\",\"stepId\":\"0\",\"metric\":\"time_total\",\"duration\":750,\"count\":1,\"value\":750}],\"siteIds\":[{\"id\":\"144c7dd1-8ce9-464c-9305-3b6a530a5fc4\",\"name\":\"Singapore (AWS)\"}],\"metrics\":[{\"mtr_id\":\"time_connect\",\"mtr_name\":\"Connection time\",\"mtr_order\":220,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_namelookup\",\"mtr_name\":\"Lookup time\",\"mtr_order\":210,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_received\",\"mtr_name\":\"Response time\",\"mtr_order\":260,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_redirect\",\"mtr_name\":\"Redirection time\",\"mtr_order\":240,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_request\",\"mtr_name\":\"First byte time\",\"mtr_order\":250,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_security_connect\",\"mtr_name\":\"TLS time\",\"mtr_order\":230,\"mtr_type\":\"Technical\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":-1,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false},{\"mtr_id\":\"time_total\",\"mtr_name\":\"Total time\",\"mtr_order\":100,\"mtr_type\":\"User\",\"mtr_scn_type\":\"HTTP REQUEST\",\"mtr_unit\":\"ms\",\"mtr_preferred_metric\":10,\"filterEnabled\":true,\"filterDisabledOnMultiStep\":false,\"filterDisabledOnAllStep\":false,\"filterDisabledOnPartialStep\":false}],\"retries\":[],\"replays\":[],\"updates\":[],\"runningReplayId\":null,\"steps\":[{\"name\":\"Login\",\"index\":1}],\"infos\":{\"active_filter\":[{\"type\":\"measurementIds\",\"items\":[\"time_total\"]}],\"plugin_id\":\"HTTP REQUEST\",\"plugin_name\":\"Check HTTP\",\"info\":{\"hasStep\":false,\"showKPI\":false,\"hasWaterfall\":false},\"scenarioName\":\"Centreon Demo ping Singapore\",\"default_plugin\":false},\"timelineDetails\":[{\"status\":1,\"startTime\":\"2024-12-30T10:23:11Z\",\"endTime\":\"2024-12-30T10:38:11Z\",\"execs\":[{\"period\":\"PT15M\",\"siteId\":\"144c7dd1-8ce9-464c-9305-3b6a530a5fc4\",\"status\":1,\"execTime\":\"2024-12-30T10:15:11Z\",\"siteName\":\"Singapore (AWS)\",\"executionId\":\"8beec26b-8ff6-43df-bceb-b92894d65bbd.45\",\"planningTime\":\"2024-12-30T10:15:00Z\",\"thresholdExceeded\":null}]}],\"aggregate\":\"rowdata\",\"emptyResults\":[],\"retentionDateExceeded\":false}\r\n", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [ + { + "target": "header", + "modifier": "authorization", + "value": "Bearer VeryLongTokenToAuthenticate", + "invert": false, + "operator": "equals" + } + ], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": false, + "crudKey": "id", + "callbacks": [] + }, + { + "uuid": "8069a415-cf19-4967-a6a7-21d11c7677f5", + "body": "{\"success\":false,\"code\":\"AUTH40001\",\"message\":\"No token provided.\"}", + "latency": 0, + "statusCode": 400, + "label": "if token not present don't send back data.", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null, + "streamingMode": null, + "streamingInterval": 0 + }, + { + "uuid": "8b6089c2-b07b-45b3-af27-eed3591d2590", + "type": "http", + "documentation": "", + "method": "post", + "endpoint": "results-api/results/fc6b739e-c18c-40ab-917c-61d20dff830c", + "responses": [ + { + "uuid": "13780366-a431-4a45-9727-76a473889d7f", + "body": "{\n \"kpis\": [\n {\n \"name\": \"Availability\",\n \"order\": 0,\n \"type\": \"User\",\n \"unit\": \"percent\",\n \"label\": \"availability\",\n \"value\": 100\n },\n {\n \"name\": \"Total time for all steps\",\n \"order\": 100,\n \"type\": \"User\",\n \"unit\": \"ms\",\n \"label\": \"time_total_allsteps\",\n \"value\": 4280\n }\n ],\n \"results\": [\n {\n \"planningTime\": \"2024-12-30T10:30:00Z\",\n \"stepId\": \"3\",\n \"metric\": \"time_step\",\n \"duration\": 848,\n \"count\": 1,\n \"value\": 848\n },\n {\n \"planningTime\": \"2024-12-30T10:30:00Z\",\n \"stepId\": \"2\",\n \"metric\": \"time_step\",\n \"duration\": 898,\n \"count\": 1,\n \"value\": 898\n },\n {\n \"planningTime\": \"2024-12-30T10:30:00Z\",\n \"stepId\": \"1\",\n \"metric\": \"time_step\",\n \"duration\": 2534,\n \"count\": 1,\n \"value\": 2534\n }\n ],\n \"siteIds\": [\n {\n \"id\": \"a182ec70-c319-40de-9af0-556877fa64a1\",\n \"name\": \"GSA_POC_2_Win\"\n }\n ],\n \"metrics\": [\n {\n \"mtr_id\": \"time_multi_step\",\n \"mtr_name\": \"Cumulative Time Step\",\n \"mtr_order\": 100,\n \"mtr_type\": \"Cumulative\",\n \"mtr_scn_type\": \"DESKTOP\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_step\",\n \"mtr_name\": \"Time Step\",\n \"mtr_order\": 100,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"DESKTOP\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_total\",\n \"mtr_name\": \"Total time for a step\",\n \"mtr_order\": 100,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"DESKTOP\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": null,\n \"filterDisabledOnMultiStep\": null,\n \"filterDisabledOnAllStep\": null,\n \"filterDisabledOnPartialStep\": null\n },\n {\n \"mtr_id\": \"time_total_allsteps\",\n \"mtr_name\": \"Total time for all steps\",\n \"mtr_order\": 100,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"DESKTOP\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": 10,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n }\n ],\n \"retries\": [],\n \"replays\": [],\n \"updates\": [],\n \"runningReplayId\": null,\n \"steps\": [\n {\n \"name\": \"Clean\",\n \"index\": 1,\n \"isNeutral\": true,\n \"isMyBlock\": false\n },\n {\n \"name\": \"Run Chrome\",\n \"index\": 2\n },\n {\n \"name\": \"Dashboard 2\",\n \"index\": 3\n },\n {\n \"name\": \"Dashboard 3\",\n \"index\": 4\n },\n {\n \"name\": \"Clean\",\n \"index\": 5,\n \"isNeutral\": true,\n \"isMyBlock\": false\n }\n ],\n \"infos\": {\n \"active_filter\": [\n {\n \"type\": \"measurementIds\",\n \"items\": [\n \"time_step\",\n \"time_multi_step\",\n \"time_total_allsteps\"\n ]\n }\n ],\n \"plugin_id\": \"DESKTOP\",\n \"plugin_name\": \"Desktop\",\n \"info\": {\n \"hasStep\": true,\n \"showKPI\": false,\n \"hasWaterfall\": false,\n \"showThirdPartyContent\": false\n },\n \"scenarioName\": \"AKILA - (Business App) \",\n \"default_plugin\": false\n },\n \"timelineDetails\": [\n {\n \"status\": 1,\n \"startTime\": \"2024-12-30T10:23:11Z\",\n \"endTime\": \"2024-12-30T10:38:11Z\",\n \"execs\": [\n {\n \"period\": \"PT10M\",\n \"siteId\": \"a182ec70-c319-40de-9af0-556877fa64a1\",\n \"status\": 1,\n \"execTime\": \"2024-12-30T09:30:23Z\",\n \"siteName\": \"GSA_POC_2_Win\",\n \"executionId\": \"22dd8614-400c-40e5-9689-57c48c328055.27\",\n \"planningTime\": \"2024-12-30T09:30:00Z\",\n \"thresholdExceeded\": null\n }\n ]\n }\n ],\n \"aggregate\": \"rowdata\",\n \"emptyResults\": [],\n \"retentionDateExceeded\": false\n}", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [ + { + "target": "header", + "modifier": "authorization", + "value": "Bearer VeryLongTokenToAuthenticate", + "invert": false, + "operator": "equals" + } + ], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": false, + "crudKey": "id", + "callbacks": [] + }, + { + "uuid": "18a93ed3-0df4-4287-8d1e-300a0229c683", + "body": "{\"success\":false,\"code\":\"AUTH40001\",\"message\":\"No token provided.\"}", + "latency": 0, + "statusCode": 400, + "label": "if token not present don't send back data.", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null, + "streamingMode": null, + "streamingInterval": 0 + }, + { + "uuid": "74a6704c-607b-4f44-9cc4-1af9dfab767b", + "type": "http", + "documentation": "", + "method": "post", + "endpoint": "results-api/results/fe1ca10e-1cf6-45c8-a7e9-b9b85272c086", + "responses": [ + { + "uuid": "2ae43dd0-c2e5-483b-92a8-199d2af8a6c9", + "body": "{\n \"kpis\": [\n {\n \"name\": \"Availability\",\n \"order\": 0,\n \"type\": \"User\",\n \"unit\": \"percent\",\n \"label\": \"availability\",\n \"value\": 100\n },\n {\n \"name\": \"Time Total Allsteps\",\n \"order\": 10,\n \"type\": \"User\",\n \"unit\": \"ms\",\n \"label\": \"time_total_allsteps\",\n \"value\": 192\n }\n ],\n \"results\": [\n {\n \"planningTime\": \"2024-12-30T10:30:00Z\",\n \"stepId\": \"0\",\n \"metric\": \"time_step\",\n \"duration\": 307,\n \"count\": 2,\n \"value\": 154\n },\n {\n \"planningTime\": \"2024-12-30T10:30:00Z\",\n \"stepId\": \"1\",\n \"metric\": \"time_step\",\n \"duration\": 45,\n \"count\": 2,\n \"value\": 23\n },\n {\n \"planningTime\": \"2024-12-30T10:30:00Z\",\n \"stepId\": \"2\",\n \"metric\": \"time_step\",\n \"duration\": 31,\n \"count\": 2,\n \"value\": 16\n }\n ],\n \"siteIds\": [\n {\n \"id\": \"76300f93-1714-4235-aa20-105d0815b4e0\",\n \"name\": \"Paris (Iliad)\"\n },\n {\n \"id\": \"d1c377bf-745f-4d63-b25f-904b16582649\",\n \"name\": \"Paris (SFR)\"\n }\n ],\n \"metrics\": [\n {\n \"mtr_id\": \"dns\",\n \"mtr_name\": \"Dns\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"download\",\n \"mtr_name\": \"Download\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"firstByte\",\n \"mtr_name\": \"FirstByte\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"prepare\",\n \"mtr_name\": \"Prepare\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"process\",\n \"mtr_name\": \"Process\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"responseTime\",\n \"mtr_name\": \"ResponseTime\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"secureHandshake\",\n \"mtr_name\": \"SecureHandshake\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"tcp\",\n \"mtr_name\": \"Tcp\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_step\",\n \"mtr_name\": \"Time Step\",\n \"mtr_order\": 10,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": true,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_total_allsteps\",\n \"mtr_name\": \"Time Total Allsteps\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": true\n },\n {\n \"mtr_id\": \"total\",\n \"mtr_name\": \"Total\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"wait\",\n \"mtr_name\": \"Wait\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_multi_step\",\n \"mtr_name\": \"Cumulative Time Step\",\n \"mtr_order\": 100,\n \"mtr_type\": \"Cumulative\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": false\n }\n ],\n \"retries\": [],\n \"replays\": [],\n \"updates\": [],\n \"runningReplayId\": null,\n \"steps\": [\n {\n \"name\": \"Dashboard v1\",\n \"index\": 1\n },\n {\n \"name\": \"Dashboard v2\",\n \"index\": 2\n },\n {\n \"name\": \"Dashboard v3\",\n \"index\": 3\n }\n ],\n \"infos\": {\n \"active_filter\": [\n {\n \"type\": \"measurementIds\",\n \"items\": [\n \"time_step\",\n \"time_total_allsteps\",\n \"time_multi_step\"\n ]\n }\n ],\n \"plugin_id\": \"API\",\n \"plugin_name\": \"Api\",\n \"info\": {\n \"hasStep\": true,\n \"showKPI\": false,\n \"hasWaterfall\": false\n },\n \"scenarioName\": \"AKILA - (API) \",\n \"default_plugin\": true\n },\n \"timelineDetails\": [\n {\n \"status\": 1,\n \"startTime\": \"2024-12-30T10:23:11Z\",\n \"endTime\": \"2024-12-30T10:38:11Z\",\n \"execs\": [\n {\n \"period\": \"PT10M\",\n \"siteId\": \"76300f93-1714-4235-aa20-105d0815b4e0\",\n \"status\": 1,\n \"execTime\": \"2024-12-30T10:10:55Z\",\n \"siteName\": \"Paris (Iliad)\",\n \"executionId\": \"B5KPKPSB34GYUQB532O0N076XYX.31\",\n \"planningTime\": \"2024-12-30T10:10:00Z\",\n \"thresholdExceeded\": null\n }\n ]\n }\n ],\n \"aggregate\": \"rowdata\",\n \"emptyResults\": [],\n \"retentionDateExceeded\": false\n}", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [ + { + "target": "header", + "modifier": "authorization", + "value": "Bearer VeryLongTokenToAuthenticate", + "invert": false, + "operator": "equals" + } + ], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": false, + "crudKey": "id", + "callbacks": [] + }, + { + "uuid": "f50517b2-8af5-4389-bc9f-d50fd8db2712", + "body": "{\"success\":false,\"code\":\"AUTH40001\",\"message\":\"No token provided.\"}", + "latency": 0, + "statusCode": 400, + "label": "if token not present don't send back data.", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null, + "streamingMode": null, + "streamingInterval": 0 + }, + { + "uuid": "a184ab53-5369-4916-b204-5fd1e5146bbd", + "type": "http", + "documentation": "used by mode incidents of ekara plugin", + "method": "post", + "endpoint": "results-api/incidents", + "responses": [ + { + "uuid": "23166d3b-7f1a-47b3-a13e-b9f3534bd976", + "body": "[\n {\n \"ssr_id\": \"25423513\",\n \"startTime\": \"2024-12-30T23:07:08Z\",\n \"status\": 2,\n \"execList\": [\n {\n \"period\": \"PT1H\",\n \"siteId\": \"8e9538eb-dafe-46fd-9cee-6605fe3e4f60\",\n \"status\": 2,\n \"execTime\": \"2024-12-30T23:07:08Z\",\n \"siteName\": \"Paris (Orange)\",\n \"executionId\": \"1e75b3fb-56b1-4d33-9da9-a4c46e29dfd2.0\",\n \"planningTime\": \"2024-12-30T23:00:00Z\",\n \"thresholdExceeded\": null\n }\n ],\n \"scn_id\": \"478a6915-1c00-4e85-9fe2-7d919e28ce88\",\n \"scnName\": \"Centreon Demo Navigation\",\n \"application\": \"Centreon\",\n \"severity\": \"Critical\",\n \"duration\": \"PT1H57M7S\",\n \"comments\": false,\n \"dataExclutionId\": null,\n \"startProcessTime\": null,\n \"dataExclutionStatus\": null\n },\n {\n \"ssr_id\": \"25422458\",\n \"startTime\": \"2024-12-30T20:09:21Z\",\n \"endTime\": \"2024-12-30T21:06:49Z\",\n \"status\": 2,\n \"execList\": [\n {\n \"period\": \"PT1H\",\n \"siteId\": \"8e9538eb-dafe-46fd-9cee-6605fe3e4f60\",\n \"status\": 2,\n \"execTime\": \"2024-12-30T20:09:21Z\",\n \"siteName\": \"Paris (Orange)\",\n \"executionId\": \"bbab21cf-031e-46a9-bb3d-03e5a9bd3cce.21\",\n \"planningTime\": \"2024-12-30T20:00:00Z\",\n \"thresholdExceeded\": null\n }\n ],\n \"scn_id\": \"478a6915-1c00-4e85-9fe2-7d919e28ce88\",\n \"scnName\": \"Centreon Demo Navigation\",\n \"application\": \"Centreon\",\n \"severity\": \"Critical\",\n \"duration\": \"PT57M28S\",\n \"comments\": false,\n \"dataExclutionId\": null,\n \"startProcessTime\": null,\n \"dataExclutionStatus\": null\n },\n {\n \"ssr_id\": \"25421962\",\n \"startTime\": \"2024-12-30T18:52:43Z\",\n \"endTime\": \"2024-12-30T19:07:26Z\",\n \"status\": 2,\n \"execList\": [\n {\n \"period\": \"PT15M\",\n \"siteId\": \"76300f93-1714-4235-aa20-105d0815b4e0\",\n \"status\": 2,\n \"execTime\": \"2024-12-30T18:52:43Z\",\n \"siteName\": \"Paris (Iliad)\",\n \"executionId\": \"37ca8215-f72b-4982-b088-58e68b701b5d.31\",\n \"planningTime\": \"2024-12-30T18:45:00Z\",\n \"thresholdExceeded\": null\n },\n {\n \"period\": \"PT15M\",\n \"siteId\": \"d1c377bf-745f-4d63-b25f-904b16582649\",\n \"status\": 2,\n \"execTime\": \"2024-12-30T19:01:39Z\",\n \"siteName\": \"Paris (SFR)\",\n \"executionId\": \"e34837a6-f807-4347-a454-e505f65be258.32\",\n \"planningTime\": \"2024-12-30T19:00:00Z\",\n \"thresholdExceeded\": null\n }\n ],\n \"scn_id\": \"09fe2561-315b-470f-a7ac-9c30fbd2e0fb\",\n \"scnName\": \"AKILA - (Web)\",\n \"application\": \"AKILA\",\n \"severity\": \"Critical\",\n \"duration\": \"PT14M43S\",\n \"comments\": false,\n \"dataExclutionId\": null,\n \"startProcessTime\": null,\n \"dataExclutionStatus\": null\n },\n {\n \"ssr_id\": \"25421291\",\n \"startTime\": \"2024-12-30T17:09:44Z\",\n \"endTime\": \"2024-12-30T18:01:19Z\",\n \"status\": 2,\n \"execList\": [\n {\n \"period\": \"PT1H\",\n \"siteId\": \"8e9538eb-dafe-46fd-9cee-6605fe3e4f60\",\n \"status\": 2,\n \"execTime\": \"2024-12-30T17:09:44Z\",\n \"siteName\": \"Paris (Orange)\",\n \"executionId\": \"2ea22968-f89d-4638-838a-47774b0c91f5.18\",\n \"planningTime\": \"2024-12-30T17:00:00Z\",\n \"thresholdExceeded\": null\n }\n ],\n \"scn_id\": \"478a6915-1c00-4e85-9fe2-7d919e28ce88\",\n \"scnName\": \"Centreon Demo Navigation\",\n \"application\": \"Centreon\",\n \"severity\": \"Critical\",\n \"duration\": \"PT51M35S\",\n \"comments\": false,\n \"dataExclutionId\": null,\n \"startProcessTime\": null,\n \"dataExclutionStatus\": null\n }\n]", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + }, + { + "uuid": "a2e22546-df45-4513-9163-3ef7520bc17d", + "body": "[]", + "latency": 0, + "statusCode": 200, + "label": "empty response", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [ + { + "target": "body", + "modifier": "$.", + "value": "SendEmptyValue", + "invert": false, + "operator": "array_includes" + } + ], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": false, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null, + "streamingMode": null, + "streamingInterval": 0 + } + ], + "rootChildren": [ + { + "type": "route", + "uuid": "655cde3b-919e-4849-932b-8f5e8f7c000e" + }, + { + "type": "route", + "uuid": "c5445880-be60-406c-b722-a8ca5ef5068b" + }, + { + "type": "route", + "uuid": "a6aab3c4-806e-4d3d-a3ba-2be0dec50ef5" + }, + { + "type": "route", + "uuid": "12d2126c-a45d-40b1-82c7-abc002d2d235" + }, + { + "type": "route", + "uuid": "73af6aa6-3809-45cf-8c3f-a057ba5fc7a5" + }, + { + "type": "route", + "uuid": "9a91468b-aae8-40a7-994f-2aa7536f7c49" + }, + { + "type": "route", + "uuid": "129e5dd8-feb9-4405-926f-ef2944dec47c" + }, + { + "type": "route", + "uuid": "c05b9a70-fe37-44c8-a099-2f393901290c" + }, + { + "type": "route", + "uuid": "0c06529b-c638-46ef-b9f5-83bcb54b077d" + }, + { + "type": "route", + "uuid": "756da49e-1ce5-4a1e-a1a0-b90fe6a79046" + }, + { + "type": "route", + "uuid": "2646ada3-d2e2-459e-97e0-6bc0c9a226e3" + }, + { + "type": "route", + "uuid": "571c4527-56d6-48bc-93d0-522efd99ed9f" + }, + { + "type": "route", + "uuid": "8b6089c2-b07b-45b3-af27-eed3591d2590" + }, + { + "type": "route", + "uuid": "74a6704c-607b-4f44-9cc4-1af9dfab767b" + }, + { + "type": "route", + "uuid": "a184ab53-5369-4916-b204-5fd1e5146bbd" + } + ], + "proxyMode": false, + "proxyHost": "", + "proxyRemovePrefix": false, + "tlsOptions": { + "enabled": false, + "type": "CERT", + "pfxPath": "", + "certPath": "", + "keyPath": "", + "caPath": "", + "passphrase": "" + }, + "cors": true, + "headers": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With" + } + ], + "proxyReqHeaders": [ + { + "key": "", + "value": "" + } + ], + "proxyResHeaders": [ + { + "key": "", + "value": "" + } + ], + "data": [], + "callbacks": [] +} \ No newline at end of file diff --git a/tests/monitoring/iplabel/ekara/restapi/scenarios.robot b/tests/monitoring/iplabel/ekara/restapi/scenarios.robot new file mode 100644 index 000000000..2854a4947 --- /dev/null +++ b/tests/monitoring/iplabel/ekara/restapi/scenarios.robot @@ -0,0 +1,42 @@ +*** Settings *** +Documentation Check Iplabel scenarios + +Resource ${CURDIR}${/}..${/}..${/}..${/}..${/}resources/import.resource + +Suite Setup Start Mockoon ${MOCKOON_JSON} +Suite Teardown Stop Mockoon +Test Timeout 120s + + +*** Variables *** +${MOCKOON_JSON} ${CURDIR}${/}monitoring-iplabel-ekara.json +${cmd} ${CENTREON_PLUGINS} +... --plugin=apps::monitoring::iplabel::ekara::restapi::plugin +... --hostname=localhost +... --api-username='username' +... --api-password='password' +... --port='3000' +... --proto='http' + +*** Test Cases *** +scenario ${tc} + [Documentation] Check Iplabel scenarios + [Tags] monitoring iplabel restapi + + ${command} Catenate + ... ${cmd} + ... --mode=scenarios + ... ${extra_options} + + Ctn Run Command And Check Result As Strings ${command} ${expected_result} + + Examples: tc extra_options expected_result -- + ... 1 --filter-name='Centreon Demo Navigation|Centreon Demo ping NA' --output-ignore-perfdata CRITICAL: Scenario 'Centreon Demo Navigation': status: Failure (2) WARNING: Scenario 'Centreon Demo ping NA': status: Degraded (8) + ... 2 --filter-name='AKILA - Business App' OK: Scenario 'AKILA - Business App': status: Success (1), availability: 100%, time total all steps: 4280ms - All steps are ok | 'AKILA - Business App#scenario.availability.percentage'=100%;;;0;100 'AKILA - Business App#scenario.time.allsteps.total.milliseconds'=4280ms;;;0; 'AKILA - Business App~Dashboard 2#scenario.step.time.milliseconds'=898ms;;;0; 'AKILA - Business App~Dashboard 3#scenario.step.time.milliseconds'=848ms;;;0; 'AKILA - Business App~Run Chrome#scenario.step.time.milliseconds'=2534ms;;;0; + ... 3 --filter-name='wrong currentstatus.*' WARNING: Scenario 'wrong currentstatus, no perfdata': status: Unknown (14) - Scenario 'wrong currentstatus, no perfdata' Don't have any performance data, please try to add a bigger timeframe + ... 4 --filter-name='not a scenario name' UNKNOWN: No scenario found + ... 5 --filter-id='09fe2561.*' --warning-time-total-allsteps='30' --output-ignore-perfdata WARNING: Scenario 'AKILA - (Web) ': time total all steps: 5822ms + ... 6 --filter-status='2' --output-ignore-perfdata CRITICAL: Scenario 'Centreon Demo Navigation': status: Failure (2) + ... 7 --filter-status='2' --filter-siteid='site' --filter-workspaceid='workspace' --output-ignore-perfdata CRITICAL: Scenario 'Centreon Demo Navigation': status: Failure (2) + ... 8 --filter-type='not a scenario type' UNKNOWN: No scenario found + ... 9 --api-password='Wrongpassword' --api-username='wrongUsername' UNKNOWN: Authentication endpoint returns error code 'Wrong email or password' (add --debug option for detailed message) diff --git a/tests/network/aruba/aoscx/snmp/slim_aoscx-stack.snmpwalk b/tests/network/aruba/aoscx/snmp/slim_aoscx-stack.snmpwalk new file mode 100644 index 000000000..2b6657e0a --- /dev/null +++ b/tests/network/aruba/aoscx/snmp/slim_aoscx-stack.snmpwalk @@ -0,0 +1,92 @@ +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.2.1 = STRING: Anonymized 228 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.2.2 = STRING: Anonymized 252 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.2.3 = STRING: Anonymized 103 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.2.4 = STRING: Anonymized 007 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.3.1 = Hex-STRING: 90 20 C2 47 9D C0 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.3.2 = Hex-STRING: 38 21 C7 36 39 80 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.3.3 = Hex-STRING: 94 60 D5 F5 B4 C0 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.3.4 = Hex-STRING: 94 60 D5 F5 E5 00 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.4.1 = INTEGER: 2 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.4.2 = INTEGER: 2 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.4.3 = INTEGER: 2 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.4.4 = INTEGER: 2 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.5.1 = INTEGER: 2 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.5.2 = INTEGER: 2 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.5.3 = INTEGER: 2 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.5.4 = INTEGER: 2 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.6.1 = INTEGER: 200 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.6.2 = INTEGER: 150 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.6.3 = INTEGER: 128 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.6.4 = INTEGER: 128 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.7.1 = INTEGER: 3 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.7.2 = INTEGER: 1 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.7.3 = INTEGER: 1 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.7.4 = INTEGER: 1 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.8.1 = INTEGER: 101001 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.8.2 = INTEGER: 201001 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.8.3 = INTEGER: 301001 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.8.4 = INTEGER: 401001 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.9.1 = INTEGER: 3 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.9.2 = INTEGER: 4 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.9.3 = INTEGER: 5 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.9.4 = INTEGER: 5 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.10.1 = STRING: Anonymized 098 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.10.2 = STRING: Anonymized 114 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.10.3 = STRING: Anonymized 029 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.10.4 = STRING: Anonymized 197 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.11.1 = Timeticks: (961363900) 111 days, 6:27:19.00 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.11.2 = Timeticks: (961365700) 111 days, 6:27:37.00 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.11.3 = Timeticks: (961365400) 111 days, 6:27:34.00 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.11.4 = Timeticks: (961372700) 111 days, 6:28:47.00 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.12.1 = OID: 1.3.6.1.4.1.11.2.3.7.11.181.23 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.12.2 = OID: 1.3.6.1.4.1.11.2.3.7.11.181.25 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.12.3 = OID: 1.3.6.1.4.1.11.2.3.7.11.181.23 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.12.4 = OID: 1.3.6.1.4.1.11.2.3.7.11.181.23 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.14.1 = STRING: Anonymized 160 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.14.2 = STRING: Anonymized 018 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.14.3 = STRING: Anonymized 076 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.14.4 = STRING: Anonymized 042 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.15.1 = STRING: Anonymized 197 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.15.2 = STRING: Anonymized 018 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.15.3 = STRING: Anonymized 161 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.15.4 = STRING: Anonymized 252 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.16.1 = STRING: Anonymized 142 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.16.2 = STRING: Anonymized 033 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.16.3 = STRING: Anonymized 039 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.16.4 = STRING: Anonymized 188 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.17.1 = INTEGER: 1 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.17.2 = INTEGER: 1 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.17.3 = INTEGER: 1 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.17.4 = INTEGER: 1 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.18.1 = INTEGER: 1 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.18.2 = INTEGER: 2 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.18.3 = INTEGER: 3 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.18.4 = INTEGER: 4 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.19.1 = INTEGER: 0 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.19.2 = INTEGER: 0 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.19.3 = INTEGER: 0 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.19.4 = INTEGER: 0 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.20.1 = INTEGER: 339186176 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.20.2 = INTEGER: 339186176 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.20.3 = INTEGER: 339186176 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.20.4 = INTEGER: 339186176 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.21.1 = INTEGER: 215841056 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.21.2 = INTEGER: 232473096 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.21.3 = INTEGER: 248044452 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.3.1.21.4 = INTEGER: 248044452 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.5.1.3.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.5.1.3.1.2.1 = INTEGER: 1 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.5.1.3.2.1.1 = INTEGER: 1 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.5.1.3.2.2.1 = INTEGER: 1 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.5.1.4.1.1.1 = STRING: "2.2" +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.5.1.4.1.2.1 = STRING: "2.1" +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.5.1.4.2.1.1 = STRING: "1.2" +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.5.1.4.2.2.1 = STRING: "1.1" +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.5.1.5.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.5.1.5.1.2.1 = INTEGER: 1 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.5.1.5.2.1.1 = INTEGER: 1 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.5.1.5.2.2.1 = INTEGER: 1 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.5.1.8.1.1.1 = INTEGER: 1 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.5.1.8.1.2.1 = INTEGER: 1 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.5.1.8.2.1.1 = INTEGER: 1 +.1.3.6.1.4.1.11.2.14.11.5.1.116.1.5.1.8.2.2.1 = INTEGER: 1 \ No newline at end of file diff --git a/tests/network/aruba/aoscx/snmp/stack.robot b/tests/network/aruba/aoscx/snmp/stack.robot new file mode 100644 index 000000000..85389a690 --- /dev/null +++ b/tests/network/aruba/aoscx/snmp/stack.robot @@ -0,0 +1,37 @@ +*** Settings *** +Documentation Check stack members. + +Resource ${CURDIR}${/}..${/}..${/}..${/}..${/}resources/import.resource + +Test Timeout 120s +Test Setup Ctn Generic Suite Setup + +*** Variables *** +${CMD} ${CENTREON_PLUGINS} --plugin=network::aruba::aoscx::snmp::plugin + +*** Test Cases *** +stack ${tc} + [Tags] network aruba + ${command} Catenate + ... ${CMD} + ... --mode=stack + ... --hostname=${HOSTNAME} + ... --snmp-version=${SNMPVERSION} + ... --snmp-port=${SNMPPORT} + ... --snmp-community=network/aruba/aoscx/snmp/slim_aoscx-stack + ... --snmp-timeout=1 + ... ${extra_options} + + # first run to build cache + Run ${command} + # second run to control the output + Ctn Run Command And Check Result As Strings ${command} ${expected_result} + + Examples: tc extra_options expected_result -- + ... 1 --verbose OK: All stack members are ok checking stack member 'Anonymized 018' role: active [state: standby] port '1' operational status: up [admin status: enabled] port '2' operational status: up [admin status: enabled] checking stack member 'Anonymized 042' role: active [state: member] checking stack member 'Anonymized 076' role: active [state: member] checking stack member 'Anonymized 160' role: notReady [state: commander] port '1' operational status: up [admin status: enabled] port '2' operational status: up [admin status: enabled] + ... 2 --unknown-member-status='${PERCENT}\\{role\\} ne "notReady"' UNKNOWN: Stack member 'Anonymized 018' role: active [state: standby] - Stack member 'Anonymized 042' role: active [state: member] - Stack member 'Anonymized 076' role: active [state: member] + ... 3 --warning-member-status='${PERCENT}\\{state\\} ne "down"' WARNING: Stack member 'Anonymized 018' role: active [state: standby] - Stack member 'Anonymized 042' role: active [state: member] - Stack member 'Anonymized 076' role: active [state: member] - Stack member 'Anonymized 160' role: notReady [state: commander] + ... 4 --critical-member-status='${PERCENT}\\{role\\} eq ${PERCENT}\\{roleLast\\}' CRITICAL: Stack member 'Anonymized 018' role: active [state: standby] - Stack member 'Anonymized 042' role: active [state: member] - Stack member 'Anonymized 076' role: active [state: member] - Stack member 'Anonymized 160' role: notReady [state: commander] + ... 5 --unknown-port-status='${PERCENT}\\{oper_status\\} ne "down"' UNKNOWN: Stack member 'Anonymized 018' port '1' operational status: up [admin status: enabled] - port '2' operational status: up [admin status: enabled] - Stack member 'Anonymized 160' port '1' operational status: up [admin status: enabled] - port '2' operational status: up [admin status: enabled] + ... 6 --warning-port-status='${PERCENT}\\{admin_status\\} ne "down"' WARNING: Stack member 'Anonymized 018' port '1' operational status: up [admin status: enabled] - port '2' operational status: up [admin status: enabled] - Stack member 'Anonymized 160' port '1' operational status: up [admin status: enabled] - port '2' operational status: up [admin status: enabled] + ... 7 --critical-port-status='${PERCENT}\\{oper_status\\} eq "up" and ${PERCENT}\\{display\\} ne "up"' CRITICAL: Stack member 'Anonymized 018' port '1' operational status: up [admin status: enabled] - port '2' operational status: up [admin status: enabled] - Stack member 'Anonymized 160' port '1' operational status: up [admin status: enabled] - port '2' operational status: up [admin status: enabled] diff --git a/tests/network/backbox/restapi/backbox.json b/tests/network/backbox/restapi/backbox.json index 1e2761852..0167e93d4 100644 --- a/tests/network/backbox/restapi/backbox.json +++ b/tests/network/backbox/restapi/backbox.json @@ -94,6 +94,64 @@ } ], "responseMode": null + }, + { + "uuid": "7d03fa0c-863e-4364-84be-a4c77a75d392", + "type": "http", + "documentation": "", + "method": "post", + "endpoint": "rest/data/token/api/devices/dynamic", + "responses": [ + { + "uuid": "173704ee-4bd7-408d-8fcb-e05dd319bf77", + "body": "[\n {\n \"id\": 16949,\n \"historyStatus\": \"FAILURE\",\n \"statusReason\": \"The failed expected result was found: (No route to host)\",\n \"lastBackupDate\": 1733990419000,\n \"fileSize\": 0,\n \"fileName\": null,\n \"isDiffer\": 0,\n \"backupDuration\": \"\",\n \"optionId\": -9000314,\n \"baseline\": false,\n \"lastBackupDateForUI\": \"2024-12-12T08:00+0000\",\n \"deviceId\": 1,\n \"intelliChecksStatus\": \"0\",\n \"sameBackupPointer\": 0,\n \"inMaintenance\": false,\n \"restorable\": false,\n \"comparable\": false,\n \"retention\": null,\n \"siteId\": 0,\n \"siteName\": \"Global\",\n \"agentDownloadStatus\": -1,\n \"uploadedToRemote\": false,\n \"actionInitiator\": \"Schedule\",\n \"comment\": null,\n \"executiontype\": \"BACKUP\"\n },\n {\n \"id\": 16951,\n \"historyStatus\": \"FAILURE\",\n \"statusReason\": \"No backup data\",\n \"lastBackupDate\": 1733990403000,\n \"fileSize\": 0,\n \"fileName\": null,\n \"isDiffer\": 0,\n \"backupDuration\": \"\",\n \"optionId\": -9000143,\n \"baseline\": false,\n \"lastBackupDateForUI\": \"2024-12-12T08:00+0000\",\n \"deviceId\": 2,\n \"intelliChecksStatus\": \"\",\n \"sameBackupPointer\": 0,\n \"inMaintenance\": false,\n \"restorable\": false,\n \"comparable\": false,\n \"retention\": null,\n \"siteId\": 0,\n \"siteName\": \"Global\",\n \"agentDownloadStatus\": -1,\n \"uploadedToRemote\": false,\n \"actionInitiator\": \"Schedule\",\n \"comment\": null,\n \"executiontype\": \"BACKUP\"\n },\n {\n \"id\": 16953,\n \"historyStatus\": \"SUSPECT\",\n \"statusReason\": \"Unknown status\",\n \"lastBackupDate\": 1733990403000,\n \"fileSize\": 0,\n \"fileName\": null,\n \"isDiffer\": 0,\n \"backupDuration\": \"472\",\n \"optionId\": -275,\n \"baseline\": false,\n \"lastBackupDateForUI\": \"2024-12-12T08:00+0000\",\n \"deviceId\": 3,\n \"intelliChecksStatus\": \"0\",\n \"sameBackupPointer\": 0,\n \"inMaintenance\": false,\n \"restorable\": false,\n \"comparable\": false,\n \"retention\": null,\n \"siteId\": 0,\n \"siteName\": \"Global\",\n \"agentDownloadStatus\": -1,\n \"uploadedToRemote\": false,\n \"actionInitiator\": \"Schedule\",\n \"comment\": null,\n \"executiontype\": \"BACKUP\"\n },\n {\n \"id\": 16952,\n \"historyStatus\": \"SUCCESS\",\n \"statusReason\": \"\",\n \"lastBackupDate\": 1733990403000,\n \"fileSize\": 0,\n \"fileName\": null,\n \"isDiffer\": 0,\n \"backupDuration\": \"537\",\n \"optionId\": -509,\n \"baseline\": false,\n \"lastBackupDateForUI\": \"2024-12-12T08:00+0000\",\n \"deviceId\": 4,\n \"intelliChecksStatus\": \"\",\n \"sameBackupPointer\": 0,\n \"inMaintenance\": false,\n \"restorable\": false,\n \"comparable\": false,\n \"retention\": null,\n \"siteId\": 0,\n \"siteName\": \"Global\",\n \"agentDownloadStatus\": -1,\n \"uploadedToRemote\": false,\n \"actionInitiator\": \"Schedule\",\n \"comment\": null,\n \"executiontype\": \"BACKUP\"\n },\n {\n \"id\": 16954,\n \"historyStatus\": \"SUCCESS\",\n \"statusReason\": \"\",\n \"lastBackupDate\": 1733990403000,\n \"fileSize\": 0,\n \"fileName\": null,\n \"isDiffer\": 0,\n \"backupDuration\": \"143\",\n \"optionId\": -9000430,\n \"baseline\": false,\n \"lastBackupDateForUI\": \"2024-12-12T08:00+0000\",\n \"deviceId\": 5,\n \"intelliChecksStatus\": \"0\",\n \"sameBackupPointer\": 0,\n \"inMaintenance\": false,\n \"restorable\": false,\n \"comparable\": false,\n \"retention\": null,\n \"siteId\": 0,\n \"siteName\": \"Global\",\n \"agentDownloadStatus\": -1,\n \"uploadedToRemote\": false,\n \"actionInitiator\": \"Schedule\",\n \"comment\": null,\n \"executiontype\": \"BACKUP\"\n }\n]", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null + }, + { + "uuid": "709c7a4e-f6d2-41f7-91be-b6373756b619", + "type": "http", + "documentation": "", + "method": "get", + "endpoint": "rest/data/token/api/devices", + "responses": [ + { + "uuid": "4f4823f9-4470-4833-b129-3f69d452e937", + "body": "[\n {\n \"deviceName\": \"Cisco C8000\",\n \"siteId\": 0,\n \"host\": \"192.168.1.1\",\n \"vendorId\": 5,\n \"productId\": 56,\n \"versionId\": 97,\n \"optionId\": 55697,\n \"groupId\": 1,\n \"retentionId\": 0,\n \"port\": 22,\n \"debugMode\": false,\n \"authenticationType\": \"1\",\n \"authenticationTemplateIds\": null,\n \"userName\": \"admin\",\n \"password\": \"safeway_blank\",\n \"su\": \"\",\n \"suPassword\": \"safeway_blank\",\n \"prompt\": null,\n \"commandUserName\": \"\",\n \"commandPassword\": \"safeway_blank\",\n \"snmpCommunity\": \"safeway_blank\",\n \"snmpVersion\": \"\",\n \"serverIp\": null,\n \"agentId\": 0,\n \"backupSizeDeviation\": false,\n \"natHost\": \"\",\n \"description\": null,\n \"backupSizeDeviationPercentage\": null,\n \"externalId\": \"FD12345\",\n \"enableAccess\": false,\n \"inMaintenanceMode\": false,\n \"enableIntelliChecks\": false,\n \"collected\": false,\n \"compareExceptions\": null,\n \"notes\": null,\n \"deviceAccessDetails\": null,\n \"enableNvm\": false,\n \"deviceId\": 1,\n \"notesId\": 0,\n \"groupName\": null,\n \"vendorName\": null,\n \"productName\": null,\n \"versionName\": null,\n \"siteName\": null,\n \"optionName\": null,\n \"productType\": null,\n \"productTypeName\": null,\n \"lastBackupDate\": 1733918420000,\n \"lastBackupDateToShow\": \"2024-12-11 12:00:20.0\",\n \"lastBackupId\": 16888,\n \"retention\": null,\n \"agentName\": null,\n \"backupCustomField1\": null,\n \"backupCustomField2\": null,\n \"intelliChecksStatus\": null,\n \"agentGroupId\": 0,\n \"deviceCustomFields\": null,\n \"optionCustomFields\": null,\n \"lastSuccessfulBackupDate\": \"2024-11-06 12:00:45.0\",\n \"configurationChanged\": \"no\",\n \"discoverySnmpRespond\": false,\n \"backupSize\": null,\n \"failureReason\": null,\n \"backupFailureRetry\": 0,\n \"backupFailureRetrySleepTime\": 0,\n \"cloudVault\": null,\n \"technicalSurveyItems\": null\n },\n {\n \"deviceName\": \"Palo Alto Firewall\",\n \"siteId\": 0,\n \"host\": \"192.168.1.2\",\n \"vendorId\": 48,\n \"productId\": 13,\n \"versionId\": 45,\n \"optionId\": 481345,\n \"groupId\": 1,\n \"retentionId\": 0,\n \"port\": 22,\n \"debugMode\": false,\n \"authenticationType\": \"1\",\n \"authenticationTemplateIds\": null,\n \"userName\": \"admin\",\n \"password\": \"safeway_blank\",\n \"su\": \"\",\n \"suPassword\": \"safeway_blank\",\n \"prompt\": null,\n \"commandUserName\": \"\",\n \"commandPassword\": \"safeway_blank\",\n \"snmpCommunity\": \"safeway_blank\",\n \"snmpVersion\": \"\",\n \"serverIp\": null,\n \"agentId\": 0,\n \"backupSizeDeviation\": false,\n \"natHost\": \"\",\n \"description\": null,\n \"backupSizeDeviationPercentage\": null,\n \"externalId\": null,\n \"enableAccess\": false,\n \"inMaintenanceMode\": false,\n \"enableIntelliChecks\": false,\n \"collected\": false,\n \"compareExceptions\": null,\n \"notes\": null,\n \"deviceAccessDetails\": null,\n \"enableNvm\": false,\n \"deviceId\": 2,\n \"notesId\": 0,\n \"groupName\": null,\n \"vendorName\": null,\n \"productName\": null,\n \"versionName\": null,\n \"siteName\": null,\n \"optionName\": null,\n \"productType\": null,\n \"productTypeName\": null,\n \"lastBackupDate\": 1733918401000,\n \"lastBackupDateToShow\": \"2024-12-11 12:00:01.0\",\n \"lastBackupId\": 16890,\n \"retention\": null,\n \"agentName\": null,\n \"backupCustomField1\": null,\n \"backupCustomField2\": null,\n \"intelliChecksStatus\": null,\n \"agentGroupId\": 0,\n \"deviceCustomFields\": null,\n \"optionCustomFields\": null,\n \"lastSuccessfulBackupDate\": \"2024-11-06 12:00:03.0\",\n \"configurationChanged\": \"no\",\n \"discoverySnmpRespond\": false,\n \"backupSize\": null,\n \"failureReason\": null,\n \"backupFailureRetry\": 0,\n \"backupFailureRetrySleepTime\": 0,\n \"cloudVault\": null,\n \"technicalSurveyItems\": null\n },\n {\n \"deviceName\": \"Fortinet Fortigate\",\n \"siteId\": 0,\n \"host\": \"192.168.1.3\",\n \"vendorId\": 34,\n \"productId\": 80,\n \"versionId\": 12,\n \"optionId\": 348012,\n \"groupId\": 2,\n \"retentionId\": 0,\n \"port\": 22,\n \"debugMode\": false,\n \"authenticationType\": \"1\",\n \"authenticationTemplateIds\": null,\n \"userName\": \"admin\",\n \"password\": \"safeway_blank\",\n \"su\": \"\",\n \"suPassword\": \"safeway_blank\",\n \"prompt\": null,\n \"commandUserName\": \"\",\n \"commandPassword\": \"safeway_blank\",\n \"snmpCommunity\": \"safeway_blank\",\n \"snmpVersion\": \"\",\n \"serverIp\": null,\n \"agentId\": 0,\n \"backupSizeDeviation\": false,\n \"natHost\": \"\",\n \"description\": null,\n \"backupSizeDeviationPercentage\": null,\n \"externalId\": null,\n \"enableAccess\": false,\n \"inMaintenanceMode\": false,\n \"enableIntelliChecks\": false,\n \"collected\": false,\n \"compareExceptions\": null,\n \"notes\": null,\n \"deviceAccessDetails\": null,\n \"enableNvm\": false,\n \"deviceId\": 3,\n \"notesId\": 0,\n \"groupName\": null,\n \"vendorName\": null,\n \"productName\": null,\n \"versionName\": null,\n \"siteName\": null,\n \"optionName\": null,\n \"productType\": null,\n \"productTypeName\": null,\n \"lastBackupDate\": 1733918403000,\n \"lastBackupDateToShow\": \"2024-12-11 12:00:03.0\",\n \"lastBackupId\": 16892,\n \"retention\": null,\n \"agentName\": null,\n \"backupCustomField1\": null,\n \"backupCustomField2\": null,\n \"intelliChecksStatus\": null,\n \"agentGroupId\": 0,\n \"deviceCustomFields\": null,\n \"optionCustomFields\": null,\n \"lastSuccessfulBackupDate\": \"2024-11-06 12:00:03.0\",\n \"configurationChanged\": \"no\",\n \"discoverySnmpRespond\": false,\n \"backupSize\": null,\n \"failureReason\": null,\n \"backupFailureRetry\": 0,\n \"backupFailureRetrySleepTime\": 0,\n \"cloudVault\": null,\n \"technicalSurveyItems\": null\n },\n {\n \"deviceName\": \"Juniper SRX\",\n \"siteId\": 0,\n \"host\": \"192.168.1.4\",\n \"vendorId\": 8,\n \"productId\": 93,\n \"versionId\": 42,\n \"optionId\": 89342,\n \"groupId\": 2,\n \"retentionId\": 0,\n \"port\": 22,\n \"debugMode\": false,\n \"authenticationType\": \"1\",\n \"authenticationTemplateIds\": null,\n \"userName\": \"root\",\n \"password\": \"safeway_blank\",\n \"su\": \"\",\n \"suPassword\": \"safeway_blank\",\n \"prompt\": null,\n \"commandUserName\": \"\",\n \"commandPassword\": \"safeway_blank\",\n \"snmpCommunity\": \"safeway_blank\",\n \"snmpVersion\": \"\",\n \"serverIp\": null,\n \"agentId\": 0,\n \"backupSizeDeviation\": false,\n \"natHost\": null,\n \"description\": null,\n \"backupSizeDeviationPercentage\": null,\n \"externalId\": null,\n \"enableAccess\": false,\n \"inMaintenanceMode\": false,\n \"enableIntelliChecks\": false,\n \"collected\": false,\n \"compareExceptions\": null,\n \"notes\": null,\n \"deviceAccessDetails\": null,\n \"enableNvm\": false,\n \"deviceId\": 4,\n \"notesId\": 0,\n \"groupName\": null,\n \"vendorName\": null,\n \"productName\": null,\n \"versionName\": null,\n \"siteName\": null,\n \"optionName\": null,\n \"productType\": null,\n \"productTypeName\": null,\n \"lastBackupDate\": 1733918401000,\n \"lastBackupDateToShow\": \"2024-12-11 12:00:01.0\",\n \"lastBackupId\": 16891,\n \"retention\": null,\n \"agentName\": null,\n \"backupCustomField1\": null,\n \"backupCustomField2\": null,\n \"intelliChecksStatus\": null,\n \"agentGroupId\": 0,\n \"deviceCustomFields\": null,\n \"optionCustomFields\": null,\n \"lastSuccessfulBackupDate\": \"2024-11-06 12:00:01.0\",\n \"configurationChanged\": \"no\",\n \"discoverySnmpRespond\": false,\n \"backupSize\": null,\n \"failureReason\": null,\n \"backupFailureRetry\": 0,\n \"backupFailureRetrySleepTime\": 0,\n \"cloudVault\": null,\n \"technicalSurveyItems\": null\n },\n {\n \"deviceName\": \"Cisco ASA\",\n \"siteId\": 0,\n \"host\": \"192.168.1.5\",\n \"vendorId\": 5,\n \"productId\": 46,\n \"versionId\": 24,\n \"optionId\": 54624,\n \"groupId\": 0,\n \"retentionId\": 0,\n \"port\": 22,\n \"debugMode\": false,\n \"authenticationType\": \"1\",\n \"authenticationTemplateIds\": null,\n \"userName\": \"backbox\",\n \"password\": \"safeway_blank\",\n \"su\": \"\",\n \"suPassword\": \"safeway_blank\",\n \"prompt\": null,\n \"commandUserName\": \"\",\n \"commandPassword\": \"safeway_blank\",\n \"snmpCommunity\": \"safeway_blank\",\n \"snmpVersion\": \"\",\n \"serverIp\": null,\n \"agentId\": 0,\n \"backupSizeDeviation\": false,\n \"natHost\": \"\",\n \"description\": null,\n \"backupSizeDeviationPercentage\": null,\n \"externalId\": null,\n \"enableAccess\": false,\n \"inMaintenanceMode\": false,\n \"enableIntelliChecks\": false,\n \"collected\": false,\n \"compareExceptions\": null,\n \"notes\": null,\n \"deviceAccessDetails\": null,\n \"enableNvm\": false,\n \"deviceId\": 5,\n \"notesId\": 0,\n \"groupName\": null,\n \"vendorName\": null,\n \"productName\": null,\n \"versionName\": null,\n \"siteName\": null,\n \"optionName\": null,\n \"productType\": null,\n \"productTypeName\": null,\n \"lastBackupDate\": 1733918403000,\n \"lastBackupDateToShow\": \"2024-12-11 12:00:03.0\",\n \"lastBackupId\": 16893,\n \"retention\": null,\n \"agentName\": null,\n \"backupCustomField1\": null,\n \"backupCustomField2\": null,\n \"intelliChecksStatus\": null,\n \"agentGroupId\": 0,\n \"deviceCustomFields\": null,\n \"optionCustomFields\": null,\n \"lastSuccessfulBackupDate\": \"2024-11-06 12:00:01.0\",\n \"configurationChanged\": \"no\",\n \"discoverySnmpRespond\": false,\n \"backupSize\": null,\n \"failureReason\": null,\n \"backupFailureRetry\": 0,\n \"backupFailureRetrySleepTime\": 0,\n \"cloudVault\": null,\n \"technicalSurveyItems\": null\n }\n]", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null } ], "rootChildren": [ @@ -108,6 +166,14 @@ { "type": "route", "uuid": "101f818e-0ef5-4468-8c2a-f0f7ab2f1d49" + }, + { + "type": "route", + "uuid": "7d03fa0c-863e-4364-84be-a4c77a75d392" + }, + { + "type": "route", + "uuid": "709c7a4e-f6d2-41f7-91be-b6373756b619" } ], "proxyMode": false, diff --git a/tests/network/backbox/restapi/devicebackup.robot b/tests/network/backbox/restapi/devicebackup.robot new file mode 100644 index 000000000..713435cfd --- /dev/null +++ b/tests/network/backbox/restapi/devicebackup.robot @@ -0,0 +1,48 @@ +*** Settings *** +Documentation Check a device backup status + +Resource ${CURDIR}${/}..${/}..${/}..${/}resources/import.resource + +Suite Setup Start Mockoon ${MOCKOON_JSON} +Suite Teardown Stop Mockoon +Test Timeout 120s + + +*** Variables *** +${MOCKOON_JSON} ${CURDIR}${/}backbox.json +${HOSTNAME} 127.0.0.1 +${APIPORT} 3000 + +${cmd} ${CENTREON_PLUGINS} +... --plugin=network::backbox::restapi::plugin +... --custommode=api +... --hostname=${HOSTNAME} +... --port=${APIPORT} +... --proto=http +... --api-token=token +... --mode=device-backup + +*** Test Cases *** +Device backup ${tc} + [Documentation] Check a device backup status + [Tags] network backbox restapi backup + ${command} Catenate + ... ${cmd} + ... ${extraoptions} + Log ${cmd} + Ctn Run Command And Check Result As Strings ${command} ${expected_result} + + Examples: tc extraoptions expected_result -- + ... 1 ${EMPTY} UNKNOWN: Need to specify --device-id or --device-name option. + ... 2 --device-name="Juniper SRX" OK: Device [id: 4] [name: Juniper SRX] [status: SUCCESS] [status reason: ] + ... 3 --device-id=4 OK: Device [id: 4] [name: ] [status: SUCCESS] [status reason: ] + ... 4 --device-name="Juniper SRX" --device-id=4 OK: Device [id: 4] [name: Juniper SRX] [status: SUCCESS] [status reason: ] + ... 5 --device-name="Cisco C8000" CRITICAL: Device [id: 1] [name: Cisco C8000] [status: FAILURE] [status reason: The failed expected result was found: (No route to host)] + ... 6 --device-id=1 CRITICAL: Device [id: 1] [name: ] [status: FAILURE] [status reason: The failed expected result was found: (No route to host)] + ... 7 --device-name="Fortinet Fortigate" WARNING: Device [id: 3] [name: Fortinet Fortigate] [status: SUSPECT] [status reason: Unknown status] + ... 8 --device-id=3 WARNING: Device [id: 3] [name: ] [status: SUSPECT] [status reason: Unknown status] + ... 9 --device-id=3 --critical-status='\\\%{status} =~ /FAILURE|SUSPECT/i' CRITICAL: Device [id: 3] [name: ] [status: SUSPECT] [status reason: Unknown status] + ... 10 --device-id=1 --warning-status='\\\%{status} =~ /FAILURE|SUSPECT/i' --critical-status='' WARNING: Device [id: 1] [name: ] [status: FAILURE] [status reason: The failed expected result was found: (No route to host)] + ... 11 --device-id=3 --critical-status='\\\%{status_reason} =~ /unknown/i' CRITICAL: Device [id: 3] [name: ] [status: SUSPECT] [status reason: Unknown status] + ... 12 --device-name="Fortinet Fortigate" --critical-status='\\\%{device_name} =~ /Fortinet/i' CRITICAL: Device [id: 3] [name: Fortinet Fortigate] [status: SUSPECT] [status reason: Unknown status] + ... 13 --device-name="Fortinet Fortigate" --critical-status='\\\%{device_id} == 3' CRITICAL: Device [id: 3] [name: Fortinet Fortigate] [status: SUSPECT] [status reason: Unknown status] diff --git a/tests/network/backbox/restapi/listdevices.robot b/tests/network/backbox/restapi/listdevices.robot new file mode 100644 index 000000000..37de3b693 --- /dev/null +++ b/tests/network/backbox/restapi/listdevices.robot @@ -0,0 +1,37 @@ +*** Settings *** +Documentation Test the Backbox list-devices mode + +Resource ${CURDIR}${/}..${/}..${/}..${/}resources/import.resource + +Suite Setup Start Mockoon ${MOCKOON_JSON} +Suite Teardown Stop Mockoon +Test Timeout 120s + + +*** Variables *** +${MOCKOON_JSON} ${CURDIR}${/}backbox.json +${HOSTNAME} 127.0.0.1 +${APIPORT} 3000 + +${cmd} ${CENTREON_PLUGINS} +... --plugin=network::backbox::restapi::plugin +... --custommode=api +... --hostname=${HOSTNAME} +... --port=${APIPORT} +... --proto=http +... --api-token=token +... --mode=list-devices + +*** Test Cases *** +List-Devices ${tc} + [Documentation] Check list-devices results + [Tags] network backbox restapi list-devices + ${command} Catenate + ... ${cmd} + ... ${extraoptions} + Ctn Run Command And Check Result As Regexp ${command} ${expected_result} + + Examples: tc extraoptions expected_result -- + ... 1 ${EMPTY} ^Devices: (\\\\n\\\\[.*\\\\]){5}\\\\Z + ... 2 --disco-show \\\\<\\\\?xml version="1.0" encoding="utf-8"\\\\?\\\\>\\\\n\\\\(\\\\n\\\\s*\\\\