Release 20240311 (#4941)

This commit is contained in:
pkippes 2024-03-11 15:33:35 +01:00 committed by GitHub
commit b62763f909
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
75 changed files with 2225 additions and 445 deletions

View File

@ -30,7 +30,7 @@ runs:
key: ${{ inputs.cache_key }}
fail-on-cache-miss: true
- uses: jfrog/setup-jfrog-cli@901bb9632db90821c2d3f076012bdeaf66598555 # v3.4.1
- uses: jfrog/setup-jfrog-cli@26da2259ee7690e63b5410d7451b2938d08ce1f9 # v4.0.0
env:
JF_URL: https://centreon.jfrog.io
JF_ACCESS_TOKEN: ${{ inputs.artifactory_token }}

View File

@ -34,7 +34,7 @@ runs:
fail-on-cache-miss: true
- if: ${{ ! (inputs.distrib == 'jammy' && inputs.stability == 'stable') }}
uses: jfrog/setup-jfrog-cli@901bb9632db90821c2d3f076012bdeaf66598555 # v3.4.1
uses: jfrog/setup-jfrog-cli@26da2259ee7690e63b5410d7451b2938d08ce1f9 # v4.0.0
env:
JF_URL: https://centreon.jfrog.io
JF_ACCESS_TOKEN: ${{ inputs.artifactory_token }}

View File

@ -85,7 +85,7 @@ runs:
export DIST=""
if [ "${{ inputs.stability }}" == "unstable" ] || [ "${{ inputs.stability }}" == "canary" ]; then
export RELEASE="$RELEASE~${{ inputs.distrib }}"
elif [ "${{ inputs.stability }}" == "testing" ]; then
else
export RELEASE="1~${{ inputs.distrib }}"
fi
export APACHE_USER="www-data"

View File

@ -17,7 +17,7 @@ inputs:
runs:
using: "composite"
steps:
- uses: jfrog/setup-jfrog-cli@901bb9632db90821c2d3f076012bdeaf66598555 # v3.4.1
- uses: jfrog/setup-jfrog-cli@26da2259ee7690e63b5410d7451b2938d08ce1f9 # v4.0.0
env:
JF_URL: https://centreon.jfrog.io
JF_ACCESS_TOKEN: ${{ inputs.artifactory_token }}

View File

@ -30,7 +30,7 @@ runs:
key: ${{ inputs.cache_key }}
fail-on-cache-miss: true
- uses: jfrog/setup-jfrog-cli@901bb9632db90821c2d3f076012bdeaf66598555 # v3.4.1
- uses: jfrog/setup-jfrog-cli@26da2259ee7690e63b5410d7451b2938d08ce1f9 # v4.0.0
env:
JF_URL: https://centreon.jfrog.io
JF_ACCESS_TOKEN: ${{ inputs.artifactory_token }}

View File

@ -31,7 +31,7 @@ runs:
key: ${{ inputs.cache_key }}
fail-on-cache-miss: true
- uses: jfrog/setup-jfrog-cli@901bb9632db90821c2d3f076012bdeaf66598555 # v3.4.1
- uses: jfrog/setup-jfrog-cli@26da2259ee7690e63b5410d7451b2938d08ce1f9 # v4.0.0
env:
JF_URL: https://centreon.jfrog.io
JF_ACCESS_TOKEN: ${{ inputs.artifactory_token }}

View File

@ -1,39 +0,0 @@
name: run-in-docker
description: Run step in docker container
inputs:
script_name:
description: "script_name"
required: true
image_name:
description: "image_name"
required: true
image_version:
description: "image_version"
required: true
centreon_pat:
description: "Secret"
required: false
registry_url:
description: Docker registry url
required: true
registry_username:
description: Docker registry username
required: true
registry_password:
description: Docker registry password
required: true
params:
description: "params for script"
required: false
runs:
using: "composite"
steps:
- name: Login to Registry (via runner)
uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0
with:
registry: ${{ inputs.registry_url }}
username: ${{ inputs.registry_username }}
password: ${{ inputs.registry_password }}
- run: docker run -i -e TOKEN=${{ inputs.centreon_pat }} --entrypoint /src/.github/scripts/${{ inputs.script_name }}.sh -v "$PWD:/src" ${{ inputs.registry_url }}/${{ inputs.image_name }}:${{ inputs.image_version }} ${{ inputs.params }}
shell: bash

View File

@ -1,15 +1,21 @@
--filter-vdom
--force-counters32
Centreon
Fortinet
Datacore
Fortigate
Fortinet
license-instances-usage-prct
MBean
OID
oneaccess-sys-mib
perfdata
powershell
proto
Sansymphony
queue-messages-inflighted
SNMP
space-usage-prct
SSH
SureBackup
topic-messages-inflighted
Veeam

View File

@ -25,8 +25,8 @@ jobs:
version_file: connectors/vmware/src/centreon/script/centreon_vmware.pm
package:
needs:
- get-environment
needs: [get-environment]
if: ${{ needs.get-environment.outputs.stability != 'stable' }}
runs-on: ubuntu-22.04
strategy:
matrix:
@ -66,7 +66,7 @@ jobs:
distrib: ${{ matrix.distrib }}
package_extension: ${{ matrix.package_extension }}
version: ${{ needs.get-environment.outputs.version }}
release: ${{ needs.get-environment.outputs.release }}
release: 1
commit_hash: ${{ github.sha }}
cache_key: ${{ github.sha }}-${{ github.run_id }}-${{ matrix.package_extension }}-${{ matrix.distrib }}
rpm_gpg_key: ${{ secrets.RPM_GPG_SIGNING_KEY }}
@ -75,10 +75,8 @@ jobs:
stability: ${{ needs.get-environment.outputs.stability }}
deliver-rpm:
needs:
- get-environment
- package
if: ${{ contains(fromJson('["stable", "testing", "unstable"]'), needs.get-environment.outputs.stability) }}
needs: [get-environment, package]
if: ${{ contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) }}
runs-on: [self-hosted, common]
strategy:
@ -99,10 +97,8 @@ jobs:
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
deliver-deb:
needs:
- get-environment
- package
if: ${{ contains(fromJson('["stable", "testing", "unstable"]'), needs.get-environment.outputs.stability) }}
needs: [get-environment, package]
if: ${{ contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) }}
runs-on: [self-hosted, common]
strategy:
@ -121,3 +117,23 @@ jobs:
cache_key: ${{ github.sha }}-${{ github.run_id }}-deb-${{ matrix.distrib }}
stability: ${{ needs.get-environment.outputs.stability }}
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
promote:
needs: [get-environment]
if: ${{ contains(fromJson('["stable"]'), needs.get-environment.outputs.stability) }}
runs-on: [self-hosted, common]
strategy:
matrix:
distrib: [el8, el9, bullseye, bookworm]
steps:
- name: Checkout sources
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Promote ${{ matrix.distrib }} to stable
uses: ./.github/actions/promote-to-stable
with:
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
module: connector-vmware
distrib: ${{ matrix.distrib }}
stability: ${{ needs.get-environment.outputs.stability }}

View File

@ -20,7 +20,7 @@ jobs:
get-environment:
uses: ./.github/workflows/get-environment.yml
with:
version_file: nrpe/packaging/centreon-nrpe3-daemon.yaml
version_file: nrpe/packaging/centreon-nrpe4-daemon.yaml
package:
needs: [get-environment]
@ -59,7 +59,7 @@ jobs:
- name: Download nrpe sources
run: |
curl -Lo - "https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-${{ needs.get-environment.outputs.version }}/nrpe-${{ needs.get-environment.outputs.version }}.tar.gz" | tar zxpf -
curl -sLo - "https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-${{ needs.get-environment.outputs.version }}/nrpe-${{ needs.get-environment.outputs.version }}.tar.gz" | tar zxpf -
mv nrpe-${{ needs.get-environment.outputs.version }} nrpe-src
shell: bash
@ -67,7 +67,7 @@ jobs:
run: |
cd nrpe-src
patch -p1 < ../nrpe/packaging/files/nrpe3_add_centreon_cmd.patch
patch -p1 < ../nrpe/packaging/files/nrpe4_add_centreon_cmd.patch
if [ "${{ matrix.package_extension }}" = "deb" ]; then
NAGIOS_PLUGINS_PATH="/usr/lib/nagios/plugins"

View File

@ -148,14 +148,19 @@ jobs:
password: ${{ secrets.DOCKER_REGISTRY_PASSWD }}
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
run: |
yum install -y yum-utils epel-release git
yum config-manager --set-enabled crb || true # alma 9
yum config-manager --set-enabled powertools || true # alma 8
yum install -y cpanminus rpm-build libcurl-devel libssh-devel expat-devel gcc ruby libuuid-devel zeromq-devel libxml2-devel libffi-devel perl-DBI perl-Net-Pcap freetds freetds-devel
yum install -y cpanminus rpm-build libcurl-devel libssh-devel expat-devel gcc libuuid-devel zeromq-devel libxml2-devel libffi-devel perl-DBI perl-Net-Pcap freetds freetds-devel
dnf module reset -y ruby
dnf module enable -y ruby:3.1
dnf install -y ruby
shell: bash
- if: ${{ contains(matrix.build_distribs, matrix.distrib) && matrix.spec_file == '' }}
@ -200,7 +205,8 @@ jobs:
cp -r ~/rpmbuild/RPMS/noarch/*.rpm .
shell: bash
- name: Replace '::' with - in the feature path
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
name: Replace '::' with - in the feature path
id: package-name
run: |
name="${{ matrix.name }}"
@ -209,7 +215,8 @@ jobs:
echo "name_with_dash=$name_with_dash" >> $GITHUB_OUTPUT
shell: bash
- uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
with:
name: packages-${{ matrix.package_extension }}-${{ matrix.distrib }}-${{ steps.package-name.outputs.name_with_dash }}
path: ./*.${{ matrix.package_extension }}
@ -226,56 +233,21 @@ jobs:
distrib: [bullseye, bookworm, jammy]
name:
[
"Authen::SASL::SASLprep",
"Authen::SCRAM::Client",
"boolean",
"Carp::Assert",
"Clone",
"Clone::Choose",
"common::sense",
"Convert::EBCDIC",
"Crypt::Blowfish_PP",
"DateTime::Format::Duration::ISO8601",
"Device::Modbus",
"Digest::MD5::File",
"Digest::SHA1",
"Email::Send::SMTP::Gmail",
"FFI::CheckLib",
"File::SearchPath",
"Hash::Merge",
"Hash::Ordered",
"HTTP::Daemon",
"HTTP::Daemon::SSL",
"HTTP::ProxyPAC",
"JMX::Jmx4Perl",
"JSON::Parse",
"JSON::WebToken",
"LV",
"MIME::Types",
"MongoDB",
"Net::FTPSSL",
"Net::HTTPTunnel",
"Net::NTP",
"Net::SMTPS",
"Net::SMTP_auth",
"Net::Subnet",
"Net::TFTP",
"PBKDF2::Tiny",
"Schedule::Cron",
"Statistics::Descriptive",
"Statistics::Regression",
"Sys::SigAction",
"Term::Clui",
"Term::ShellUI",
"Unicode::Stringprep",
"URI::Encode",
"URI::Template",
"URL::Encode",
"UUID::URandom",
"WWW::Selenium",
"XML::Filter::BufferText",
"XML::LibXML::Simple",
"XML::SAX::Writer",
"ZMQ::Constants",
"ZMQ::LibZMQ4"
]
@ -295,10 +267,9 @@ jobs:
- distrib: jammy
package_extension: deb
image: packaging-plugins-jammy
- name: "DateTime::Format::Duration::ISO8601"
- name: "Statistics::Regression"
build_distribs: "bullseye"
version: "0.53"
- name: "ZMQ::Constants"
- name: "ZMQ::LibZMQ4"
use_dh_make_perl: "false"
version: "0.01"
@ -311,9 +282,11 @@ jobs:
password: ${{ secrets.DOCKER_REGISTRY_PASSWD }}
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Get package version
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
name: Get package version
id: package-version
run: |
apt-get update
@ -363,7 +336,8 @@ jobs:
DEB_BUILD_OPTIONS="nocheck nodocs notest" dh-make-perl make --dist ${{ matrix.distrib }} --build --version ${{ steps.package-version.outputs.package_version }}-${{ matrix.distrib }} --cpan ${{ matrix.name }}
shell: bash
- name: Replace '::' with - in the feature path
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
name: Replace '::' with - in the feature path
id: package-name
run: |
name="${{ matrix.name }}"
@ -372,7 +346,8 @@ jobs:
echo "name_with_dash=$name_with_dash" >> $GITHUB_OUTPUT
shell: bash
- uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
with:
name: packages-${{ matrix.package_extension }}-${{ matrix.distrib }}-${{ steps.package-name.outputs.name_with_dash}}
path: ./*.${{ matrix.package_extension }}
@ -435,7 +410,7 @@ jobs:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- uses: actions/download-artifact@6b208ae046db98c579e8a3aa621ab581ff575935 # v4.1.1
- uses: actions/download-artifact@87c55149d96e628cc2ef7e6fc2aab372015aec85 # v4.1.3
with:
name: packages-rpm-${{ matrix.distrib }}
path: ./
@ -458,7 +433,7 @@ jobs:
matrix:
distrib: [bullseye, bookworm, jammy]
steps:
- uses: actions/download-artifact@6b208ae046db98c579e8a3aa621ab581ff575935 # v4.1.1
- uses: actions/download-artifact@87c55149d96e628cc2ef7e6fc2aab372015aec85 # v4.1.3
with:
name: packages-deb-${{ matrix.distrib }}
path: ./

View File

@ -26,6 +26,7 @@ jobs:
package:
needs: [get-environment]
if: ${{ needs.get-environment.outputs.stability != 'stable' }}
strategy:
fail-fast: false
@ -85,24 +86,28 @@ jobs:
dnf install -y cpanminus gcc
fi
cpanm -v -l /tmp Crypt::Argon2@0.019
cpanm -v -l /tmp Crypt::Argon2@0.020
shell: bash
- name: Set package name and paths according to distrib
run: |
PERL_VERSION=$(perl -E "say $^V" | sed -E "s/v([0-9]+\.[0-9]+).+/\1/g")
echo "Perl version is $PERL_VERSION"
if [[ "${{ matrix.package_extension }}" == "deb" ]]; then
NAME="libcrypt-argon2-perl"
if [ "${{ matrix.arch }}" = "amd64" ]; then
PERL_VENDORARCH="/usr/lib/x86_64-linux-gnu/perl5/5.32"
PERL_VENDORARCH="/usr/lib/x86_64-linux-gnu/perl/$PERL_VERSION"
else
PERL_VENDORARCH="/usr/lib/aarch64-linux-gnu/perl5/5.32"
PERL_VENDORARCH="/usr/lib/aarch64-linux-gnu/perl/$PERL_VERSION"
fi
else
NAME="perl-Crypt-Argon2"
if [ "${{ matrix.distrib }}" = "el8" ]; then
PERL_VENDORARCH="/usr/local/lib64/perl5"
else
PERL_VENDORARCH="/usr/local/lib64/perl5/5.32"
PERL_VENDORARCH="/usr/local/lib64/perl5/$PERL_VERSION"
fi
fi
@ -119,7 +124,7 @@ jobs:
distrib: ${{ matrix.distrib }}
package_extension: ${{ matrix.package_extension }}
arch: ${{ matrix.arch }}
release: 3
release: 1
commit_hash: ${{ github.sha }}
cache_key: cache-${{ github.sha }}-${{ matrix.package_extension }}-perl-crypt-argon2-${{ matrix.distrib }}-${{ matrix.arch }}-${{ github.head_ref || github.ref_name }}
rpm_gpg_key: ${{ secrets.RPM_GPG_SIGNING_KEY }}
@ -130,7 +135,7 @@ jobs:
# set condition to true if artifacts are needed
- if: ${{ false }}
name: Upload package artifacts
uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
with:
name: packages-${{ matrix.distrib }}-${{ matrix.arch }}
path: ./*.${{ matrix.package_extension}}

View File

@ -118,6 +118,10 @@ jobs:
include:
- image: packaging-plugins-bullseye
distrib: bullseye
- image: packaging-plugins-bookworm
distrib: bookworm
- image: packaging-plugins-jammy
distrib: jammy
name: package ${{ matrix.distrib }}
container:
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}:latest
@ -135,7 +139,7 @@ jobs:
mv dependencies/perl-filesys-smbclient/src/ perl-filesys-smbclient
tar czf perl-filesys-smbclient.tar.gz perl-filesys-smbclient
DEB_BUILD_OPTIONS="nocheck nodocs notest noautodbgsym" dh-make-perl make --verbose --build --version 4.0-${{ matrix.distrib }} perl-filesys-smbclient/
DEB_BUILD_OPTIONS="nocheck nodocs notest noautodbgsym" dh-make-perl make --dist ${{ matrix.distrib }} --verbose --build --version 4.0-${{ matrix.distrib }} perl-filesys-smbclient/
shell: bash
- uses: actions/cache/save@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
@ -172,7 +176,7 @@ jobs:
strategy:
matrix:
distrib: [bullseye]
distrib: [bullseye, bookworm, jammy]
steps:
- name: Checkout sources
@ -193,7 +197,7 @@ jobs:
runs-on: [self-hosted, common]
strategy:
matrix:
distrib: [el8, el9, bullseye]
distrib: [el8, el9, bullseye, bookworm]
steps:
- name: Checkout sources

View File

@ -24,6 +24,7 @@ jobs:
package:
needs: [get-environment]
if: ${{ needs.get-environment.outputs.stability != 'stable' }}
strategy:
fail-fast: false
@ -71,13 +72,18 @@ jobs:
if [ "${{ matrix.distrib }}" = "el8" ]; then
cpanm -v -l /tmp JSON::Path@0.5
else
cpanm -v -l /tmp JSON::Path@1.0.3
cpanm -v -l /tmp JSON::Path@1.0.4
fi
shell: bash
- name: Set package name and paths according to distrib
run: |
VERSION="1.0.3"
VERSION="1.0.4"
PERL_VERSION=$(perl -E "say $^V" | sed -E "s/v([0-9]+\.[0-9]+).+/\1/g")
echo "Perl version is $PERL_VERSION"
if [[ "${{ matrix.package_extension }}" == "deb" ]]; then
NAME="libjson-path-perl"
PERL_VENDORLIB="/usr/share/perl5"
@ -87,7 +93,7 @@ jobs:
VERSION="0.5" # https://github.com/centreon/centreon-plugins/issues/4540
PERL_VENDORLIB="/usr/local/share/perl5"
else
PERL_VENDORLIB="/usr/local/share/perl5/5.32"
PERL_VENDORLIB="/usr/local/share/perl5/$PERL_VERSION"
fi
fi
@ -116,7 +122,7 @@ jobs:
# set condition to true if artifacts are needed
- if: ${{ false }}
name: Upload package artifacts
uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
with:
name: packages-${{ matrix.distrib }}
path: ./*.${{ matrix.package_extension}}
@ -153,7 +159,7 @@ jobs:
strategy:
matrix:
distrib: [bullseye, bookworm]
distrib: [bullseye, bookworm, jammy]
name: Deliver ${{ matrix.distrib }}
@ -176,7 +182,7 @@ jobs:
runs-on: [self-hosted, common]
strategy:
matrix:
distrib: [bullseye, bookworm]
distrib: [el8, el9, bullseye, bookworm]
steps:
- name: Checkout sources

View File

@ -18,145 +18,108 @@ on:
paths:
- "dependencies/perl-keepass-reader/**"
env:
module_name: perl-keepass-reader
jobs:
get-environment:
uses: ./.github/workflows/get-environment.yml
package-rpm:
package:
needs: [get-environment]
if: ${{ needs.get-environment.outputs.stability != 'stable' }}
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
include:
- image: packaging-plugins-alma8
distrib: el8
package_extension: rpm
- image: packaging-plugins-alma9
distrib: el9
name: package ${{ matrix.distrib }}
package_extension: rpm
- image: packaging-plugins-bullseye
distrib: bullseye
package_extension: deb
- image: packaging-plugins-bookworm
distrib: bookworm
package_extension: deb
- image: packaging-plugins-jammy
distrib: jammy
package_extension: deb
runs-on: ubuntu-22.04
container:
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}:latest
credentials:
username: ${{ secrets.DOCKER_REGISTRY_ID }}
password: ${{ secrets.DOCKER_REGISTRY_PASSWD }}
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- run: |
yum install -y make perl perl-devel perl-ExtUtils-MakeMaker
mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
cp -rp dependencies/perl-keepass-reader/src perl-KeePass-Reader/
tar czf ~/rpmbuild/SOURCES/perl-KeePass-Reader.tar.gz perl-KeePass-Reader
rpmbuild -ba dependencies/perl-keepass-reader/packaging/rpm/perl-KeePass-Reader.spec
cp -r ~/rpmbuild/RPMS/noarch/*.rpm .
shell: bash
- uses: actions/cache/save@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
with:
path: ./*.rpm
key: unsigned-${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }}
sign-rpm:
needs: [package-rpm]
runs-on: ubuntu-22.04
strategy:
matrix:
include:
- image: packaging-alma8
distrib: el8
- image: packaging-alma9
distrib: el9
name: sign rpm ${{ matrix.distrib }}
container:
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/rpm-signing:ubuntu
options: -t
credentials:
username: ${{ secrets.DOCKER_REGISTRY_ID }}
password: ${{ secrets.DOCKER_REGISTRY_PASSWD }}
steps:
- run: |
apt-get update
apt-get install -y zstd
shell: bash
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- uses: actions/cache/restore@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
with:
path: ./*.rpm
key: unsigned-${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }}
- run: echo "HOME=/root" >> $GITHUB_ENV
shell: bash
- run: rpmsign --addsign ./*.rpm
shell: bash
- uses: actions/cache/save@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
with:
path: ./*.rpm
key: ${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }}
- uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
with:
name: packages-${{ matrix.distrib }}
path: ./*.rpm
retention-days: 1
package-deb:
needs: [get-environment]
if: ${{ needs.get-environment.outputs.stability != 'stable' }}
runs-on: ubuntu-22.04
strategy:
matrix:
include:
- image: bullseye
distrib: bullseye
- image: bookworm
distrib: bookworm
- image: jammy
distrib: jammy
name: package ${{ matrix.distrib }}
container:
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/packaging-plugins-${{ matrix.image }}:latest
credentials:
username: ${{ secrets.DOCKER_REGISTRY_ID }}
password: ${{ secrets.DOCKER_REGISTRY_PASSWD }}
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Checkout sources
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- run: |
apt update
apt install -y dh-make-perl perl
- name: Build library
run: |
if [[ "${{ matrix.package_extension }}" == "rpm" ]]; then
dnf install -y make perl
else
apt-get update
apt-get install -y make perl
fi
mv dependencies/perl-keepass-reader/src/ perl-keepass-reader
tar czf perl-keepass-reader.tar.gz perl-keepass-reader
DEB_BUILD_OPTIONS="nocheck nodocs notest noautodbgsym" dh-make-perl make -p libkeepass-reader-perl --verbose --build --version 0.2-${{ matrix.distrib }} perl-keepass-reader/
cd dependencies/perl-keepass-reader/src
perl Makefile.PL INSTALL_BASE=/tmp/perl-keepass-reader
make
make pure_install
shell: bash
- uses: actions/cache/save@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
with:
path: ./*.deb
key: ${{ github.sha }}-${{ github.run_id }}-deb-${{ matrix.distrib }}
- name: Set package name and paths according to distrib
run: |
PERL_VERSION=$(perl -E "say $^V" | sed -E "s/v([0-9]+\.[0-9]+).+/\1/g")
- uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
echo "Perl version is $PERL_VERSION"
if [[ "${{ matrix.package_extension }}" == "deb" ]]; then
NAME="libkeepass-reader-perl"
PERL_VENDORLIB="/usr/share/perl5"
else
NAME="perl-KeePass-Reader"
if [[ "${{ matrix.distrib }}" == "el8" ]]; then
PERL_VENDORLIB="/usr/local/share/perl5"
else
PERL_VENDORLIB="/usr/local/share/perl5/$PERL_VERSION"
fi
fi
sed -i "s/@NAME@/$NAME/g" dependencies/perl-keepass-reader/packaging/perl-keepass-reader.yaml
sed -i "s#@PERL_VENDORLIB@#$PERL_VENDORLIB#g" dependencies/perl-keepass-reader/packaging/perl-keepass-reader.yaml
cat dependencies/perl-keepass-reader/packaging/perl-keepass-reader.yaml
shell: bash
- name: Package
uses: ./.github/actions/package-nfpm
with:
name: packages-${{ matrix.distrib }}
path: ./*.deb
retention-days: 1
nfpm_file_pattern: "dependencies/perl-keepass-reader/packaging/perl-keepass-reader.yaml"
distrib: ${{ matrix.distrib }}
package_extension: ${{ matrix.package_extension }}
version: "0.2"
release: "3"
arch: all
commit_hash: ${{ github.sha }}
cache_key: cache-${{ github.run_id }}-${{ matrix.package_extension }}-${{ env.module_name }}-${{ matrix.distrib }}
rpm_gpg_key: ${{ secrets.RPM_GPG_SIGNING_KEY }}
rpm_gpg_signing_key_id: ${{ secrets.RPM_GPG_SIGNING_KEY_ID }}
rpm_gpg_signing_passphrase: ${{ secrets.RPM_GPG_SIGNING_PASSPHRASE }}
stability: ${{ needs.get-environment.outputs.stability }}
deliver-rpm:
needs: [get-environment, sign-rpm]
needs: [get-environment, package]
if: ${{ contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) }}
runs-on: [self-hosted, common]
@ -164,6 +127,8 @@ jobs:
matrix:
distrib: [el8, el9]
name: Deliver ${{ matrix.distrib }}
steps:
- name: Checkout sources
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -171,14 +136,14 @@ jobs:
- name: Delivery
uses: ./.github/actions/rpm-delivery
with:
module_name: perl-keepass-reader
module_name: ${{ env.module_name }}
distrib: ${{ matrix.distrib }}
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
cache_key: ${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }}
cache_key: cache-${{ github.run_id }}-rpm-${{ env.module_name }}-${{ matrix.distrib }}
stability: ${{ needs.get-environment.outputs.stability }}
deliver-deb:
needs: [get-environment, package-deb]
needs: [get-environment, package]
if: ${{ contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) }}
runs-on: [self-hosted, common]
@ -186,6 +151,8 @@ jobs:
matrix:
distrib: [bullseye, bookworm, jammy]
name: Deliver ${{ matrix.distrib }}
steps:
- name: Checkout sources
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -193,10 +160,10 @@ jobs:
- name: Delivery
uses: ./.github/actions/deb-delivery
with:
module_name: perl-keepass-reader
module_name: ${{ env.module_name }}
distrib: ${{ matrix.distrib }}
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
cache_key: ${{ github.sha }}-${{ github.run_id }}-deb-${{ matrix.distrib }}
cache_key: cache-${{ github.run_id }}-deb-${{ env.module_name }}-${{ matrix.distrib }}
stability: ${{ needs.get-environment.outputs.stability }}
promote:
@ -205,7 +172,7 @@ jobs:
runs-on: [self-hosted, common]
strategy:
matrix:
distrib: [el8, el9, bullseye, bookworm]
distrib: [bullseye, bookworm]
steps:
- name: Checkout sources
@ -215,6 +182,6 @@ jobs:
uses: ./.github/actions/promote-to-stable
with:
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
module: perl-keepass-reader
module: ${{ env.module_name }}
distrib: ${{ matrix.distrib }}
stability: ${{ needs.get-environment.outputs.stability }}

View File

@ -24,6 +24,7 @@ jobs:
package:
needs: [get-environment]
if: ${{ needs.get-environment.outputs.stability != 'stable' }}
strategy:
fail-fast: false
@ -88,19 +89,23 @@ jobs:
- name: Set package name and paths according to distrib
run: |
PERL_VERSION=$(perl -E "say $^V" | sed -E "s/v([0-9]+\.[0-9]+).+/\1/g")
echo "Perl version is $PERL_VERSION"
if [[ "${{ matrix.package_extension }}" == "deb" ]]; then
NAME="libssh-session-perl"
if [ "${{ matrix.arch }}" = "amd64" ]; then
PERL_VENDORARCH="/usr/lib/x86_64-linux-gnu/perl5/5.32"
PERL_VENDORARCH="/usr/lib/x86_64-linux-gnu/perl/$PERL_VERSION"
else
PERL_VENDORARCH="/usr/lib/aarch64-linux-gnu/perl5/5.32"
PERL_VENDORARCH="/usr/lib/aarch64-linux-gnu/perl/$PERL_VERSION"
fi
else
NAME="perl-Libssh-Session"
if [ "${{ matrix.distrib }}" = "el8" ]; then
PERL_VENDORARCH="/usr/local/lib64/perl5"
else
PERL_VENDORARCH="/usr/local/lib64/perl5/5.32"
PERL_VENDORARCH="/usr/local/lib64/perl5/$PERL_VERSION"
fi
fi
@ -117,7 +122,7 @@ jobs:
distrib: ${{ matrix.distrib }}
package_extension: ${{ matrix.package_extension }}
arch: ${{ matrix.arch }}
release: 4
release: 5
commit_hash: ${{ github.sha }}
cache_key: cache-${{ github.sha }}-${{ matrix.package_extension }}-perl-libssh-session-${{ matrix.distrib }}-${{ matrix.arch }}-${{ github.head_ref || github.ref_name }}
rpm_gpg_key: ${{ secrets.RPM_GPG_SIGNING_KEY }}
@ -128,7 +133,7 @@ jobs:
# set condition to true if artifacts are needed
- if: ${{ false }}
name: Upload package artifacts
uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
with:
name: packages-${{ matrix.distrib }}-${{ matrix.arch }}
path: ./*.${{ matrix.package_extension}}

View File

@ -24,6 +24,7 @@ jobs:
package:
needs: [get-environment]
if: ${{ needs.get-environment.outputs.stability != 'stable' }}
strategy:
fail-fast: false
@ -83,24 +84,28 @@ jobs:
dnf install -y libcurl-devel cpanminus gcc
fi
cpanm -v -l /tmp Net::Curl@0.54
cpanm -v -l /tmp Net::Curl@0.55
shell: bash
- name: Set package name and paths according to distrib
run: |
PERL_VERSION=$(perl -E "say $^V" | sed -E "s/v([0-9]+\.[0-9]+).+/\1/g")
echo "Perl version is $PERL_VERSION"
if [[ "${{ matrix.package_extension }}" == "deb" ]]; then
NAME="libnet-curl-perl"
if [ "${{ matrix.arch }}" = "amd64" ]; then
PERL_VENDORARCH="/usr/lib/x86_64-linux-gnu/perl5/5.32"
PERL_VENDORARCH="/usr/lib/x86_64-linux-gnu/perl/$PERL_VERSION"
else
PERL_VENDORARCH="/usr/lib/aarch64-linux-gnu/perl5/5.32"
PERL_VENDORARCH="/usr/lib/aarch64-linux-gnu/perl/$PERL_VERSION"
fi
else
NAME="perl-Net-Curl"
if [ "${{ matrix.distrib }}" = "el8" ]; then
PERL_VENDORARCH="/usr/local/lib64/perl5"
else
PERL_VENDORARCH="/usr/local/lib64/perl5/5.32"
PERL_VENDORARCH="/usr/local/lib64/perl5/$PERL_VERSION"
fi
fi
@ -118,7 +123,7 @@ jobs:
package_extension: ${{ matrix.package_extension }}
arch: ${{ matrix.arch }}
commit_hash: ${{ github.sha }}
release: 3
release: 1
cache_key: cache-${{ github.sha }}-${{ matrix.package_extension }}-perl-net-curl-${{ matrix.distrib }}-${{ matrix.arch }}-${{ github.head_ref || github.ref_name }}
rpm_gpg_key: ${{ secrets.RPM_GPG_SIGNING_KEY }}
rpm_gpg_signing_key_id: ${{ secrets.RPM_GPG_SIGNING_KEY_ID }}
@ -128,7 +133,7 @@ jobs:
# set condition to true if artifacts are needed
- if: ${{ false }}
name: Upload package artifacts
uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
with:
name: packages-${{ matrix.distrib }}-${{ matrix.arch }}
path: ./*.${{ matrix.package_extension }}

View File

@ -22,6 +22,7 @@ jobs:
package:
needs: [get-environment]
if: ${{ needs.get-environment.outputs.stability != 'stable' }}
strategy:
fail-fast: false
@ -32,37 +33,31 @@ jobs:
package_extension: rpm
runner: ubuntu-22.04
arch: amd64
version: 2.7.2
- image: packaging-plugins-alma9
distrib: el9
package_extension: rpm
runner: ubuntu-22.04
arch: amd64
version: 2.7.2
- image: packaging-plugins-bullseye
distrib: bullseye
package_extension: deb
runner: ubuntu-22.04
arch: amd64
version: 2.7.2
- image: packaging-plugins-bookworm
distrib: bookworm
package_extension: deb
runner: ubuntu-22.04
arch: amd64
version: 2.7.2
- image: packaging-plugins-jammy
distrib: jammy
package_extension: deb
runner: ubuntu-22.04
arch: amd64
version: 2.7.2
- image: packaging-plugins-bullseye-arm64
distrib: bullseye
package_extension: deb
runner: ["self-hosted", "collect-arm64"]
arch: arm64
version: 2.7.2
runs-on: ${{ matrix.runner }}
@ -74,6 +69,10 @@ jobs:
name: package ${{ matrix.distrib }} ${{ matrix.arch }}
env:
version: "2.7.2"
release: "6"
steps:
- name: Checkout sources
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -110,8 +109,8 @@ jobs:
fi
cd /tmp
wget -O - https://github.com/Openwsman/openwsman/archive/refs/tags/v${{ matrix.version }}.tar.gz|tar zxvf -
cd openwsman-${{ matrix.version }}/
wget -O - https://github.com/Openwsman/openwsman/archive/refs/tags/v${{ env.version }}.tar.gz|tar zxvf -
cd openwsman-${{ env.version }}/
mkdir build
cd build
cmake .. -DBUILD_PYTHON=No -DBUILD_PYTHON3=No -DBUILD_JAVA=No -DBUILD_RUBY=No -DBUILD_PERL=Yes
@ -120,13 +119,23 @@ jobs:
- name: Set package name and paths according to distrib
run: |
if [[ "${{ matrix.package_extension }}" == "deb" ]]; then
apt-get install -y perl
else
dnf install -y perl
fi
PERL_VERSION=$(perl -E "say $^V" | sed -E "s/v([0-9]+\.[0-9]+).+/\1/g")
echo "Perl version is $PERL_VERSION"
if [[ "${{ matrix.package_extension }}" == "deb" ]]; then
NAME_PERL="libopenwsman-perl"
USRLIB="/usr/lib/"
if [ "${{ matrix.arch }}" = "amd64" ]; then
PERL_VENDORARCH="/usr/lib/x86_64-linux-gnu/perl5/5.32"
PERL_VENDORARCH="/usr/lib/x86_64-linux-gnu/perl/$PERL_VERSION"
else
PERL_VENDORARCH="/usr/lib/aarch64-linux-gnu/perl5/5.32"
PERL_VENDORARCH="/usr/lib/aarch64-linux-gnu/perl/$PERL_VERSION"
fi
else
NAME_PERL="openwsman-perl"
@ -134,15 +143,13 @@ jobs:
if [ "${{ matrix.distrib }}" = "el8" ]; then
PERL_VENDORARCH="/usr/local/lib64/perl5"
else
PERL_VENDORARCH="/usr/local/lib64/perl5/5.32"
PERL_VENDORARCH="/usr/local/lib64/perl5/$PERL_VERSION"
fi
fi
sed -i "s/@VERSION@/${{ matrix.version }}/g" dependencies/perl-openwsman/libwsman.yaml
sed -i "s#@USRLIB@#$USRLIB#g" dependencies/perl-openwsman/libwsman.yaml
sed -i "s/@NAME@/$NAME_PERL/g" dependencies/perl-openwsman/perl-openwsman.yaml
sed -i "s/@VERSION@/${{ matrix.version }}/g" dependencies/perl-openwsman/perl-openwsman.yaml
sed -i "s#@PERL_VENDORARCH@#$PERL_VENDORARCH#g" dependencies/perl-openwsman/perl-openwsman.yaml
cat dependencies/perl-openwsman/sblim-sfcc.yaml
@ -158,7 +165,8 @@ jobs:
distrib: ${{ matrix.distrib }}
package_extension: ${{ matrix.package_extension }}
arch: ${{ matrix.arch }}
release: 2
version: ${{ env.version }}
release: ${{ env.release }}
commit_hash: ${{ github.sha }}
cache_key: cache-${{ github.sha }}-${{ matrix.package_extension }}-sblim-sfcc-${{ matrix.distrib }}-${{ matrix.arch }}-${{ github.head_ref || github.ref_name }}
rpm_gpg_key: ${{ secrets.RPM_GPG_SIGNING_KEY }}
@ -173,7 +181,8 @@ jobs:
distrib: ${{ matrix.distrib }}
package_extension: ${{ matrix.package_extension }}
arch: ${{ matrix.arch }}
release: 4
version: ${{ env.version }}
release: ${{ env.release }}
commit_hash: ${{ github.sha }}
cache_key: cache-${{ github.sha }}-${{ matrix.package_extension }}-libwsman-${{ matrix.distrib }}-${{ matrix.arch }}-${{ github.head_ref || github.ref_name }}
rpm_gpg_key: ${{ secrets.RPM_GPG_SIGNING_KEY }}
@ -188,7 +197,8 @@ jobs:
distrib: ${{ matrix.distrib }}
package_extension: ${{ matrix.package_extension }}
arch: ${{ matrix.arch }}
release: 4
version: ${{ env.version }}
release: ${{ env.release }}
commit_hash: ${{ github.sha }}
cache_key: cache-${{ github.sha }}-${{ matrix.package_extension }}-perl-openwsman-${{ matrix.distrib }}-${{ matrix.arch }}-${{ github.head_ref || github.ref_name }}
rpm_gpg_key: ${{ secrets.RPM_GPG_SIGNING_KEY }}
@ -196,15 +206,6 @@ jobs:
rpm_gpg_signing_passphrase: ${{ secrets.RPM_GPG_SIGNING_PASSPHRASE }}
stability: ${{ needs.get-environment.outputs.stability }}
# set condition to true if artifacts are needed
- if: ${{ false }}
name: Upload package artifacts
uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
with:
name: packages-${{ matrix.distrib }}-${{ matrix.arch }}
path: ./*.${{ matrix.package_extension}}
retention-days: 1
deliver-rpm:
needs: [get-environment, package]
if: ${{ contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) }}

View File

@ -23,6 +23,8 @@ jobs:
version_file: connectors/vmware/src/centreon/script/centreon_vmware.pm
get-sources:
needs: [get-environment]
if: ${{ needs.get-environment.outputs.stability != 'stable' }}
runs-on: ubuntu-22.04
steps:
- name: Download vsphere cli sources
@ -45,28 +47,43 @@ jobs:
key: ${{ github.sha }}-${{ github.run_id }}-sources-perl-vmware-vsphere
package:
needs:
- get-sources
- get-environment
runs-on: ubuntu-22.04
needs: [get-environment, get-sources]
strategy:
matrix:
include:
- package_extension: rpm
image: packaging-plugins-alma8
distrib: el8
runner: ubuntu-22.04
arch: amd64
- package_extension: rpm
image: packaging-plugins-alma9
distrib: el9
runner: ubuntu-22.04
arch: amd64
- package_extension: deb
image: packaging-plugins-bullseye
distrib: bullseye
runner: ubuntu-22.04
arch: amd64
- package_extension: deb
image: packaging-plugins-bookworm
distrib: bookworm
runner: ubuntu-22.04
arch: amd64
- package_extension: deb
image: packaging-plugins-jammy
distrib: jammy
runner: ubuntu-22.04
arch: amd64
- package_extension: deb
image: packaging-plugins-bullseye-arm64
distrib: bullseye
runner: ["self-hosted", "collect-arm64"]
arch: arm64
runs-on: ${{ matrix.runner }}
container:
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}
@ -74,7 +91,7 @@ jobs:
username: ${{ secrets.DOCKER_REGISTRY_ID }}
password: ${{ secrets.DOCKER_REGISTRY_PASSWD }}
name: package ${{ matrix.distrib }}
name: package ${{ matrix.distrib }} ${{ matrix.arch }}
steps:
- name: Checkout sources
@ -87,25 +104,50 @@ jobs:
key: ${{ github.sha }}-${{ github.run_id }}-sources-perl-vmware-vsphere
fail-on-cache-miss: true
- name: Set paths according to distrib
run: |
PERL_VERSION=$(perl -E "say $^V" | sed -E "s/v([0-9]+\.[0-9]+).+/\1/g")
echo "Perl version is $PERL_VERSION"
if [[ "${{ matrix.package_extension }}" == "deb" ]]; then
if [ "${{ matrix.arch }}" = "amd64" ]; then
PERL_VENDORARCH="/usr/lib/x86_64-linux-gnu/perl/$PERL_VERSION"
else
PERL_VENDORARCH="/usr/lib/aarch64-linux-gnu/perl/$PERL_VERSION"
fi
else
if [ "${{ matrix.distrib }}" = "el8" ]; then
PERL_VENDORARCH="/usr/local/lib64/perl5"
else
PERL_VENDORARCH="/usr/local/lib64/perl5/$PERL_VERSION"
fi
fi
sed -i "s#@PERL_VENDORARCH@#$PERL_VENDORARCH#g" dependencies/perl-vmware-vsphere/packaging/perl-vmware-vsphere.yaml
cat dependencies/perl-vmware-vsphere/packaging/perl-vmware-vsphere.yaml
shell: bash
- name: Package
uses: ./.github/actions/package-nfpm
with:
nfpm_file_pattern: "dependencies/perl-vmware-vsphere/packaging/perl-vmware-vsphere.yaml"
distrib: ${{ matrix.distrib }}
package_extension: ${{ matrix.package_extension }}
arch: ${{ matrix.arch }}
commit_hash: ${{ github.sha }}
release: ${{ needs.get-environment.outputs.release }}
cache_key: ${{ github.sha }}-${{ github.run_id }}-${{ matrix.package_extension }}-${{ matrix.distrib }}
version: "7.0.1"
release: "17698549"
cache_key: ${{ github.sha }}-${{ github.run_id }}-${{ matrix.package_extension }}-${{ matrix.distrib }}-${{ matrix.arch }}
rpm_gpg_key: ${{ secrets.RPM_GPG_SIGNING_KEY }}
rpm_gpg_signing_key_id: ${{ secrets.RPM_GPG_SIGNING_KEY_ID }}
rpm_gpg_signing_passphrase: ${{ secrets.RPM_GPG_SIGNING_PASSPHRASE }}
stability: ${{ needs.get-environment.outputs.stability }}
deliver-rpm:
needs:
- get-environment
- package
if: ${{ contains(fromJson('["stable", "testing", "unstable"]'), needs.get-environment.outputs.stability) }}
needs: [get-environment, package]
if: ${{ contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) }}
runs-on: [self-hosted, common]
strategy:
@ -119,22 +161,28 @@ jobs:
- name: Delivery
uses: ./.github/actions/rpm-delivery
with:
module_name: perl-vmware-vsphere
module_name: perl-vmware-vsphere-amd64
distrib: ${{ matrix.distrib }}
cache_key: ${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }}
cache_key: ${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }}-amd64
stability: ${{ needs.get-environment.outputs.stability }}
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
deliver-deb:
needs:
- get-environment
- package
if: ${{ contains(fromJson('["stable", "testing", "unstable"]'), needs.get-environment.outputs.stability) }}
needs: [get-environment, package]
if: ${{ contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) }}
runs-on: [self-hosted, common]
strategy:
matrix:
distrib: [bullseye, bookworm, jammy]
include:
- distrib: bullseye
arch: amd64
- distrib: bullseye
arch: arm64
- distrib: bookworm
arch: amd64
- distrib: jammy
arch: amd64
steps:
- name: Checkout sources
@ -143,8 +191,38 @@ jobs:
- name: Delivery
uses: ./.github/actions/deb-delivery
with:
module_name: perl-vmware-vsphere
module_name: perl-vmware-vsphere-${{ matrix.arch }}
distrib: ${{ matrix.distrib }}
cache_key: ${{ github.sha }}-${{ github.run_id }}-deb-${{ matrix.distrib }}
cache_key: ${{ github.sha }}-${{ github.run_id }}-deb-${{ matrix.distrib }}-${{ matrix.arch }}
stability: ${{ needs.get-environment.outputs.stability }}
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
promote:
needs: [get-environment]
if: ${{ contains(fromJson('["stable"]'), needs.get-environment.outputs.stability) }}
runs-on: [self-hosted, common]
strategy:
matrix:
include:
- distrib: el8
arch: amd64
- distrib: el9
arch: amd64
- distrib: bullseye
arch: amd64
- distrib: bookworm
arch: amd64
- distrib: bullseye
arch: arm64
steps:
- name: Checkout sources
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Promote ${{ matrix.distrib }} ${{ matrix.arch }} to stable
uses: ./.github/actions/promote-to-stable
with:
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
module: perl-vmware-vsphere-${{ matrix.arch }}
distrib: ${{ matrix.distrib }}
stability: ${{ needs.get-environment.outputs.stability }}

View File

@ -102,7 +102,7 @@ jobs:
path: ./*.rpm
key: ${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }}
- uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
- uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
with:
name: packages-${{ matrix.distrib }}
path: ./*.rpm

View File

@ -37,7 +37,7 @@ jobs:
with:
python-version: '3.9'
- uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.1
- uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
id: filter
with:
base: ${{ github.ref }}
@ -93,7 +93,7 @@ jobs:
fetch-depth: 1
- name: Prepare FatPacker
uses: shogo82148/actions-setup-perl@ea0507898383e7dbce382138da0c21af1849eb9e # v1.27.0
uses: shogo82148/actions-setup-perl@28eae78d12c2bba1163aec45d123f6d9228bc307 # v1.29.0
with:
perl-version: '5.34'
install-modules-with: cpm
@ -155,6 +155,7 @@ jobs:
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- if: ${{ matrix.distrib == 'el7' }}
# el7 is not compatible with checkout v4 which uses node20
uses: actions/cache/restore@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2
with:
path: ./build/

View File

@ -20,17 +20,17 @@ jobs:
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.1
- uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
id: filter
with:
base: ${{ github.ref }}
list-files: shell
filters: |
plugins:
- added|modified: src/**
- added|modified: 'src/**/*.pm'
- name: Install CPAN Libraries
uses: shogo82148/actions-setup-perl@ea0507898383e7dbce382138da0c21af1849eb9e # v1.27.0
uses: shogo82148/actions-setup-perl@28eae78d12c2bba1163aec45d123f6d9228bc307 # v1.29.0
with:
perl-version: '5.34'
install-modules-with: cpm

View File

@ -28,15 +28,15 @@ jobs:
sudo apt-get install -qqy snmpsim
- name: Install Node.js
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: 16
node-version: 20
- name: Install Mockoon CLI
run: npm install -g -D @mockoon/cli@3.1.0
run: npm install -g -D @mockoon/cli@6.2.0
- name: Install perl dependencies
uses: shogo82148/actions-setup-perl@ea0507898383e7dbce382138da0c21af1849eb9e # v1.27.0
uses: shogo82148/actions-setup-perl@28eae78d12c2bba1163aec45d123f6d9228bc307 # v1.29.0
with:
perl-version: '5.34'
install-modules-with: cpm

View File

@ -8,26 +8,55 @@
[![Forks][forks-shield]][forks-url]
[![Issues][issues-shield]][issues-url]
## What are Centreon Plugins
“centreon-plugins” is a free and open source project to monitor systems. The project can be used with Centreon and all monitoring softwares compatible with Nagios plugins.
[Centreon plugins](https://github.com/centreon/centreon-plugins/) is a free and open source project to monitor systems. The project can be used with Centreon and all monitoring softwares compatible with Nagios plugins.
### Principles
[Centreon plugins](https://github.com/centreon/centreon-plugins/) should comply with [Monitoring Plugins Development Guidelines](https://www.monitoring-plugins.org/doc/guidelines.html).
In short, they return:
- An error code:
- `0` for `OK`
- `1` for `WARNING`
- `2` for `CRITICAL`
- `3` for `UNKNOWN`
- A human understandable output message (example: `OK: CPU(s) average usage is 2.66 % - CPU '0' usage : 2.66 %`).
- A set of metrics provided as *perfdata* after a `|` character (example: `'cpu.utilization.percentage'=2.66%;;;0;100 '0#core.cpu.utilization.percentage'=2.66%;;;0;100`).
### What can Centreon Plugins monitor?
You can monitor many systems:
* application: Apache, Asterisk, Elasticsearch, Github, Jenkins, Kafka, Nginx, Pfsense, Redis, Tomcat, Varnish,...
* cloud: AWS, Azure, Docker, Office365, Nutanix, Prometheus,...
* database: Firebird, Informix, MS SQL, MySQL, Oracle, Postgres, Cassandra
* hardware: printers (rfc3805), UPS (Powerware, Mge, Standard), Sun Hardware, Cisco UCS, SensorIP, HP Proliant, HP Bladechassis, Dell Openmanage, Dell CMC, Raritan,...
* network: Aruba, Brocade, Bluecoat, Brocade, Checkpoint, Cisco AP/IronPort/ASA/Standard, Extreme, Fortigate, H3C, Hirschmann, HP Procurve, F5 BIG-IP, Juniper, PaloAlto, Redback, Riverbed, Ruggedcom, Stonesoft,...
* os: Linux (SNMP, NRPE), Freebsd (SNMP), AIX (SNMP), Solaris (SNMP)...
* storage: EMC Clariion, Netapp, Nimble, HP MSA p2000, Dell EqualLogic, Qnap, Panzura, Synology...
* **Application**: Apache, Asterisk, Elasticsearch, Github, Jenkins, Kafka, Nginx, Pfsense, Redis, Tomcat, Varnish, etc.
* **Cloud**: AWS, Azure, Docker, Office365, Nutanix, Prometheus, etc.
* **Databases**: Firebird, Informix, MS SQL, MySQL, Oracle, Postgres, Cassandra.
* **Hardware**: printers (RFC3805), UPS (Powerware, Mge, Standard), Sun Hardware, Cisco UCS, SensorIP, HP Proliant, HP Bladechassis, Dell Openmanage, Dell CMC, Raritan, etc.
* **Network**: Aruba, Brocade, Bluecoat, Brocade, Checkpoint, Cisco AP/IronPort/ASA/Standard, Extreme, Fortigate, H3C, Hirschmann, HP Procurve, F5 BIG-IP, Juniper, PaloAlto, Redback, Riverbed, Ruggedcom, Stonesoft, etc.
* **Operating systems**: Linux (SNMP, NRPE), Freebsd (SNMP), AIX (SNMP), Solaris (SNMP), etc.
* **Storage**: EMC Clariion, Netapp, Nimble, HP MSA p2000, Dell EqualLogic, Qnap, Panzura, Synology, etc.
## Basic Usage
To get a complete list, run:
```bash
perl src/centreon_plugins.pl --list-plugin
```
### Basic Usage
We'll use a basic example to show you how to monitor a system. I have finished the install section and I want to monitor a Linux in SNMP.
First, I need to find the plugin to use in the list:
$ perl centreon_plugins.pl --list-plugin | grep -i linux | grep 'PLUGIN'
PLUGIN: os::linux::local::plugin
PLUGIN: os::linux::snmp::plugin
```bash
perl centreon_plugins.pl --list-plugin | grep -i linux | grep 'PLUGIN'
```
It will return:
```
PLUGIN: os::linux::local::plugin
PLUGIN: os::linux::snmp::plugin
```
It seems that 'os::linux::snmp::plugin' is the good one. So I verify with the option ``--help`` to be sure:
@ -81,7 +110,39 @@ I can set threshold with options ``--warning`` and ``--critical``:
For more information or help, please read ['doc/en/user/guide.rst'](./doc/en/user/guide.rst).
## Continuous integration
## Contributions
### Code contributions/pull requests
If you want to contribute by submitting new functionalities, enhancements or bug fixes, first thank you for participating :-)
Then have a look, if not already done, to our **[development guide](https://github.com/centreon/centreon-plugins/blob/develop/doc/en/developer/guide.md)**.
Then create a [fork](https://github.com/centreon/centreon-plugins/fork) and a development branch, and once it's done, you may submit a [pull request](https://github.com/centreon/centreon-plugins/pulls) that the corporate development team will examine.
### Issues/bug reports
If you encounter a behaviour that is clearly a bug or a regression, you are welcome to submit an [issue](https://github.com/centreon/centreon-plugins/issues). Please be aware that this is an open source project and that there is no guaranteed response time.
### Questions/search for help
If you have trouble using our plugins, but are not sure whether it's due to a bug or a misuse, please take the time to ask for help on [The Watch, Data Collection section](https://thewatch.centreon.com/data-collection-6) and become certain that it is a bug before submitting it here.
### Feature/enhancement request
There is high demand for new plugins and new functionalities on existing plugins, so we have to rely on our community to help us prioritize them.
How? Post your suggestion on [The Watch Ideas](https://thewatch.centreon.com/ideas) with as much detail as possible and we will pick the most voted topics to add them to our product roadmap.
To develop a plugin/mode, we need the following information, depending on the protocol:
* **SNMP**: MIB files and full snmpwalk of enterprise branch (`snmpwalk -ObentU -v 2c -c public address .1.3.6.1.4.1 > equipment.snmpwalk`) or [SNMP collections](https://thewatch.centreon.com/product-how-to-21/snmp-collection-tutorial-132).
* **HTTP API (SOAP, Rest/Json, XML-RPC)**: the documentation and some curl examples or HTTP [collections](https://thewatch.centreon.com/data-collection-6/centreon-plugins-discover-collection-modes-131).
* **CLI**: command line examples (command + result).
* **SQL**: queries + results + column types or [SQL collections](https://thewatch.centreon.com/product-how-to-21/sql-collection-tutorial-134).
* **JMX**: mbean names and attributes.
If some information is confidential, such as logins or IP addresses, obfuscate them in what is sent publicly and we'll get in touch with you by private message if this information is needed.
Please note that all the developments are open source, we will not commit to a release date. If it is an emergency for you, please contact [Centreon's sales team](https://www.centreon.com/contact/).
### Continuous integration
Please follow documentation [here](./doc/CI.md)

View File

@ -40,9 +40,9 @@ BEGIN {
# it's a hack if you unset that
#$ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS} = "Net::SSL";
# The option is not omit to verify the certificate chain.
# The option is not omit to verify the certificate chain.
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
eval {
# required for new IO::Socket::SSL versions
require IO::Socket::SSL;
@ -54,7 +54,7 @@ BEGIN {
use base qw(centreon::vmware::script);
use vars qw(%centreon_vmware_config);
my $VERSION = '3.2.5';
my $VERSION = '3.2.6';
my %handlers = (TERM => {}, HUP => {}, CHLD => {});
my @load_modules = (

View File

@ -45,7 +45,7 @@ sub init_response {
my (%options) = @_;
$manager_response->{code} = 0;
$manager_response->{vmware_connector_version} = '3.2.5';
$manager_response->{vmware_connector_version} = '3.2.6';
$manager_response->{short_message} = 'OK';
$manager_response->{extra_message} = '';
$manager_response->{identity} = $options{identity} if (defined($options{identity}));

View File

@ -1,15 +1,15 @@
#!/usr/bin/perl
# Copyright 2015 Centreon (http://www.centreon.com/)
#
# Centreon is a full-fledged industry-strength solution that meets
# the needs in IT infrastructure and application monitoring for
# 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
# 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,
@ -50,7 +50,7 @@ Print a brief help message and exits.
=head1 DESCRIPTION
B<centreon_vmware.pl> will connect to ESX and/or VirtualCenter.
B<centreon_vmware.pl> will connect to ESX and/or VirtualCenter.
Use the plugin 'apps::vmware::connector::plugin' from: https://github.com/centreon/centreon-plugins
=cut

View File

@ -2,7 +2,7 @@ name: "@NAME@"
arch: "${ARCH}"
platform: "linux"
version_schema: "none"
version: "0.019"
version: "0.020"
release: "${RELEASE}${DIST}"
section: "default"
priority: "optional"

View File

@ -10,4 +10,4 @@ WriteMakefile(
DEFINE => '',
INC => '-I.',
OBJECT => 'libauthSamba.o SmbClient.o',
);
);

View File

@ -0,0 +1,44 @@
name: "@NAME@"
arch: "${ARCH}"
platform: "linux"
version_schema: "none"
version: "${VERSION}"
release: "${RELEASE}${DIST}"
section: "default"
priority: "optional"
maintainer: "Centreon <contact@centreon.com>"
description: |
KeePass::Reader is a perl interface to read KeePass version 4.
Commit: @COMMIT_HASH@
vendor: "Centreon"
homepage: "https://www.centreon.com"
license: "Apache-2.0"
contents:
- src: "/tmp/perl-keepass-reader/lib/perl5/KeePass"
dst: "@PERL_VENDORLIB@/Keepass"
type: tree
file_info:
mode: 0644
- src: "/tmp/perl-keepass-reader/man/man3/KeePass::Reader.3pm"
dst: "/usr/share/man/man3/"
file_info:
mode: 0644
overrides:
rpm:
depends:
- perl(Crypt::Argon2)
provides:
- perl(KeePass::Reader)
deb:
depends:
- libcrypt-argon2-perl
rpm:
summary: Interface to KeePass V4 database files
compression: zstd
signature:
key_file: ${RPM_SIGNING_KEY_FILE}
key_id: ${RPM_SIGNING_KEY_ID}

View File

@ -1,48 +0,0 @@
Name: perl-KeePass-Reader
Version: 0.2
Release: 2%{?dist}
Summary: Interface to KeePass V4 database files
Group: Development/Libraries
License: Apache2
URL: https://github.com/garnier-quentin/perl-KeePass-Reader
Source0: %{name}.tar.gz
BuildArch: noarch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: make
BuildRequires: perl(ExtUtils::MakeMaker)
Requires: perl(Crypt::Argon2)
%description
KeePass::Reader is a perl interface to read KeePass version 4.
%prep
%setup -q -n %{name}
%build
%{__perl} Makefile.PL INSTALLDIRS=vendor OPTIMIZE="$RPM_OPT_FLAGS"
make %{?_smp_mflags}
%install
rm -rf %{buildroot}
make pure_install PERL_INSTALL_ROOT=$RPM_BUILD_ROOT
find $RPM_BUILD_ROOT -type f -name .packlist -exec rm -f {} ';'
find $RPM_BUILD_ROOT -type f -name '*.bs' -a -size 0 -exec rm -f {} ';'
find $RPM_BUILD_ROOT -type d -depth -exec rmdir {} 2>/dev/null ';'
rm -rf $RPM_BUILD_ROOT%{_usr}/bin/hexdump
%{_fixperms} $RPM_BUILD_ROOT/*
%check
#make test
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root,-)
%{perl_vendorlib}
%{_mandir}/man3/*.3*
%changelog

View File

@ -31,7 +31,7 @@ sub new {
sub error {
my ($self, %options) = @_;
if (defined($options{message})) {
$self->{error_msg} = $options{message};
}
@ -42,7 +42,7 @@ sub error {
sub load_db {
my ($self, %options) = @_;
$self->{error_msg} = undef;
$self->{error_msg} = undef;
$self->{buffer_file} = undef;
$self->{master_read_pos} = 0;

View File

@ -33,7 +33,7 @@ contents:
overrides:
rpm:
depends:
- perl
- perl-interpreter
- libssh
conflicts:
- perl-Libssh-Session-debuginfo

View File

@ -2,7 +2,7 @@ name: "@NAME@"
arch: "${ARCH}"
platform: "linux"
version_schema: "none"
version: "0.54"
version: "0.55"
release: "${RELEASE}${DIST}"
section: "default"
priority: "optional"
@ -40,7 +40,7 @@ contents:
overrides:
rpm:
depends:
- perl
- perl-interpreter
- libcurl
conflicts:
- perl-Net-Curl-debuginfo

View File

@ -2,7 +2,7 @@ name: "libwsman1"
arch: "${ARCH}"
platform: "linux"
version_schema: "none"
version: "@VERSION@"
version: "${VERSION}"
release: "${RELEASE}${DIST}"
section: "default"
priority: "optional"
@ -14,16 +14,21 @@ homepage: "http://www.openwsman.org/"
license: "BSD"
contents:
- src: "/tmp/openwsman-@VERSION@/build/src/lib/libwsman.so.*"
- src: "/tmp/openwsman-${VERSION}/build/src/lib/libwsman.so.*"
dst: "@USRLIB@"
expand: true
file_info:
mode: 0644
- src: "/tmp/openwsman-@VERSION@/build/src/lib/libwsman_client.so.*"
- src: "/tmp/openwsman-${VERSION}/build/src/lib/libwsman_client.so.*"
dst: "@USRLIB@"
expand: true
file_info:
mode: 0644
- src: "/tmp/openwsman-@VERSION@/build/src/lib/libwsman_curl_client_transport.so.*"
- src: "/tmp/openwsman-${VERSION}/build/src/lib/libwsman_curl_client_transport.so.*"
dst: "@USRLIB@"
expand: true
file_info:
mode: 0644

View File

@ -2,7 +2,7 @@ name: "@NAME@"
arch: "${ARCH}"
platform: "linux"
version_schema: "none"
version: "@VERSION@"
version: "${VERSION}"
release: "${RELEASE}${DIST}"
section: "default"
priority: "optional"
@ -14,13 +14,15 @@ homepage: "http://www.openwsman.org/"
license: "BSD"
contents:
- src: "/tmp/openwsman-@VERSION@/build/bindings/perl/openwsman.so"
- src: "/tmp/openwsman-${VERSION}/build/bindings/perl/openwsman.so"
dst: "@PERL_VENDORARCH@/"
expand: true
file_info:
mode: 0644
- src: "/tmp/openwsman-@VERSION@/build/bindings/perl/openwsman.pm"
- src: "/tmp/openwsman-${VERSION}/build/bindings/perl/openwsman.pm"
dst: "@PERL_VENDORARCH@/"
expand: true
file_info:
mode: 0644

View File

@ -2,7 +2,7 @@ name: "sblim-sfcc"
arch: "${ARCH}"
platform: "linux"
version_schema: "none"
version: "2.7.2"
version: "${VERSION}"
release: "${RELEASE}${DIST}"
section: "default"
priority: "optional"

View File

@ -1,9 +1,9 @@
name: "perl-VMware-vSphere"
arch: "amd64"
arch: "${ARCH}"
platform: "linux"
version_schema: "none"
version: "7.0.0"
release: "17698549${DIST}"
version: "${VERSION}"
release: "${RELEASE}${DIST}"
section: "default"
priority: "optional"
maintainer: "Centreon <contact@centreon.com>"
@ -20,18 +20,10 @@ license: "GPLv2+"
contents:
- src: "../../../vmware-vsphere-cli-distrib/VMware"
dst: "@PERL_SITELIB@/VMware"
packager: rpm
- src: "../../../vmware-vsphere-cli-distrib/VMware"
dst: "/usr/share/perl5/VMware"
packager: deb
dst: "@PERL_VENDORARCH@/VMware"
- src: "../../../vmware-vsphere-cli-distrib/WSMan"
dst: "@PERL_SITELIB@/WSMan"
packager: rpm
- src: "../../../vmware-vsphere-cli-distrib/WSMan"
dst: "/usr/share/perl5/WSMan"
packager: deb
dst: "@PERL_VENDORARCH@/WSMan"
overrides:
rpm:

View File

@ -943,9 +943,9 @@ List of methods:
* **new**: class constructor. Overload if you need to add some specific options
or to use a statefile.
* **check_options**: overload if you need to check your specific options.
* **manage_selection**: overload if *mandatory*. Method to get informations for
* **manage_selection**: overload is *mandatory*. Method to get informations for
the equipment.
* **set_counters**: overload if **mandatory**. Method to configure counters.
* **set_counters**: overload is **mandatory**. Method to configure counters.
**Class hardware**

View File

@ -0,0 +1,92 @@
name: "centreon-nrpe4-daemon"
arch: "amd64"
platform: "linux"
version_schema: "none"
version: "4.1.0"
release: "${RELEASE}${DIST}"
section: "default"
priority: "optional"
maintainer: "Centreon <contact@centreon.com>"
description: |
The centreon-nrpe packages contains the Nagios Remote Plug-ins Executor.
Daemon which can execute predefined commands on the remote host.
Commit: @COMMIT_HASH@
vendor: "Centreon"
homepage: "https://centreon.com"
license: "GPLv2+"
contents:
- src: "../../nrpe-src/src/nrpe"
dst: "/usr/sbin/centreon-nrpe4"
- src: "../../nrpe-src/sample-config/nrpe.cfg"
dst: "/etc/nrpe/centreon-nrpe4.cfg"
type: config|noreplace
file_info:
mode: 0644
- src: "files/nrpe4.sysconfig"
dst: "/etc/sysconfig/centreon-nrpe4"
packager: rpm
file_info:
mode: 0644
- src: "files/nrpe4.sysconfig"
dst: "/etc/default/centreon-nrpe4"
packager: deb
file_info:
mode: 0644
- src: "files/nrpe4.rpm.service"
dst: "/lib/systemd/system/centreon-nrpe4.service"
packager: rpm
file_info:
mode: 0644
- src: "files/nrpe4.deb.service"
dst: "/lib/systemd/system/centreon-nrpe4.service"
packager: deb
file_info:
mode: 0644
- dst: "/var/log/nrpe"
type: dir
file_info:
mode: 0755
owner: centreon-engine
group: centreon-engine
- dst: "/var/log/nrpe/centplugins"
type: dir
file_info:
mode: 0755
owner: centreon-engine
group: centreon-engine
scripts:
preinstall: ./scripts/centreon-nrpe4-daemon-preinstall.sh
postinstall: ./scripts/centreon-nrpe4-daemon-postinstall.sh
preremove: ./scripts/centreon-nrpe4-daemon-preremove.sh
overrides:
rpm:
replaces:
- centreon-nrpe4-daemon-debuginfo
- centreon-nrpe4-daemon-debugsource
conflicts:
- centreon-nrpe4-daemon-debuginfo
- centreon-nrpe4-daemon-debugsource
provides:
- centreon-nrpe4-daemon-debuginfo
- centreon-nrpe4-daemon-debugsource
deb:
replaces:
- centreon-nrpe4-daemon-dbgsym
conflicts:
- centreon-nrpe4-daemon-dbgsym
provides:
- centreon-nrpe4-daemon-dbgsym
rpm:
summary: Nagios Remote Plugins Execution daemon
signature:
key_file: ${RPM_SIGNING_KEY_FILE}
key_id: ${RPM_SIGNING_KEY_ID}

View File

@ -0,0 +1,23 @@
[Unit]
Description=Nagios Remote Program Executor
Documentation=http://www.nagios.org/documentation
After=var-run.mount nss-lookup.target network.target local-fs.target time-sync.target
Before=getty@tty1.service plymouth-quit.service xdm.service
Conflicts=nrpe.socket
Requires=network.target
[Service]
Type=forking
User=centreon-engine
Group=centreon-engine
EnvironmentFile=/etc/default/centreon-nrpe4
ExecStart=/usr/sbin/centreon-nrpe4 -c /etc/nrpe/centreon-nrpe4.cfg -d $NRPE_OPT
Restart=on-abort
PIDFile=/var/log/nrpe/nrpe4.pid
ExecStopPost=/bin/rm -f /var/log/nrpe/nrpe4.pid
TimeoutStopSec=60
PrivateTmp=false
OOMScoreAdjust=-500
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,23 @@
[Unit]
Description=Nagios Remote Program Executor
Documentation=http://www.nagios.org/documentation
After=var-run.mount nss-lookup.target network.target local-fs.target time-sync.target
Before=getty@tty1.service plymouth-quit.service xdm.service
Conflicts=nrpe.socket
Requires=network.target
[Service]
Type=forking
User=centreon-engine
Group=centreon-engine
EnvironmentFile=/etc/sysconfig/centreon-nrpe4
ExecStart=/usr/sbin/centreon-nrpe4 -c /etc/nrpe/centreon-nrpe4.cfg -d $NRPE_OPT
Restart=on-abort
PIDFile=/var/log/nrpe/nrpe4.pid
ExecStopPost=/bin/rm -f /var/log/nrpe/nrpe4.pid
TimeoutStopSec=60
PrivateTmp=false
OOMScoreAdjust=-500
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,2 @@
# specify additional command line arguments for nrpe
NRPE_OPT=""

View File

@ -0,0 +1,29 @@
--- a/sample-config/nrpe.cfg.in 2018-09-14 13:40:08.496324915 +0200
+++ b/sample-config/nrpe.cfg.in 2018-09-14 13:47:57.624296953 +0200
@@ -40,7 +40,7 @@
# number. The file is only written if the NRPE daemon is started by the root
# user and is running in standalone mode.
-pid_file=@piddir@/nrpe.pid
+pid_file=@piddir@/nrpe4.pid
@@ -119,7 +119,7 @@
#
# Values: 0=do not allow arguments, 1=allow command arguments
-dont_blame_nrpe=0
+dont_blame_nrpe=1
@@ -300,7 +300,7 @@
command[check_hda1]=@pluginsdir@/check_disk -w 20% -c 10% -p /dev/hda1
command[check_zombie_procs]=@pluginsdir@/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=@pluginsdir@/check_procs -w 150 -c 200
-
+command[check_centreon_plugins]=/usr/lib/centreon/plugins/centreon_linux_local.pl --plugin=$ARG1$ --mode=$ARG2$ $ARG3$
# The following examples allow user-supplied arguments and can
# only be used if the NRPE daemon was compiled with support for

View File

@ -0,0 +1,31 @@
#!/bin/sh
startNrpeDaemon() {
systemctl daemon-reload ||:
systemctl unmask centreon-nrpe4.service ||:
systemctl preset centreon-nrpe4.service ||:
systemctl enable centreon-nrpe4.service ||:
systemctl restart centreon-nrpe4.service ||:
}
action="$1"
if [ "$1" = "configure" ] && [ -z "$2" ]; then
# Alpine linux does not pass args, and deb passes $1=configure
action="install"
elif [ "$1" = "configure" ] && [ -n "$2" ]; then
# deb passes $1=configure $2=<current version>
action="upgrade"
fi
case "$action" in
"1" | "install")
startNrpeDaemon
;;
"2" | "upgrade")
startNrpeDaemon
;;
*)
# $1 == version being installed
startNrpeDaemon
;;
esac

View File

@ -0,0 +1,6 @@
#!/bin/sh
getent group centreon-engine > /dev/null 2>&1 || groupadd -r centreon-engine
getent passwd centreon-engine > /dev/null 2>&1 || useradd -g centreon-engine --shell /bin/bash -m -d /var/lib/centreon-engine -r centreon-engine > /dev/null 2>&1 ||:
mkdir -p /var/lib/centreon/centplugins/
chown centreon-engine: /var/lib/centreon/centplugins/

View File

@ -0,0 +1,3 @@
#!/bin/sh
systemctl stop centreon-nrpe4.service ||:

View File

@ -0,0 +1,4 @@
{
"dependencies": [
]
}

View File

@ -0,0 +1,9 @@
{
"pkg_name": "centreon-plugin-Hardware-Storage-DataCore-Sansymphony-Restapi",
"pkg_summary": "Centreon Plugin",
"plugin_name": "centreon_datacore_api.pl",
"files": [
"centreon/plugins/script_custom.pm",
"storage/datacore/api/"
]
}

View File

@ -0,0 +1,4 @@
{
"dependencies": [
]
}

View File

@ -1,5 +1,7 @@
{
"dependencies": [
"libdatetime-perl",
"libxml-libxml-perl",
"net-tools",
"quota"
]

View File

@ -2,9 +2,12 @@
"dependencies": [
"net-tools",
"quota",
"lsof",
"perl(Data::Dumper)",
"perl(Pod::Parser)",
"perl(DateTime)",
"perl(Digest::MD5)",
"perl(NetAddr::IP)"
"perl(NetAddr::IP)",
"perl(Pod::Parser)",
"perl(XML::LibXML)"
]
}

View File

@ -204,7 +204,8 @@ sub new {
$options{options}->add_options(arguments => {
'filter-broker-name:s' => { name => 'filter_broker_name' },
'filter-destination-name:s' => { name => 'filter_destination_name' },
'filter-destination-type:s' => { name => 'filter_destination_type' }
'filter-destination-type:s' => { name => 'filter_destination_type' },
'request:s@' => { name => 'request' }
});
return $self;
@ -238,6 +239,24 @@ sub manage_selection {
]
}
];
if (defined($self->{option_results}->{request}) && $self->{option_results}->{request} ne '') {
centreon::plugins::misc::mymodule_load(
output => $self->{output}, module => 'JSON::XS',
error_msg => "Cannot load module 'JSON::XS'."
);
$request = undef;
foreach (@{$self->{option_results}->{request}}) {
eval {
push @$request, JSON::XS->new->utf8->decode($_);
};
if ($@) {
$self->{output}->add_option_msg(short_msg => "Cannot use request as it is a malformed JSON: " . $@);
$self->{output}->option_exit();
}
}
}
my $result = $options{custom}->get_attributes(request => $request, nothing_quit => 1);
$self->{cache_name} = 'activemq_' . $self->{mode} . '_' . md5_hex($options{custom}->get_connection_info()) . '_' .
@ -318,6 +337,24 @@ Filter destination name (can be a regexp).
Filter destination type (can be a regexp).
=item B<--request>
EXPERIMENTAL Option : Community-supported only (no support from Centreon at this time)
Set the MBean and attributes to request (will replace defaults)
in a JSON-formatted fashion.
This is useful to reduce the size of returned data by providing destination
type and name or broker name instead of filtering afterwards, and grabbing
exactly the wanted attributes.
This can be set multiple times.
Example:
--request='{"mbean":"org.apache.activemq:brokerName=*,destinationName=MyQueue,destinationType=Queue,type=Broker","attributes":[{"name":"QueueSize"}]}'
--request='{"mbean":"org.apache.activemq:brokerName=*,type=Broker,service=Health","attributes":[{"name":"CurrentStatus"}]}'
=item B<--warning-status>
Define the conditions to match for the status to be WARNING.

View File

@ -389,7 +389,7 @@ JSON OPTIONS:
=item B<--data>
Set file with JSON request
Set the JSONrequest or specify a file with the request inside.
=item B<--lookup>

View File

@ -242,7 +242,7 @@ sub collect_snmp_tables {
my $used_instance = defined($table->{used_instance}) && $table->{used_instance} ne '' ? $table->{used_instance} : '\.(\d+)$';
my $snmp_result = $options{snmp}->get_table(oid => $table->{oid});
foreach (keys %$snmp_result) {
/$used_instance/;
/$used_instance/ or next;
next if (defined($self->{snmp_collected}->{tables}->{ $table->{name} }->{$1}));
my $instance = $1;

View File

@ -311,6 +311,14 @@ sub backtick {
return (0, join("\n", @output), $return_code);
}
sub is_empty {
my $value = shift;
if (!defined($value) or $value eq '') {
return 1;
}
return 0;
}
sub trim {
my ($value) = $_[0];

View File

@ -277,6 +277,7 @@ sub display {
foreach my $comp (sort(keys %{$self->{components}})) {
# Skipping short msg when no components
next if (!defined($self->{option_results}->{no_component_count}) && $self->{components}->{$comp}->{total} == 0 && $self->{components}->{$comp}->{skip} == 0);
next if (defined($self->{option_results}->{component}) && $comp !~ /$self->{option_results}->{component}/ );
if ($self->{count} == 1) {
($exit, $warn, $crit) = $self->get_severity_count(label => $comp, value => $self->{components}->{$comp}->{total});
@ -488,24 +489,24 @@ Default template for hardware. Should be extended.
=item B<--component>
Which component to check (default: '.*').
Can be: 'xxx', 'yyy'.
Define which component should be monitored based on their names.
This option will be treated as a regular expression.
All components are included by default ('.*').
=item B<--filter>
Exclude the items given as a comma-separated list (example: --filter=xxx --filter=yyyy).
You can also exclude items from specific instances: --filter=xxxxx,instancevalue
Exclude some components. This option can be called several times (example: --filter=component1 --filter=component2).
You can also exclude components from a specific instance (example: --filter=component_name,instance_value).
=item B<--absent-problem>
Return an error if an entity is not 'present' (default is skipping) (comma separated list)
Can be specific or global: --absent-problem=xxxx,instancevalue
Return an error if a component is not 'present' (default is skipping).
It can be set globally or for a specific instance: --absent-problem='component_name' or --absent-problem='component_name,instance_value'.
=item B<--no-component>
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).
@ -513,21 +514,21 @@ Example: --threshold-overload='xxxxx,CRITICAL,^(?!(normal)$)'
=item B<--warning>
Set warning threshold for temperatures (syntax: type,instance,threshold)
Example: --warning='xxxxx,.*,30'
Define the warning threshold for temperatures (syntax: type,instance,threshold)
Example: --warning='temperature,.*,30'
=item B<--critical>
Set critical threshold for temperatures (syntax: type,instance,threshold)
Example: --critical='xxxxx,.*,40'
Define the critical threshold for temperatures (syntax: type,instance,threshold)
Example: --critical='temperature,.*,40'
=item B<--warning-count-xxxx>
=item B<--warning-count-*>
Set warning threshold for component count.
Define the warning threshold for the number of components of one type (replace '*' with the component type).
=item B<--critical-count-xxxx>
=item B<--critical-count-*>
Set critical threshold for component count.
Define the critical threshold for the number of components of one type (replace '*' with the component type).
=back

View File

@ -0,0 +1,67 @@
{
"constants": {},
"mapping": {},
"snmp": {
"tables": [
{
"name": "upsEnvSensors",
"oid": ".1.3.6.1.4.1.54661.1.1.1.2.2.1",
"used_instance": "\\.2\\.(\\d+)$",
"entries": [
{
"name": "temperature",
"oid": ".1.3.6.1.4.1.54661.1.1.1.2.2.1.2"
},
{
"name": "humidity",
"oid": ".1.3.6.1.4.1.54661.1.1.1.2.2.1.3"
}
]
}
]
},
"selection_loop": [
{
"name": "Sensors",
"source": "%(snmp.tables.upsEnvSensors)",
"expand_table": {
"upsEnvSensors": "%(snmp.tables.upsEnvSensors.[%(upsEnvSensors.instance)])"
},
"functions": [
{
"type": "replace",
"src": "%(upsEnvSensors.temperature)",
"expression": "s/(\\d?\\d)(\\d\\d)/$1.$2/"
}
],
"perfdatas": [
{
"nlabel": "environment.temperature.celsius",
"instances": ["%(upsEnvSensors.instance)"],
"value": "%(upsEnvSensors.temperature)",
"critical": "",
"unit": "C"
},
{
"nlabel": "environment.humidity.percent",
"instances": ["%(upsEnvSensors.instance)"],
"value": "%(upsEnvSensors.humidity)",
"critical": "",
"unit": "%",
"min": 0,
"max": 100
}
],
"formatting": {
"printf_msg": "Sensor '%s' temperature is '%s'°C and humidity is '%s'%%",
"printf_var": [
"%(upsEnvSensors.instance)",
"%(upsEnvSensors.temperature)",
"%(upsEnvSensors.humidity)"
],
"display_ok": true
}
}
]
}

View File

@ -153,7 +153,7 @@ sub manage_selection {
my $snmp_result = $options{snmp}->get_leef(
oids => [ map($_->{oid} . '.0', values(%{$mapping->{$label}})) ]
);
if (!defined($snmp_result->{ $mapping->{netvision6}->{status} . '.0' })) {
if (!defined($snmp_result->{ $mapping->{netvision6}->{status}->{oid} . '.0' })) {
$label = 'netvision5';
$snmp_result = $options{snmp}->get_leef(
oids => [ map($_->{oid} . '.0', values(%{$mapping->{$label}})) ],

View File

@ -0,0 +1,172 @@
#
# 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 storage::datacore::restapi::custom::api;
use strict;
use warnings;
use centreon::plugins::http;
use centreon::plugins::statefile;
use JSON::XS;
use centreon::plugins::misc qw(empty);
sub new {
my ($class, %options) = @_;
if (!defined($options{output})) {
print "Class Custom: Need to specify 'output' argument.\n";
exit 3;
}
if (!defined($options{options})) {
$options{output}->add_option_msg(short_msg => "Class Custom: Need to specify 'options' argument.");
$options{output}->option_exit();
}
my $self = {};
bless $self, $class;
$options{options}->add_options(arguments => {
'hostname:s' => { name => 'hostname' },
'port:s' => { name => 'port', default => 443 },
'proto:s' => { name => 'proto', default => 'https' },
'timeout:s' => { name => 'timeout' },
'username:s' => { name => 'username' },
'password:s' => { name => 'password' },
'unknown-http-status:s' => { name => 'unknown_http_status' },
'warning-http-status:s' => { name => 'warning_http_status' },
'critical-http-status:s' => { name => 'critical_http_status' }
});
$options{options}->add_help(package => __PACKAGE__, sections => 'REST API OPTIONS', once => 1);
$self->{output} = $options{output};
$self->{http} = centreon::plugins::http->new(%options, default_backend => 'curl');
return $self;
}
sub set_options {
my ($self, %options) = @_;
$self->{option_results} = $options{option_results};
}
sub set_defaults {}
# hostname,username and password are required options
sub check_options {
my ($self, %options) = @_;
$self->{http}->set_options(%{$self->{option_results}});
$self->{timeout} = (defined($self->{option_results}->{timeout})) ? $self->{option_results}->{timeout} : 50;
if (centreon::plugins::misc::is_empty($self->{option_results}->{hostname})) {
$self->{output}->add_option_msg(short_msg => 'Please set hostname option');
$self->{output}->option_exit();
}
if (centreon::plugins::misc::is_empty($self->{option_results}->{username})) {
$self->{output}->add_option_msg(short_msg => 'Please set username option to authenticate against datacore rest api');
$self->{output}->option_exit();
}
if (centreon::plugins::misc::is_empty($self->{option_results}->{password})) {
$self->{output}->add_option_msg(short_msg => 'Please set password option to authenticate against datacore rest api');
$self->{output}->option_exit();
}
}
sub settings {
my ($self, %options) = @_;
return if (defined($self->{settings_done}));
$self->{http}->add_header(key => 'ServerHost', value => $self->{option_results}->{hostname});
$self->{http}->set_options(basic => 1, credentials => 1);
$self->{settings_done} = 1;
}
# wrapper around centreon::plugins::http::request to add authentication and decode json.
# output : deserialized json from the api if not error found in http call.
sub request_api {
my ($self, %options) = @_;
# datacore api require a ServerHost header with the hostname used to query the api to respond.
# authentication is http standard basic auth.
my $result = $self->{http}->request(
username => $self->{option_results}->{username},
password => $self->{option_results}->{password},
unknown_status => $self->{option_results}->{unknown_http_status},
warning_status => $self->{option_results}->{warning_http_status},
critical_status => $self->{option_results}->{critical_http_status},
%options,
);
# Declare a scalar to deserialize the JSON content string into a perl data structure
my $decoded_content;
eval {
$decoded_content = JSON::XS->new->decode($result);
};
# Catch the error that may arise in case the data received is not JSON
if ($@) {
$self->{output}->add_option_msg(short_msg => "Cannot decode JSON result");
$self->{output}->option_exit();
}
return $decoded_content;
}
1;
__END__
=head1 NAME
Datacore Sansymphony Rest API
=head1 REST API OPTIONS
Datacore Sansymphony Rest API
=over 8
=item B<--hostname>
Address of the Datacore server that hosts the API endpoint.
=item B<--port>
Port of the resource to connect to (default: 443).
=item B<--proto>
HTTP protocol, either http or https (default: 'https')
=item B<--username>
Username to access the endpoint.
=item B<--password>
Password to access the endpoint.
=item B<--timeout>
Set timeout in seconds (default: 10).
=back
=head1 DESCRIPTION
B<custom>.

View File

@ -0,0 +1,174 @@
#
# 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 storage::datacore::restapi::mode::alerts;
use strict;
use warnings;
use centreon::plugins::misc qw(empty);
use base qw(centreon::plugins::templates::counter);
my %alerts_level = ('trace' => 0, 'info' => 1, 'warning' => 2, 'error' => 3);
sub set_counters {
my ($self, %options) = @_;
$self->{maps_counters_type} = [
{ name => 'alerts', type => 0},
];
$self->{maps_counters}->{alerts} = [
{
label => 'error',
nlabel => 'datacore.event.error.count',
set => {
key_values => [ { name => 'error' } ],
output_template => 'number of error alerts : %s',
perfdatas => [ { template => '%d', min => 0 } ]
}
}, {
label => 'warning',
nlabel => 'datacore.alerts.warning.count',
set => {
key_values => [ { name => 'warning' } ],
output_template => 'number of warning alerts : %s',
perfdatas => [ { template => '%d', min => 0 } ]
}
}, {
label => 'info',
nlabel => 'datacore.alerts.info.count',
set => {
key_values => [ { name => 'info' } ],
output_template => 'number of info alerts : %s',
perfdatas => [ { template => '%d', min => 0 } ]
}
}, {
label => 'trace',
nlabel => 'datacore.alerts.trace.count',
set => {
key_values => [ { name => 'trace' } ],
output_template => 'number of trace alerts : %s',
perfdatas => [ { template => '%d', min => 0 } ]
}
},
];
}
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-server:s' => { name => 'filter_server' },
'max-alert-age:s' => { name => 'max_alert_age' } });
$self->{output} = $options{output};
return $self;
}
sub check_options {
my ($self, %options) = @_;
$self->SUPER::check_options(%options);
}
sub manage_selection {
my ($self, %options) = @_;
my $alerts = $options{custom}->request_api(
url_path => '/RestService/rest.svc/1.0/alerts'
);
my %alerts_count = (
0 => { count => 0, list => [] },
1 => { count => 0, list => [] },
2 => { count => 0, list => [] },
3 => { count => 0, list => [] });
for my $alert (@$alerts) {
# spec require to filter on time of the log.
$alert->{TimeStamp} =~ /\/Date\((\d+)\)\/$/;
my $alert_date = $1;
if (centreon::plugins::misc::is_empty($alert_date) or $alert_date !~ /^[0-9]*[.,]?\d*$/){
$self->{output}->output_add(long_msg => "alert on $alert->{MachineName} have an invalid date : $alert->{TimeStamp}\n", debug => 1);
next;
}
# filter on age of the alert with a user defined max age
next if (defined($self->{option_results}->{max_alert_age})
and $alert_date < (time - $self->{option_results}->{max_alert_age}) * 1000);
# filter on the machine issuing the alert with a user defined regex
if (!centreon::plugins::misc::is_empty($self->{option_results}->{filter_server})
and $alert->{MachineName} !~ $self->{option_results}->{filter_server}) {
$self->{output}->output_add(long_msg => "excluding alert from machine $alert->{MachineName}\n", debug => 1);
next;
}
$alerts_count{$alert->{Level}}->{count}++;
# we don't want to clog the long output, so we keep only the few first logs.
# we use a array instead of directly adding to long_output because we need to sort errors
if (scalar(@{$alerts_count{$alert->{Level}}->{list}}) < 50) {
push(@{$alerts_count{$alert->{Level}}->{list}}, $alert->{MessageText})
}
}
$self->{output}->output_add(long_msg => "error : " . join("\n", @{$alerts_count{$alerts_level{error}}->{list}}));
$self->{output}->output_add(long_msg => "warning : " . join("\n", @{$alerts_count{$alerts_level{warning}}->{list}}));
$self->{alerts} = {
trace => $alerts_count{$alerts_level{trace}}->{count},
info => $alerts_count{$alerts_level{info}}->{count},
warning => $alerts_count{$alerts_level{warning}}->{count},
error => $alerts_count{$alerts_level{error}}->{count},
};
}
1;
__END__
=head1 MODE
Check Datacore alerts number exposed through the rest api
=over 8
=item B<--max-alert-age>
filter alerts to check those newer than this parameter (s)
=item B<--filter-server>
Define which devices should be monitored based on the MachineName. This option will be treated as a regular expression.
By default all machine will be checked.
=item B<--warning/critical-*>
Warning and critical threshold on the number of alerts of a type before changing state.
Replace * with trace, alert, warning, or error.
=back

View File

@ -0,0 +1,115 @@
#
# 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 storage::datacore::restapi::mode::listpool;
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;
$options{options}->add_options(arguments => {
'filter-name:s' => { name => 'filter_name' },
});
return $self;
}
sub check_options {
my ($self, %options) = @_;
$self->SUPER::init(%options);
}
sub manage_selection {
my ($self, %options) = @_;
$self->{pools} = ();
my $pool_list = $options{custom}->request_api(
url_path => '/RestService/rest.svc/1.0/pools');
if (scalar(@$pool_list) == 0) {
$self->{output}->add_option_msg(short_msg => "No pool found in api response.");
$self->{output}->option_exit();
}
for my $pool (@$pool_list) {
next if (defined($self->{option_results}->{filter_name}) && $self->{option_results}->{filter_name} ne ''
&& $pool->{Alias} !~ /$self->{option_results}->{filter_name}/);
push(@{$self->{pools}}, {
ExtendedCaption => $pool->{ExtendedCaption},
Caption => $pool->{Caption},
Id => $pool->{Id},
Alias => $pool->{Alias}}
);
}
}
sub run {
my ($self, %options) = @_;
$self->manage_selection(%options);
if (scalar $self->{pools} == 0) {
$self->{output}->add_option_msg(short_msg => "No pool found.");
$self->{output}->option_exit();
}
foreach (sort @{$self->{pools}}) {
$self->{output}->output_add(long_msg => sprintf("[ExtendedCaption = %s] [Caption = %s] [Id = %s] [Alias = %s]",
$_->{ExtendedCaption}, $_->{Caption}, $_->{Id}, $_->{Alias}));
}
$self->{output}->output_add(
severity => 'OK',
short_msg => 'List pools : '
);
$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 => ['ExtendedCaption', 'Caption', 'Id', 'Alias']);
}
sub disco_show {
my ($self, %options) = @_;
$self->manage_selection(%options);
foreach (sort @{$self->{pools}}) {
$self->{output}->add_disco_entry(ExtendedCaption => $_->{ExtendedCaption}, Caption => $_->{Caption},
Id => $_->{Id}, Id => $_->{Id}, Alias => $_->{Alias});
}
}
1;
=head1 MODE
List pools.
=over 8
=item B<--filter-name>
Filter pool name (can be a regexp).
=back
=cut

View File

@ -0,0 +1,148 @@
#
# 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 storage::datacore::restapi::mode::monitorstatus;
use strict;
use warnings;
use base qw(centreon::plugins::templates::counter);
use JSON::XS;
use Digest::MD5 qw(md5_hex);
use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng);
use centreon::plugins::misc qw(empty);
my %monitor_state = (1 => "Undefined", 2 => "Healthy", 4 => "Attention", 8 => "Warning", 16 => "Critical");
sub custom_status_output {
my ($self, %options) = @_;
my $res = sprintf(
"'%s' status : '%s', message is '%s'",
$self->{result_values}->{extendedcaption},
$self->{result_values}->{state},
$self->{result_values}->{messagetext}
);
return $res;
}
sub set_counters {
my ($self, %options) = @_;
$self->{maps_counters_type} = [
{ name => 'global', type => 1, message_multiple => 'All memory usages are ok', skipped_code => { -10 => 1 } }
];
$self->{maps_counters}->{global} = [
{ label => 'state',
type => 2,
warning_default => '%{state} =~ /Warning/i',
critical_default => '%{state} =~ /Critical/i',
set => {
key_values => [ { name => 'state' }, { name => 'extendedcaption' }, { name => 'messagetext' } ],
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 => {
'filter-caption:s' => { name => 'filter_caption' } });
$self->{cache} = centreon::plugins::statefile->new(%options);
return $self;
}
sub check_options {
my ($self, %options) = @_;
$self->SUPER::check_options(%options);
$self->{cache}->check_options(option_results => $self->{option_results});
}
sub manage_selection {
my ($self, %options) = @_;
if ($self->{cache}->read('statefile' => 'datacore_api_monitors' . md5_hex($self->{option_results}->{hostname} . $self->{option_results}->{username}))
and $self->{cache}->get(name => 'expires_on') > time() + 1) {
return $self->{cache}->get(name => 'monitor_data');
}
my $monitor_data = $options{custom}->request_api(
url_path => '/RestService/rest.svc/1.0/monitors');
my $datas = { last_timestamp => time(), monitor_data => $monitor_data, expires_on => time() + 60 };
$self->{cache}->write(data => $datas);
my $monitored_count = 0;
for my $object (@$monitor_data) {
if (!centreon::plugins::misc::is_empty($self->{option_results}->{filter_caption})
and $object->{ExtendedCaption} !~ $self->{option_results}->{filter_caption}) {
next;
}
$self->{global}->{$monitored_count} = {
state => $monitor_state{$object->{State}},
messagetext => $object->{MessageText},
extendedcaption => $object->{ExtendedCaption}
};
$monitored_count++;
}
# for now if no data is given to the counter, output is OK: with status ok, instead of unknown.
# We manage this case in each plugin for now.
if ($monitored_count == 0) {
$self->{output}->add_option_msg(short_msg => 'No monitors where checked, please check filter_caption parameter and api response.');
$self->{output}->option_exit();
}
}
# as --filter-caption allow to filter element to check and this api don't allow parameter filtering, we should cache
# the output in case a client make multiples check a minute.
1;
__END__
=head1 MODE
Check Datacore monitor status exposed through the rest api.
=over 8
=item B<--filter-caption>
Define which element should be monitored based on the extended caption. This option will be treated as a regular expression.
By default all elements will be checked.
=item B<--warning-state> B<--critical-state>
define which output from the api should be considered warning or critical.
warning_default = '%{state} =~ /Warning/i',
critical_default = '%{state} =~ /Critical/i',
possible value for state : Undefined, Healthy, Attention, Warning, Critical.
=back

View File

@ -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 storage::datacore::restapi::mode::poolspaceusage;
use strict;
use warnings;
use base qw(centreon::plugins::templates::counter);
use JSON::XS;
sub set_counters {
my ($self, %options) = @_;
$self->{maps_counters_type} = [
# BytesAllocatedPercentage is the disk usage of the pool
# in datacore you can make thin provisionning, where you give to each partition more than what you really have.
# oversubscribed is the number of Bytes allocated minus the number of bytes present in the system.
{ name => 'BytesAllocatedPercentage', type => 0 },
{ name => 'oversubscribed', type => 0 },
];
$self->{maps_counters}->{BytesAllocatedPercentage} = [
{
label => 'bytesallocatedpercentage',
nlabel => 'datacore.pool.bytesallocated.percentage',
set => {
key_values => [ { name => 'bytesallocatedpercentage' } ],
output_template => 'Bytes Allocated : %s %%',
perfdatas => [
{ template => '%d', unit => '%', min => 0, max => 100 }
]
}
} ];
$self->{maps_counters}->{oversubscribed} = [ {
label => 'oversubscribed',
nlabel => 'datacore.pool.oversubscribed.bytes',
set => {
key_values => [ { name => 'oversubscribed' } ],
output_template => 'Over subscribed bytes : %s',
perfdatas => [
{ template => '%d', unit => 'bytes', min => 0 }
]
}
} ];
}
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 => {
'pool-id:s' => { name => 'pool_id' } });
return $self;
}
sub check_options {
my ($self, %options) = @_;
$self->SUPER::check_options(%options);
if (centreon::plugins::misc::is_empty($self->{option_results}->{pool_id})) {
$self->{output}->add_option_msg(short_msg => 'Please set pool-id option');
$self->{output}->option_exit();
}
}
sub manage_selection {
my ($self, %options) = @_;
my $data = $options{custom}->request_api(
url_path => '/RestService/rest.svc/1.0/performances/' . $self->{option_results}->{pool_id},
);
if (defined($data->[1])) {
$self->{output}->add_option_msg(short_msg => 'multiples pools found in api response, only one is expected. Please check pool_id and datacore versions.');
$self->{output}->option_exit();
}
$self->{BytesAllocatedPercentage}->{bytesallocatedpercentage} = $data->[0]->{"BytesAllocatedPercentage"};
$self->{oversubscribed}->{oversubscribed} = $data->[0]->{"BytesOverSubscribed"};
}
1;
__END__
=head1 MODE
Check Datacore pool space and over subscribed usage exposed through the rest api.
=over 8
=item B<--pool-id>
Id of the pool to check. See list-pool autodiscovery mode to list pools id (required).
=item B<--warning-oversubscribed> B<--critical-oversubscribed>
Warning and critical threshold on the number of Bytes suscribed over the real space of the pool.
=item B<--warning-bytesallocatedpercentage> B<--critical-bytesallocatedpercentage>
Warning and critical threshold on the percentage of bytes allocated in the pool.
=back

View File

@ -0,0 +1,27 @@
package storage::datacore::restapi::plugin;
use strict;
use warnings;
use base qw(centreon::plugins::script_custom);
sub new {
my ($class, %options) = @_;
my $self = $class->SUPER::new(package => __PACKAGE__, %options);
bless $self, $class;
# A version, we don't really use it but could help if your want to version your code
$self->{version} = '0.1';
$self->{modes} = {
'pool-usage' => 'storage::datacore::restapi::mode::poolspaceusage',
'alerts' => 'storage::datacore::restapi::mode::alerts',
'list-pool' => 'storage::datacore::restapi::mode::listpool',
'status-monitor' => 'storage::datacore::restapi::mode::monitorstatus',
};
$self->{custom_modes}->{api} = 'storage::datacore::restapi::custom::api';
return $self;
}
1;
=head1 PLUGIN DESCRIPTION
Check Datacore using rest API.

View File

@ -153,6 +153,7 @@ AWS CloudTrail check trail status
FOR ${checktrailstatus_value} IN @{checktrailstatus_values}
${output} Run
... ${CMD} --mode=checktrailstatus --endpoint=http://localhost:3000/cloudtrail/gettrailstatus/${checktrailstatus_value.trailstatus} --trail-name=${checktrailstatus_value.trailname}
${output} Strip String ${output}
Should Be Equal As Strings
... ${output}
... ${checktrailstatus_value.result}
@ -188,6 +189,7 @@ AWS CloudTrail count events
${command} Catenate ${command} --critical-count=${countevents_value.criticalcount}
END
${output} Run ${command}
${output} Strip String ${output}
Should Be Equal As Strings
... ${output}
... ${countevents_value.result}
@ -204,13 +206,7 @@ Start Mockoon
... ${MOCKOON_JSON}
... --port
... 3000
... --pname
... aws-cloudtrail
Wait For Process ${process}
Sleep 5s
Stop Mockoon
${process} Start Process
... mockoon-cli
... stop
... mockoon-aws-cloudtrail
Wait For Process ${process}
Terminate All Processes

View File

@ -14,29 +14,29 @@ Test Timeout 120s
${CENTREON_PLUGINS} ${CURDIR}${/}..${/}..${/}..${/}src${/}centreon_plugins.pl
${MOCKOON_JSON} ${CURDIR}${/}..${/}..${/}resources${/}mockoon${/}cloud-azure-policyinsights-policystates.json
${LOGIN_ENDPOINT} http://localhost:3000/login
${LOGIN_ENDPOINT} http://localhost:3001/login
${CMD} perl ${CENTREON_PLUGINS} --plugin=cloud::azure::policyinsights::policystates::plugin --subscription=subscription --tenant=tenant --client-id=client_id --client-secret=secret --login-endpoint=${LOGIN_ENDPOINT}
&{compliance_value1}
... endpoint=http://localhost:3000/ok
... endpoint=http://localhost:3001/ok
... policyname=
... resourcelocation=
... resourcetype=
... result=OK: Number of non compliant policies: 0 - All compliances states are ok | 'policies.non_compliant.count'=0;;;0;
&{compliance_value2}
... endpoint=http://localhost:3000/oknextlink
... endpoint=http://localhost:3001/oknextlink
... policyname=9daedab3-fb2d-461e-b861-71790eead4f6
... resourcelocation=
... resourcetype=
... result=OK: Number of non compliant policies: 0 - All compliances states are ok | 'policies.non_compliant.count'=0;;;0;
&{compliance_value3}
... endpoint=http://localhost:3000/nok1
... endpoint=http://localhost:3001/nok1
... policyname=9daedab3-fb2d-461e-b861-71790eead4f6
... resourcelocation=fr
... resourcetype=
... result=CRITICAL: Compliance state for policy '9daedab3-fb2d-461e-b861-71790eead4f6' on resource 'mypubip1' is 'NonCompliant' | 'policies.non_compliant.count'=1;;;0;
&{compliance_value4}
... endpoint=http://localhost:3000/nok2
... endpoint=http://localhost:3001/nok2
... policyname=9daedab3-fb2d-461e-b861-71790eead4f6
... resourcelocation=fr
... resourcetype=ip
@ -66,6 +66,7 @@ Azure PolicyInsights PolicyStates compliance
${command} Catenate ${command} --resource-type=${compliance_value.resourcetype}
END
${output} Run ${command}
${output} Strip String ${output}
Should Be Equal As Strings
... ${output}
... ${compliance_value.result}
@ -82,13 +83,7 @@ Start Mockoon
... ${MOCKOON_JSON}
... --port
... 3000
... --pname
... azure-policyinsights
Wait For Process ${process}
Sleep 5s
Stop Mockoon
${process} Start Process
... mockoon-cli
... stop
... mockoon-azure-policyinsights
Wait For Process ${process}
Terminate All Processes

View File

@ -0,0 +1,77 @@
*** Settings ***
Documentation datacore rest api plugin
Library Examples
Library OperatingSystem
Library Process
Library String
Suite Setup Start Mockoon
Suite Teardown Stop Mockoon
Test Timeout 120s
*** Variables ***
${CENTREON_PLUGINS} ${CURDIR}${/}..${/}..${/}..${/}src${/}centreon_plugins.pl
${MOCKOON_JSON} ${CURDIR}${/}..${/}..${/}resources${/}mockoon${/}storage-datacore-restapi.json
${CMD} perl ${CENTREON_PLUGINS} --plugin=storage::datacore::restapi::plugin --password=pass --username=user --port=3000 --hostname=127.0.0.1 --proto=http
*** Test Cases ***
Datacore check pool usage
[Documentation] Check Datacore pool usage
[Tags] storage api
${output} Run
... ${CMD} --mode=pool-usage --critical-oversubscribed=${critical-oversubscribed} --warning-oversubscribed=${warning-oversubscribed} --warning-bytesallocatedpercentage=${warning-bytesallocatedpercentage} --critical-bytesallocatedpercentage=${critical-bytesallocatedpercentage} --pool-id=B5C140F5-6B13-4CAD-AF9D-F7C4172B3A1D:{4dec1b5a-2577-11e5-80c3-00155d651622}
${output} Strip String ${output}
Should Be Equal As Strings
... ${output}
... ${result}
... Wrong output result for pool usage :\n\n ${output} \n\n ${result}\n\n
Examples: warning-bytesallocatedpercentage critical-bytesallocatedpercentage warning-oversubscribed critical-oversubscribed result --
... 2 5 -1 3 CRITICAL: Bytes Allocated : 12 % WARNING: Over subscribed bytes : 0 | 'datacore.pool.bytesallocated.percentage'=12%;0:2;0:5;0;100 'datacore.pool.oversubscribed.bytes'=0bytes;0:-1;0:3;0;
... 70 80 10 20 OK: Bytes Allocated : 12 % - Over subscribed bytes : 0 | 'datacore.pool.bytesallocated.percentage'=12%;0:70;0:80;0;100 'datacore.pool.oversubscribed.bytes'=0bytes;0:10;0:20;0;
Datacore check alert count
[Documentation] Check Datacore pool usage
[Tags] storage api
${output} Run
... ${CMD} --mode=alerts --warning-error=${warning-error} --critical-error=${critical-error} --warning-warning=${warning-warning} --critical-warning=${critical-warning}
${output} Strip String ${output}
Should Be Equal As Strings
... ${output}
... ${result}
... Wrong output result for alert count :\n\n ${output} \n\n ${result}\n\n
Examples: warning-error critical-error warning-warning critical-warning result --
... 0 1 5 5 WARNING: number of error alerts : 1 | 'datacore.event.error.count'=1;0:0;0:1;0; 'datacore.alerts.warning.count'=1;0:5;0:5;0; 'datacore.alerts.info.count'=0;;;0; 'datacore.alerts.trace.count'=0;;;0;
... 5 5 5 5 OK: number of error alerts : 1, number of warning alerts : 1, number of info alerts : 0, number of trace alerts : 0 | 'datacore.event.error.count'=1;0:5;0:5;0; 'datacore.alerts.warning.count'=1;0:5;0:5;0; 'datacore.alerts.info.count'=0;;;0; 'datacore.alerts.trace.count'=0;;;0;
Datacore check status monitor
[Documentation] Check Datacore pool usage
[Tags] storage api
${output} Run
... ${CMD} --mode=status-monitor
${output} Strip String ${output}
Should Be Equal As Strings
... ${output}
... ${result}
... Wrong output result for status monitor :\n${output} \nresult:\n${result}\n\n
Examples: result --
... CRITICAL: 'State of HostVM2' status : 'Critical', message is 'Connected'
*** Keywords ***
Start Mockoon
${process} Start Process
... mockoon-cli
... start
... --data
... ${MOCKOON_JSON}
... --port
... 3000
Sleep 5s
Stop Mockoon
Terminate All Processes

View File

@ -0,0 +1,53 @@
*** Settings ***
Documentation Hardware Sensors APC SNMP plugin
Library OperatingSystem
Library String
Library Examples
Test Timeout 120s
*** Variables ***
${CENTREON_PLUGINS} ${CURDIR}${/}..${/}..${/}..${/}src${/}centreon_plugins.pl
${CMD} perl ${CENTREON_PLUGINS} --plugin=hardware::sensors::apc::snmp::plugin --mode=sensors --hostname=127.0.0.1 --snmp-version=2c --snmp-port=2024
*** Test Cases ***
APC Sensors ${tc}/9
[Tags] hardware Sensors snmp
${command} Catenate
... ${CMD}
... --snmp-community=hardware/sensors/apc/sensors
# Append options to command
${command} Append Option To Command ${command} --warning ${warning}
${command} Append Option To Command ${command} --critical ${critical}
${command} Append Option To Command ${command} --component ${component}
${output} Run ${command}
${output} Strip String ${output}
Should Be Equal As Strings
... ${output}
... ${expected_result}
... Wrong output result for compliance of ${expected_result}{\n}Command output:{\n}${output}{\n}{\n}{\n}
#--component 'temperature' --warning='humidity,.,45:65' --critical='humidity,.,35:70'
Examples: tc component warning critical expected_result --
... 1 _empty_ _empty_ _empty_ OK: All 2 components are ok [2/2 temperatures]. | 'Main Module:Sonde de temperature#hardware.sensor.temperature.celsius'=23C;;;; 'Main Module:Sonde de temperature#hardware.sensor.humidity.percentage'=35%;;;0;100 'hardware.temperature.count'=2;;;;
... 2 _empty_ humidity,.,45:65 _empty_ WARNING: Humidity 'Main Module:Sonde de temperature' is 35 % | 'Main Module:Sonde de temperature#hardware.sensor.temperature.celsius'=23C;;;; 'Main Module:Sonde de temperature#hardware.sensor.humidity.percentage'=35%;45:65;;0;100 'hardware.temperature.count'=2;;;;
... 3 _empty_ humidity,.,45:65 humidity,.,35:70 WARNING: Humidity 'Main Module:Sonde de temperature' is 35 % | 'Main Module:Sonde de temperature#hardware.sensor.temperature.celsius'=23C;;;; 'Main Module:Sonde de temperature#hardware.sensor.humidity.percentage'=35%;45:65;35:70;0;100 'hardware.temperature.count'=2;;;;
... 4 _empty_ _empty_ _empty_ OK: All 2 components are ok [2/2 temperatures]. | 'Main Module:Sonde de temperature#hardware.sensor.temperature.celsius'=23C;;;; 'Main Module:Sonde de temperature#hardware.sensor.humidity.percentage'=35%;;;0;100 'hardware.temperature.count'=2;;;;
... 5 _empty_ humidity,.,45:65 _empty_ WARNING: Humidity 'Main Module:Sonde de temperature' is 35 % | 'Main Module:Sonde de temperature#hardware.sensor.temperature.celsius'=23C;;;; 'Main Module:Sonde de temperature#hardware.sensor.humidity.percentage'=35%;45:65;;0;100 'hardware.temperature.count'=2;;;;
... 6 _empty_ humidity,.,45:65 humidity,.,35:70 WARNING: Humidity 'Main Module:Sonde de temperature' is 35 % | 'Main Module:Sonde de temperature#hardware.sensor.temperature.celsius'=23C;;;; 'Main Module:Sonde de temperature#hardware.sensor.humidity.percentage'=35%;45:65;35:70;0;100 'hardware.temperature.count'=2;;;;
... 7 .* _empty_ _empty_ OK: All 2 components are ok [2/2 temperatures]. | 'Main Module:Sonde de temperature#hardware.sensor.temperature.celsius'=23C;;;; 'Main Module:Sonde de temperature#hardware.sensor.humidity.percentage'=35%;;;0;100 'hardware.temperature.count'=2;;;;
... 8 _empty_ temperature,.,22:25 temperature,.,22:25 OK: All 2 components are ok [2/2 temperatures]. | 'Main Module:Sonde de temperature#hardware.sensor.temperature.celsius'=23C;22:25;22:25;; 'Main Module:Sonde de temperature#hardware.sensor.humidity.percentage'=35%;;;0;100 'hardware.temperature.count'=2;;;;
... 9 _empty_ _empty_ _empty_ OK: All 2 components are ok [2/2 temperatures]. | 'Main Module:Sonde de temperature#hardware.sensor.temperature.celsius'=23C;;;; 'Main Module:Sonde de temperature#hardware.sensor.humidity.percentage'=35%;;;0;100 'hardware.temperature.count'=2;;;;
*** Keywords ***
Append Option To Command
[Documentation] Concatenates the first argument (option) with the second (value) after having replaced the value with "" if its content is '_empty_'
[Arguments] ${cmd} ${option} ${value}
${value} Set Variable If '${value}' == '_empty_' '' ${value}
[return] ${cmd} ${option}=${value}

View File

@ -0,0 +1,52 @@
*** Settings ***
Documentation Hardware UPS Socomec Netvision SNMP plugin
Library OperatingSystem
Library String
Library Examples
Test Timeout 120s
*** Variables ***
${CENTREON_PLUGINS} ${CURDIR}${/}..${/}..${/}..${/}src${/}centreon_plugins.pl
${CMD} perl ${CENTREON_PLUGINS} --plugin=hardware::ups::socomec::netvision::snmp::plugin
*** Test Cases ***
Battery ${tc}/4
[Tags] hardware UPS snmp
${command} Catenate
... ${CMD}
... --mode=battery
... --hostname=127.0.0.1
... --snmp-version=2c
... --snmp-port=2024
... --snmp-community=hardware/ups/socomec/netvision/snmp/mode/battery
# Append options to command
${opt} Append Option --warning-temperature ${w_temperature}
${command} Catenate ${command} ${opt}
${opt} Append Option --critical-temperature ${c_temperature}
${command} Catenate ${command} ${opt}
${output} Run ${command}
${output} Strip String ${output}
Should Be Equal As Strings
... ${output}
... ${expected_result}
... Wrong output result for compliance of ${expected_result}{\n}Command output:{\n}${output}{\n}{\n}{\n}
Examples: tc w_temperature c_temperature expected_result --
... 1 30 50 OK: battery status is normal - charge remaining: 100% (0 minutes remaining) | 'battery.charge.remaining.percent'=100%;;;0;100 'battery.charge.remaining.minutes'=0;;;0; 'battery.voltage.volt'=339.1V;;;; 'battery.temperature.celsius'=22C;0:30;0:50;;
... 2 20 50 WARNING: temperature: 22 C | 'battery.charge.remaining.percent'=100%;;;0;100 'battery.charge.remaining.minutes'=0;;;0; 'battery.voltage.volt'=339.1V;;;; 'battery.temperature.celsius'=22C;0:20;0:50;;
... 3 10 20 CRITICAL: temperature: 22 C | 'battery.charge.remaining.percent'=100%;;;0;100 'battery.charge.remaining.minutes'=0;;;0; 'battery.voltage.volt'=339.1V;;;; 'battery.temperature.celsius'=22C;0:10;0:20;;
... 4 _empty_ _empty_ OK: battery status is normal - charge remaining: 100% (0 minutes remaining) | 'battery.charge.remaining.percent'=100%;;;0;100 'battery.charge.remaining.minutes'=0;;;0; 'battery.voltage.volt'=339.1V;;;; 'battery.temperature.celsius'=22C;;;;
*** Keywords ***
Append Option
[Documentation] Concatenates the first argument (option) with the second (value) after having replaced the value with "" if its content is '_empty_'
[Arguments] ${option} ${value}
${value} Set Variable If '${value}' == '_empty_' '' ${value}
[return] ${option}=${value}

View File

@ -0,0 +1,46 @@
*** Settings ***
Documentation Hardware UPS Sputnik SNMP plugin
Library OperatingSystem
Library String
Library Examples
Test Timeout 120s
*** Variables ***
${CENTREON_PLUGINS} ${CURDIR}${/}..${/}..${/}..${/}src${/}centreon_plugins.pl
${CMD} perl ${CENTREON_PLUGINS} --plugin=apps::protocols::snmp::plugin
*** Test Cases ***
SNMP Collection - Sputnik Environment ${tc}/3
[Tags] SNMP Collection
${command} Catenate
... ${CMD}
... --mode=collection
... --hostname=127.0.0.1
... --snmp-version=2c
... --snmp-port=2024
... --snmp-community=hardware-ups/hardware-ups-sputnik
... --config=${CURDIR}${/}..${/}..${/}..${/}src/contrib/collection/snmp/sputnik-environment.json
${output} Run ${command}
${output} Strip String ${output}
Should Be Equal As Strings
... ${output}
... ${expected_result}
... Wrong output result for compliance of ${expected_result}{\n}Command output:{\n}${output}{\n}{\n}{\n}
Examples: tc expected_result --
... 1 OK: Sensor '1' temperature is '20.06'°C and humidity is '33'% | '1#environment.temperature.celsius'=20.06C;;;; '1#environment.humidity.percent'=33%;;;0;100
... 2 OK: Sensor '1' temperature is '20.06'°C and humidity is '33'% | '1#environment.temperature.celsius'=20.06C;;;; '1#environment.humidity.percent'=33%;;;0;100
... 3 OK: Sensor '1' temperature is '20.06'°C and humidity is '33'% | '1#environment.temperature.celsius'=20.06C;;;; '1#environment.humidity.percent'=33%;;;0;100
*** Keywords ***
Append Option
[Documentation] Concatenates the first argument (option) with the second (value) after having replaced the value with "" if its content is '_empty_'
[Arguments] ${option} ${value}
${value} Set Variable If '${value}' == '_empty_' '' ${value}
[return] ${option}=${value}

View File

@ -0,0 +1,174 @@
{
"uuid": "317849df-2152-4b89-88f7-f22ea37aab32",
"lastMigration": 27,
"name": "Storage datacore api",
"endpointPrefix": "",
"latency": 0,
"port": 3000,
"hostname": "",
"folders": [],
"routes": [
{
"uuid": "9d203639-fb39-402b-9759-91c156e247c6",
"type": "http",
"documentation": "",
"method": "get",
"endpoint": "RestService/rest.svc/1.0/pools",
"responses": [
{
"uuid": "f8d1590b-878f-4884-9214-dea80580eb75",
"body": "[{\r\n \"Caption\" : \"Disk pool 1\",\r\n \"ExtendedCaption\" : \"Disk pool 1 on StorageSvr001\",\r\n \"Id\" : \"A3E78CFA-DBEC-44E1-A23C-E9E262EC4551:{d68b8a36-0ec4-11e5-80ba-00155d651622}\",\r\n \"Internal\" : false,\r\n \"SequenceNumber\" : 11963,\r\n \"Alias\" : \"Disk pool 1\",\r\n \"AutoTieringEnabled\" : true,\r\n \"ChunkSize\" : {\r\n \"Value\" : 134217728\r\n },\r\n \"Description\" : null,\r\n \"InSharedMode\" : false,\r\n \"IsAuthorized\" : true,\r\n \"MaxTierNumber\" : 3,\r\n \"PoolMode\" : 1,\r\n \"PoolStatus\" : 0,\r\n \"PresenceStatus\" : 1,\r\n \"SMPAApproved\" : false,\r\n \"ServerId\" : \"A3E78CFA-DBEC-44E1-A23C-E9E262EC4551\",\r\n \"SharedPoolId\" : null,\r\n \"TierReservedPct\" : 0,\r\n \"Type\" : 0,\r\n \"IsBulk\" : false\r\n},\r\n{\r\n \"Caption\" : \"Shared pool 1\",\r\n \"ExtendedCaption\" : \"Shared pool 1 on StorageSvr002\",\r\n \"Id\" : \"B5C140F5-6B13-4CAD-AF9D-F7C4172B3A1D:{4dec1b5a-2577-11e5-80c3-00155d651622}\",\r\n \"Internal\" : false,\r\n \"SequenceNumber\" : 11967,\r\n \"Alias\" : \"Shared pool 1\",\r\n \"AutoTieringEnabled\" : true,\r\n \"ChunkSize\" : {\r\n \"Value\" : 134217728\r\n },\r\n \"Description\" : null,\r\n \"InSharedMode\" : true,\r\n \"IsAuthorized\" : true,\r\n \"MaxTierNumber\" : 3,\r\n \"PoolMode\" : 1,\r\n \"PoolStatus\" : 0,\r\n \"PresenceStatus\" : 1,\r\n \"SMPAApproved\" : true,\r\n \"ServerId\" : \"B5C140F5-6B13-4CAD-AF9D-F7C4172B3A1D\",\r\n \"SharedPoolId\" : \"{4dec1b5a-2577-11e5-80c3-00155d651622}\",\r\n \"TierReservedPct\" : 0,\r\n \"Type\" : 0,\r\n \"IsBulk\" : false\r\n} ]",
"latency": 0,
"statusCode": 200,
"label": "",
"headers": [],
"bodyType": "INLINE",
"filePath": "",
"databucketID": "",
"sendFileAsBody": false,
"rules": [],
"rulesOperator": "OR",
"disableTemplating": false,
"fallbackTo404": false,
"default": true
}
],
"enabled": true,
"responseMode": null
},
{
"uuid": "8837f5cd-5ca3-4779-ba8e-6b46692c487b",
"type": "http",
"documentation": "",
"method": "get",
"endpoint": "RestService/rest.svc/1.0/performances/B5C140F5-6B13-4CAD-AF9D-F7C4172B3A1D:%7B4dec1b5a-2577-11e5-80c3-00155d651622%7D",
"responses": [
{
"uuid": "a5bf53e2-5edf-437e-a684-68315cfa7824",
"body": "[\n {\n \"CollectionTime\": \"/Date(1486402608775)/\",\n \"NullCounterMap\": 0,\n \"BytesAllocated\": 6174015488,\n \"BytesAllocatedPercentage\": 12,\n \"BytesAvailable\": 47110422528,\n \"BytesAvailablePercentage\": 88,\n \"BytesInReclamation\": 0,\n \"BytesInReclamationPercentage\": 0,\n \"BytesOverSubscribed\": 0,\n \"BytesReserved\": 0,\n \"BytesReservedPercentage\": 0,\n \"BytesTotal\": 53284438016,\n \"EstimatedDepletionTime\": 2592000001,\n \"MaxPoolBytes\": 1108127332171776,\n \"MaxReadTime\" : 0,\n \"MaxReadWriteTime\" : 0,\n \"MaxWriteTime\" : 0,\n \"PercentAllocated\" : 12,\n \"PercentAvailable\" : 88,\n \"TotalBytesMigrated\" : 0,\n \"TotalBytesRead\" : 307200,\n \"TotalBytesTransferred\" : 2036756992,\n \"TotalBytesWritten\" : 2036470272,\n \"TotalOperations\" : 53002,\n \"TotalReadTime\" : 0,\n \"TotalReads\" : 18,\n \"TotalWriteTime\" : 74994,\n \"TotalWrites\" : 52998\n }\n]",
"latency": 0,
"statusCode": 200,
"label": "",
"headers": [],
"bodyType": "INLINE",
"filePath": "",
"databucketID": "",
"sendFileAsBody": false,
"rules": [],
"rulesOperator": "OR",
"disableTemplating": false,
"fallbackTo404": false,
"default": true
}
],
"enabled": true,
"responseMode": null
},
{
"uuid": "ce9e85c8-c72e-47d4-b70a-0fd3c3a6d703",
"type": "http",
"documentation": "",
"method": "get",
"endpoint": "RestService/rest.svc/1.0/alerts",
"responses": [
{
"uuid": "b6425c83-2f13-4ffe-a9f6-c73feb54c2ec",
"body": "[ {\n \"Caller\" : \"ServerMachineGroup.UpdateServers\",\n \"HighPriority\" : true,\n \"Id\" : {\n \"MachineId\" : \"A3E78CFA-DBEC-44E1-A23C-E9E262EC4551\",\n \"SequenceNumber\" : 34937\n },\n \"Level\" : 2,\n \"MachineName\" : \"STORAGESVR001\",\n \"MessageData\" : [ \"StorageSvr002\" ],\n \"MessageText\" : \"Connection to server {0} has been lost.\",\n \"NeedsAcknowledge\" : false,\n \"Sources\" : [ {\n \"SourceCaption\" : \"Group1\",\n \"SourceId\" : \"4b428832-fd51-45df-9c21-ce267e1ceb7a\",\n \"SourceType\" : 12\n } ],\n \"TimeStamp\" : \"/Date(1437398005546)/\",\n \"UserId\" : null,\n \"UserName\" : null,\n \"Visibility\" : 64\n}, {\n \"Caller\" : \"BasePerfMonitor`1.SetState\",\n \"HighPriority\" : true,\n \"Id\" : {\n \"MachineId\" : \"A3E78CFA-DBEC-44E1-A23C-E9E262EC4551\",\n \"SequenceNumber\" : 33985\n },\n \"Level\" : 3,\n \"MachineName\" : \"STORAGESVR001\",\n \"MessageData\" : null,\n \"MessageText\" : \"The Replication buffer free space of StorageSvr001 in Group1 is <= 10%\",\n \"NeedsAcknowledge\" : false,\n \"Sources\" : [ {\n \"SourceCaption\" : \"Replication buffer free space of StorageSvr001 in Group1\",\n \"SourceId\" : \"FallingThresholdPerfMonitor`1<A3E78CFA-DBEC-44E1-A23C-E9E262EC4551>ReplicationBufferPercentFreeSpace\",\n \"SourceType\" : 3\n }, {\n \"SourceCaption\" : \"StorageSvr001 in Group1\",\n \"SourceId\" : \"A3E78CFA-DBEC-44E1-A23C-E9E262EC4551\",\n \"SourceType\" : 12\n }, {\n \"SourceCaption\" : \"Group1\",\n \"SourceId\" : \"4b428832-fd51-45df-9c21-ce267e1ceb7a\",\n \"SourceType\" : 12\n } ],\n \"TimeStamp\" : \"/Date(1437397587894)/\",\n \"UserId\" : null,\n \"UserName\" : null,\n \"Visibility\" : 64\n}]",
"latency": 0,
"statusCode": 200,
"label": "",
"headers": [],
"bodyType": "INLINE",
"filePath": "",
"databucketID": "",
"sendFileAsBody": false,
"rules": [],
"rulesOperator": "OR",
"disableTemplating": false,
"fallbackTo404": false,
"default": true
}
],
"enabled": true,
"responseMode": null
},
{
"uuid": "a916f10f-b2f2-498a-9b87-3aeffd80c8dc",
"type": "http",
"documentation": "",
"method": "get",
"endpoint": "RestService/rest.svc/1.0/monitors",
"responses": [
{
"uuid": "d2713bdd-33e9-415a-bffe-16e279b1b753",
"body": "[\n {\n \"Caption\": \"State\",\n \"ExtendedCaption\": \"State of HostVM2\",\n \"Id\": \"ClientMachineStateMonitor<ed89ef91d72142dc958e02c5b7014fac>\",\n \"Internal\": false,\n \"SequenceNumber\": 9417,\n \"Description\": \"Monitors the state of hosts.\",\n \"MessageText\": \"Connected\",\n \"MonitoredObjectId\": \"ed89ef91d72142dc958e02c5b7014fac\",\n \"State\": 16,\n \"TemplateId\": \"T(DataCore.Executive.Controller.ClientMachineStateMonitor<DataCore.Executive.Controller.ClientMachine>)\",\n \"TimeStamp\": \"/Date(1486136115475-0500)/\"\n },\n {\n \"Caption\": \"I/O latency\",\n \"ExtendedCaption\": \"I/O latency of Mirror of Virtual disk 1 on StorageSvr005\",\n \"Id\": \"RisingThresholdPerfMonitor`1<V.{2f652562-e7e3-11e6-80d7-00155d651611}-00000001_N.22690030D9218568>TotalOperationsTime\",\n \"Internal\": false,\n \"SequenceNumber\": 10036,\n \"Description\": \"Monitors the physical disks latency.\",\n \"MessageText\": \"Disabled\",\n \"MonitoredObjectId\": \"V.{2f652562-e7e3-11e6-80d7-00155d651611}-00000001_N.22690030D9218568\",\n \"State\": 1,\n \"TemplateId\": \"T(DataCore.Executive.Controller.RisingThresholdPerfMonitor`1[T]<V.{2f652562-e7e3-11e6-80d7-00155d651611}-00000001_N.22690030D9218568>TotalOperationsTime)\",\n \"TimeStamp\": \"/Date(1486148705910-0500)/\"\n }\n]",
"latency": 0,
"statusCode": 200,
"label": "",
"headers": [],
"bodyType": "INLINE",
"filePath": "",
"databucketID": "",
"sendFileAsBody": false,
"rules": [],
"rulesOperator": "OR",
"disableTemplating": false,
"fallbackTo404": false,
"default": true
}
],
"enabled": true,
"responseMode": null
}
],
"rootChildren": [
{
"type": "route",
"uuid": "9d203639-fb39-402b-9759-91c156e247c6"
},
{
"type": "route",
"uuid": "8837f5cd-5ca3-4779-ba8e-6b46692c487b"
},
{
"type": "route",
"uuid": "ce9e85c8-c72e-47d4-b70a-0fd3c3a6d703"
},
{
"type": "route",
"uuid": "a916f10f-b2f2-498a-9b87-3aeffd80c8dc"
}
],
"proxyMode": false,
"proxyHost": "",
"proxyRemovePrefix": false,
"tlsOptions": {
"enabled": false,
"type": "CERT",
"pfxPath": "",
"certPath": "",
"keyPath": "",
"caPath": "",
"passphrase": ""
},
"cors": true,
"headers": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"proxyReqHeaders": [
{
"key": "",
"value": ""
}
],
"proxyResHeaders": [
{
"key": "",
"value": ""
}
],
"data": []
}

View File

@ -0,0 +1,179 @@
{
"uuid": "8cba072c-7794-4ff7-ab36-158ef1abed39",
"lastMigration": 32,
"name": "Storage datacore api",
"endpointPrefix": "",
"latency": 0,
"port": 3001,
"hostname": "",
"folders": [],
"routes": [
{
"uuid": "148371c5-aaa7-4bf0-a818-e81a21aa7f9a",
"type": "http",
"documentation": "",
"method": "get",
"endpoint": "RestService/rest.svc/1.0/pools",
"responses": [
{
"uuid": "003eae6e-f58f-44db-bd03-3b44ca578046",
"body": "[ {\n \"Caption\" : \"Disk pool 1\",\n \"ExtendedCaption\" : \"Disk pool 1 on StorageSvr001\",\n \"Id\" : \"A3E78CFA-DBEC-44E1-A23C-E9E262EC4551:{d68b8a36-0ec4-11e5-80ba-00155d651622}\",\n \"Internal\" : false,\n \"SequenceNumber\" : 11963,\n \"Alias\" : \"Disk pool 1\",\n \"AutoTieringEnabled\" : true,\n \"ChunkSize\" : {\n \"Value\" : 134217728\n },\n \"Description\" : null,\n \"InSharedMode\" : false,\n \"IsAuthorized\" : true,\n \"MaxTierNumber\" : 3,\n \"PoolMode\" : 1,\n \"PoolStatus\" : 0,\n \"PresenceStatus\" : 1,\n \"SMPAApproved\" : false,\n \"ServerId\" : \"A3E78CFA-DBEC-44E1-A23C-E9E262EC4551\",\n \"SharedPoolId\" : null,\n \"TierReservedPct\" : 0,\n \"Type\" : 0,\n \"IsBulk\" : false\n},\n{\n \"Caption\" : \"Shared pool 1\",\n \"ExtendedCaption\" : \"Shared pool 1 on StorageSvr002\",\n \"Id\" : \"B5C140F5-6B13-4CAD-AF9D-F7C4172B3A1D:{4dec1b5a-2577-11e5-80c3-00155d651622}\",\n \"Internal\" : false,\n \"SequenceNumber\" : 11967,\n \"Alias\" : \"Shared pool 1\",\n \"AutoTieringEnabled\" : true,\n \"ChunkSize\" : {\n \"Value\" : 134217728\n },\n \"Description\" : null,\n \"InSharedMode\" : true,\n \"IsAuthorized\" : true,\n \"MaxTierNumber\" : 3,\n \"PoolMode\" : 1,\n \"PoolStatus\" : 0,\n \"PresenceStatus\" : 1,\n \"SMPAApproved\" : true,\n \"ServerId\" : \"B5C140F5-6B13-4CAD-AF9D-F7C4172B3A1D\",\n \"SharedPoolId\" : \"{4dec1b5a-2577-11e5-80c3-00155d651622}\",\n \"TierReservedPct\" : 0,\n \"Type\" : 0,\n \"IsBulk\" : false\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": "0c038179-3723-4d67-9bed-fc226629c847",
"type": "http",
"documentation": "",
"method": "get",
"endpoint": "RestService/rest.svc/1.0/performances/B5C140F5-6B13-4CAD-AF9D-F7C4172B3A1D:%7B4dec1b5a-2577-11e5-80c3-00155d651622%7D",
"responses": [
{
"uuid": "0eb0a2ca-2f12-40af-ba94-0feef989b6a1",
"body": "[\n {\n \"CollectionTime\": \"/Date(1486402608775)/\",\n \"NullCounterMap\": 0,\n \"BytesAllocated\": 6174015488,\n \"BytesAllocatedPercentage\": 12,\n \"BytesAvailable\": 47110422528,\n \"BytesAvailablePercentage\": 88,\n \"BytesInReclamation\": 0,\n \"BytesInReclamationPercentage\": 0,\n \"BytesOverSubscribed\": 0,\n \"BytesReserved\": 0,\n \"BytesReservedPercentage\": 0,\n \"BytesTotal\": 53284438016,\n \"EstimatedDepletionTime\": 2592000001,\n \"MaxPoolBytes\": 1108127332171776,\n \"MaxReadTime\" : 0,\n \"MaxReadWriteTime\" : 0,\n \"MaxWriteTime\" : 0,\n \"PercentAllocated\" : 12,\n \"PercentAvailable\" : 88,\n \"TotalBytesMigrated\" : 0,\n \"TotalBytesRead\" : 307200,\n \"TotalBytesTransferred\" : 2036756992,\n \"TotalBytesWritten\" : 2036470272,\n \"TotalOperations\" : 53002,\n \"TotalReadTime\" : 0,\n \"TotalReads\" : 18,\n \"TotalWriteTime\" : 74994,\n \"TotalWrites\" : 52998\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": "b9f7dd2b-e1e1-4902-95ba-c6b76a1de390",
"type": "http",
"documentation": "",
"method": "get",
"endpoint": "RestService/rest.svc/1.0/alerts",
"responses": [
{
"uuid": "a1dece29-074b-4100-a764-f7ddccdec8da",
"body": "[ {\n \"Caller\" : \"ServerMachineGroup.UpdateServers\",\n \"HighPriority\" : true,\n \"Id\" : {\n \"MachineId\" : \"A3E78CFA-DBEC-44E1-A23C-E9E262EC4551\",\n \"SequenceNumber\" : 34937\n },\n \"Level\" : 2,\n \"MachineName\" : \"STORAGESVR001\",\n \"MessageData\" : [ \"StorageSvr002\" ],\n \"MessageText\" : \"Connection to server {0} has been lost.\",\n \"NeedsAcknowledge\" : false,\n \"Sources\" : [ {\n \"SourceCaption\" : \"Group1\",\n \"SourceId\" : \"4b428832-fd51-45df-9c21-ce267e1ceb7a\",\n \"SourceType\" : 12\n } ],\n \"TimeStamp\" : \"/Date(1437398005546)/\",\n \"UserId\" : null,\n \"UserName\" : null,\n \"Visibility\" : 64\n}, {\n \"Caller\" : \"BasePerfMonitor`1.SetState\",\n \"HighPriority\" : true,\n \"Id\" : {\n \"MachineId\" : \"A3E78CFA-DBEC-44E1-A23C-E9E262EC4551\",\n \"SequenceNumber\" : 33985\n },\n \"Level\" : 3,\n \"MachineName\" : \"STORAGESVR001\",\n \"MessageData\" : null,\n \"MessageText\" : \"The Replication buffer free space of StorageSvr001 in Group1 is <= 10%\",\n \"NeedsAcknowledge\" : false,\n \"Sources\" : [ {\n \"SourceCaption\" : \"Replication buffer free space of StorageSvr001 in Group1\",\n \"SourceId\" : \"FallingThresholdPerfMonitor`1<A3E78CFA-DBEC-44E1-A23C-E9E262EC4551>ReplicationBufferPercentFreeSpace\",\n \"SourceType\" : 3\n }, {\n \"SourceCaption\" : \"StorageSvr001 in Group1\",\n \"SourceId\" : \"A3E78CFA-DBEC-44E1-A23C-E9E262EC4551\",\n \"SourceType\" : 12\n }, {\n \"SourceCaption\" : \"Group1\",\n \"SourceId\" : \"4b428832-fd51-45df-9c21-ce267e1ceb7a\",\n \"SourceType\" : 12\n } ],\n \"TimeStamp\" : \"/Date(1437397587894)/\",\n \"UserId\" : null,\n \"UserName\" : null,\n \"Visibility\" : 64\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": "be0b350e-f8da-4998-a045-a3cf840745c0",
"type": "http",
"documentation": "",
"method": "get",
"endpoint": "RestService/rest.svc/1.0/monitors",
"responses": [
{
"uuid": "6f53cd5e-7417-4fdf-a310-e2a7af4b7c3a",
"body": "[\r\n {\r\n \"Caption\": \"State\",\r\n \"ExtendedCaption\": \"State of HostVM2\",\r\n \"Id\": \"ClientMachineStateMonitor<ed89ef91d72142dc958e02c5b7014fac>\",\r\n \"Internal\": false,\r\n \"SequenceNumber\": 9417,\r\n \"Description\": \"Monitors the state of hosts.\",\r\n \"MessageText\": \"Connected\",\r\n \"MonitoredObjectId\": \"ed89ef91d72142dc958e02c5b7014fac\",\r\n \"State\": 16,\r\n \"TemplateId\": \"T(DataCore.Executive.Controller.ClientMachineStateMonitor<DataCore.Executive.Controller.ClientMachine>)\",\r\n \"TimeStamp\": \"/Date(1486136115475-0500)/\"\r\n },\r\n {\r\n \"Caption\": \"I/O latency\",\r\n \"ExtendedCaption\": \"I/O latency of Mirror of Virtual disk 1 on StorageSvr005\",\r\n \"Id\": \"RisingThresholdPerfMonitor`1<V.{2f652562-e7e3-11e6-80d7-00155d651611}-00000001_N.22690030D9218568>TotalOperationsTime\",\r\n \"Internal\": false,\r\n \"SequenceNumber\": 10036,\r\n \"Description\": \"Monitors the physical disks latency.\",\r\n \"MessageText\": \"Disabled\",\r\n \"MonitoredObjectId\": \"V.{2f652562-e7e3-11e6-80d7-00155d651611}-00000001_N.22690030D9218568\",\r\n \"State\": 1,\r\n \"TemplateId\": \"T(DataCore.Executive.Controller.RisingThresholdPerfMonitor`1[T]<V.{2f652562-e7e3-11e6-80d7-00155d651611}-00000001_N.22690030D9218568>TotalOperationsTime)\",\r\n \"TimeStamp\": \"/Date(1486148705910-0500)/\"\r\n }\r\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": [
{
"type": "route",
"uuid": "148371c5-aaa7-4bf0-a818-e81a21aa7f9a"
},
{
"type": "route",
"uuid": "0c038179-3723-4d67-9bed-fc226629c847"
},
{
"type": "route",
"uuid": "b9f7dd2b-e1e1-4902-95ba-c6b76a1de390"
},
{
"type": "route",
"uuid": "be0b350e-f8da-4998-a045-a3cf840745c0"
}
],
"proxyMode": false,
"proxyHost": "",
"proxyRemovePrefix": false,
"tlsOptions": {
"enabled": false,
"type": "CERT",
"pfxPath": "",
"certPath": "",
"keyPath": "",
"caPath": "",
"passphrase": ""
},
"cors": true,
"headers": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"proxyReqHeaders": [
{
"key": "",
"value": ""
}
],
"proxyResHeaders": [
{
"key": "",
"value": ""
}
],
"data": [],
"callbacks": []
}

View File

@ -0,0 +1,10 @@
.1.3.6.1.4.1.318.1.1.10.3.12.11.0 = INTEGER: 1
.1.3.6.1.4.1.318.1.1.10.4.1.2.1.2.0 = STRING: Main Module
.1.3.6.1.4.1.318.1.1.10.4.2.3.1.1.0.1 = INTEGER: 0
.1.3.6.1.4.1.318.1.1.10.4.2.3.1.2.0.1 = INTEGER: 1
.1.3.6.1.4.1.318.1.1.10.4.2.3.1.3.0.1 = STRING: Sonde de temperature
.1.3.6.1.4.1.318.1.1.10.4.2.3.1.4.0.1 = STRING: salle serveur 1
.1.3.6.1.4.1.318.1.1.10.4.2.3.1.5.0.1 = INTEGER: 23
.1.3.6.1.4.1.318.1.1.10.4.2.3.1.6.0.1 = INTEGER: 35
.1.3.6.1.4.1.318.1.1.10.4.2.3.1.7.0.1 = INTEGER: 2
.1.3.6.1.4.1.318.1.1.10.4.2.3.1.8.0.1 = INTEGER: 1

View File

@ -0,0 +1,11 @@
.1.3.6.1.4.1.4555.1.1.7.1.2.1.0 = INTEGER: 2
.1.3.6.1.4.1.4555.1.1.7.1.2.3.0 = INTEGER: 0
.1.3.6.1.4.1.4555.1.1.7.1.2.4.0 = INTEGER: 100
.1.3.6.1.4.1.4555.1.1.7.1.2.5.0 = INTEGER: 3391
.1.3.6.1.4.1.4555.1.1.7.1.2.6.0 = INTEGER: 220
.1.3.6.1.4.1.4555.1.1.7.1.2.8.0 = INTEGER: 0
.1.3.6.1.4.1.4555.1.1.1.1.2.1.0 = INTEGER: 2
.1.3.6.1.4.1.4555.1.1.1.1.2.3.0 = INTEGER: 0
.1.3.6.1.4.1.4555.1.1.1.1.2.4.0 = INTEGER: 100
.1.3.6.1.4.1.4555.1.1.1.1.2.5.0 = INTEGER: 3391
.1.3.6.1.4.1.4555.1.1.1.1.2.6.0 = INTEGER: 22