enh(ci): add pipeline for as400 using nfpm (#5167)
This commit is contained in:
parent
a8a0d03a8a
commit
53afb6ee11
|
@ -0,0 +1,29 @@
|
|||
ARG REGISTRY_URL
|
||||
|
||||
FROM ${REGISTRY_URL}/almalinux:8
|
||||
|
||||
RUN bash -e <<EOF
|
||||
|
||||
dnf install -y \
|
||||
git \
|
||||
wget \
|
||||
zstd \
|
||||
https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
|
||||
|
||||
cd /usr/local/src
|
||||
wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
|
||||
tar zxf apache-maven-3.8.8-bin.tar.gz
|
||||
ln -s /usr/local/src/apache-maven-3.8.8/bin/mvn /usr/bin/mvn
|
||||
rm -f apache-maven-3.8.8-bin.tar.gz
|
||||
|
||||
echo '[goreleaser]
|
||||
name=GoReleaser
|
||||
baseurl=https://repo.goreleaser.com/yum/
|
||||
enabled=1
|
||||
gpgcheck=0' | tee /etc/yum.repos.d/goreleaser.repo
|
||||
dnf install -y nfpm
|
||||
dnf clean all
|
||||
|
||||
EOF
|
||||
|
||||
WORKDIR /src
|
|
@ -0,0 +1,29 @@
|
|||
ARG REGISTRY_URL
|
||||
|
||||
FROM ${REGISTRY_URL}/almalinux:9
|
||||
|
||||
RUN bash -e <<EOF
|
||||
|
||||
dnf install -y \
|
||||
git \
|
||||
wget \
|
||||
zstd \
|
||||
https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
|
||||
|
||||
cd /usr/local/src
|
||||
wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
|
||||
tar zxf apache-maven-3.8.8-bin.tar.gz
|
||||
ln -s /usr/local/src/apache-maven-3.8.8/bin/mvn /usr/bin/mvn
|
||||
rm -f apache-maven-3.8.8-bin.tar.gz
|
||||
|
||||
echo '[goreleaser]
|
||||
name=GoReleaser
|
||||
baseurl=https://repo.goreleaser.com/yum/
|
||||
enabled=1
|
||||
gpgcheck=0' | tee /etc/yum.repos.d/goreleaser.repo
|
||||
dnf install -y nfpm
|
||||
dnf clean all
|
||||
|
||||
EOF
|
||||
|
||||
WORKDIR /src
|
|
@ -0,0 +1,24 @@
|
|||
ARG REGISTRY_URL
|
||||
|
||||
FROM ${REGISTRY_URL}/debian:bookworm
|
||||
|
||||
RUN bash -e <<EOF
|
||||
|
||||
apt-get update
|
||||
apt-get install -y \
|
||||
ca-certificates \
|
||||
git \
|
||||
zstd \
|
||||
maven=3.8.7-1 \
|
||||
openjdk-17-jdk
|
||||
|
||||
echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | tee /etc/apt/sources.list.d/goreleaser.list
|
||||
|
||||
apt-get update
|
||||
apt-get install -y nfpm
|
||||
|
||||
apt-get clean all
|
||||
|
||||
EOF
|
||||
|
||||
WORKDIR /src
|
|
@ -0,0 +1,24 @@
|
|||
ARG REGISTRY_URL
|
||||
|
||||
FROM ${REGISTRY_URL}/debian:bullseye
|
||||
|
||||
RUN bash -e <<EOF
|
||||
|
||||
apt-get update
|
||||
apt-get install -y \
|
||||
ca-certificates \
|
||||
git \
|
||||
zstd \
|
||||
maven=3.6.3-5 \
|
||||
openjdk-17-jdk
|
||||
|
||||
echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | tee /etc/apt/sources.list.d/goreleaser.list
|
||||
|
||||
apt-get update
|
||||
apt-get install -y nfpm
|
||||
|
||||
apt-get clean all
|
||||
|
||||
EOF
|
||||
|
||||
WORKDIR /src
|
|
@ -0,0 +1,30 @@
|
|||
ARG REGISTRY_URL
|
||||
|
||||
FROM ${REGISTRY_URL}/ubuntu:jammy
|
||||
|
||||
RUN bash -e <<EOF
|
||||
|
||||
apt-get update
|
||||
apt-get install -y \
|
||||
ca-certificates \
|
||||
git \
|
||||
wget \
|
||||
zstd \
|
||||
openjdk-17-jdk
|
||||
|
||||
cd /usr/local/src
|
||||
wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
|
||||
tar zxf apache-maven-3.8.8-bin.tar.gz
|
||||
ln -s /usr/local/src/apache-maven-3.8.8/bin/mvn /usr/bin/mvn
|
||||
rm -f apache-maven-3.8.8-bin.tar.gz
|
||||
|
||||
echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | tee /etc/apt/sources.list.d/goreleaser.list
|
||||
|
||||
apt-get update
|
||||
apt-get install -y nfpm
|
||||
|
||||
apt-get clean all
|
||||
|
||||
EOF
|
||||
|
||||
WORKDIR /src
|
|
@ -0,0 +1,149 @@
|
|||
name: as400
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'as400/packaging/**'
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
- master
|
||||
paths:
|
||||
- 'as400/packaging/**'
|
||||
|
||||
jobs:
|
||||
get-environment:
|
||||
uses: ./.github/workflows/get-environment.yml
|
||||
with:
|
||||
version_file: as400/packaging/centreon-as400-daemon.yaml
|
||||
|
||||
package:
|
||||
needs: [get-environment]
|
||||
runs-on: ubuntu-22.04
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- package_extension: rpm
|
||||
image: packaging-plugins-java-alma8
|
||||
distrib: el8
|
||||
- package_extension: rpm
|
||||
image: packaging-plugins-java-alma9
|
||||
distrib: el9
|
||||
- package_extension: deb
|
||||
image: packaging-plugins-java-bullseye
|
||||
distrib: bullseye
|
||||
- package_extension: deb
|
||||
image: packaging-plugins-java-bookworm
|
||||
distrib: bookworm
|
||||
- package_extension: deb
|
||||
image: packaging-plugins-java-jammy
|
||||
distrib: jammy
|
||||
|
||||
|
||||
container:
|
||||
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}
|
||||
credentials:
|
||||
username: ${{ secrets.DOCKER_REGISTRY_ID }}
|
||||
password: ${{ secrets.DOCKER_REGISTRY_PASSWD }}
|
||||
|
||||
name: package ${{ matrix.distrib }}
|
||||
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
|
||||
- name: Prepare files for packaging
|
||||
run: |
|
||||
find . \
|
||||
-type f \
|
||||
-exec grep -E '(@CONNECTOR_VERSION@)|(@CONNECTOR_HOME@)|(@CONNECTOR_ETC@)|(@CONNECTOR_LOG@)|(@CONNECTOR_USER@)|(@JAVA_BIN@)' {} ';' \
|
||||
-exec sed -i \
|
||||
-e 's|@CONNECTOR_VERSION@|'"%{version}"'|g' \
|
||||
-e 's|@CONNECTOR_HOME@|'"%{_datadir}/centreon-as400"'|g' \
|
||||
-e 's|@CONNECTOR_ETC@|'"/etc/centreon-as400/"'|g' \
|
||||
-e 's|@CONNECTOR_LOG@|'"/var/log/centreon-as400/"'|g' \
|
||||
-e 's|@CONNECTOR_USER@|'"centreon-as400"'|g' \
|
||||
-e 's|@JAVA_BIN@|'"/usr/bin/java"'|g' \
|
||||
{} ';'
|
||||
shell: bash
|
||||
|
||||
- name: Set JAVA_HOME
|
||||
run: export JAVA_HOME=$( java -XshowSettings:properties -version 2>&1 > /dev/null | grep 'java.home' | tr -s ' ' | cut -d ' ' -f 4)
|
||||
|
||||
- name: Build JAR using maven
|
||||
run: mvn -version && mvn clean install -f as400/connector.as400/pom.xml
|
||||
|
||||
- name: Remove me after debug
|
||||
run: find / -name "centreon-as400*.jar"
|
||||
|
||||
- name: Package
|
||||
uses: ./.github/actions/package-nfpm
|
||||
with:
|
||||
nfpm_file_pattern: "as400/packaging/centreon-as400-daemon.yaml"
|
||||
distrib: ${{ matrix.distrib }}
|
||||
package_extension: ${{ matrix.package_extension }}
|
||||
version: ${{ needs.get-environment.outputs.version }}
|
||||
release: ${{ needs.get-environment.outputs.release }}
|
||||
arch: all
|
||||
commit_hash: ${{ github.sha }}
|
||||
cache_key: ${{ github.sha }}-${{ github.run_id }}-${{ matrix.package_extension }}-as400-${{ 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 }}
|
||||
|
||||
- name: Save to cache
|
||||
uses: actions/cache/save@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2
|
||||
with:
|
||||
path: ./*.${{ matrix.package_extension }}
|
||||
key: ${{ github.sha }}-${{ github.run_id }}-${{ matrix.package_extension }}-${{ matrix.distrib }}
|
||||
|
||||
deliver-rpm:
|
||||
needs: [get-environment, package]
|
||||
if: ${{ contains(fromJson('["stable", "testing", "unstable"]'), needs.get-environment.outputs.stability) }}
|
||||
runs-on: [self-hosted, common]
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
distrib: [el8, el9]
|
||||
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
|
||||
- name: Delivery
|
||||
uses: ./.github/actions/rpm-delivery
|
||||
with:
|
||||
module_name: as400
|
||||
distrib: ${{ matrix.distrib }}
|
||||
cache_key: ${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }}
|
||||
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) }}
|
||||
runs-on: [self-hosted, common]
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
distrib: [bullseye, bookworm, jammy]
|
||||
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
|
||||
- name: Delivery
|
||||
uses: ./.github/actions/deb-delivery
|
||||
with:
|
||||
module_name: as400
|
||||
distrib: ${{ matrix.distrib }}
|
||||
cache_key: ${{ github.sha }}-${{ github.run_id }}-deb-${{ matrix.distrib }}
|
||||
stability: ${{ needs.get-environment.outputs.stability }}
|
||||
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
|
|
@ -28,6 +28,12 @@ jobs:
|
|||
- runner: ubuntu-22.04
|
||||
dockerfile: packaging-plugins-alma9
|
||||
image: packaging-plugins-alma9
|
||||
- runner: ubuntu-22.04
|
||||
dockerfile: packaging-plugins-java-alma8
|
||||
image: packaging-plugins-java-alma8
|
||||
- runner: ubuntu-22.04
|
||||
dockerfile: packaging-plugins-java-alma9
|
||||
image: packaging-plugins-java-alma9
|
||||
- runner: ubuntu-22.04
|
||||
dockerfile: packaging-plugins-bullseye
|
||||
image: packaging-plugins-bullseye
|
||||
|
@ -37,9 +43,18 @@ jobs:
|
|||
- runner: ubuntu-22.04
|
||||
dockerfile: packaging-plugins-bookworm
|
||||
image: packaging-plugins-bookworm
|
||||
- runner: ubuntu-22.04
|
||||
dockerfile: packaging-plugins-java-bullseye
|
||||
image: packaging-plugins-java-bullseye
|
||||
- runner: ubuntu-22.04
|
||||
dockerfile: packaging-plugins-java-bookworm
|
||||
image: packaging-plugins-java-bookworm
|
||||
- runner: ubuntu-22.04
|
||||
dockerfile: packaging-plugins-jammy
|
||||
image: packaging-plugins-jammy
|
||||
- runner: ubuntu-22.04
|
||||
dockerfile: packaging-plugins-java-jammy
|
||||
image: packaging-plugins-java-jammy
|
||||
|
||||
runs-on: ${{ matrix.runner }}
|
||||
|
||||
|
|
|
@ -0,0 +1,202 @@
|
|||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
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.
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
2021-12-31 Quentin Garnier <qgarnier@centreon.com> - 2.0.1
|
||||
* Use log4j 2.17.1
|
||||
|
||||
2021-10-13 Quentin Garnier <qgarnier@centreon.com> - 2.0.0
|
||||
* New release
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>as400.install</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
</natures>
|
||||
</projectDescription>
|
|
@ -0,0 +1,39 @@
|
|||
daemonListenerHost=localhost
|
||||
|
||||
#as400 login timeout for nagios check (ms)
|
||||
as400LoginTimeout=10000
|
||||
|
||||
#as400 read timeout for nagios check (ms)
|
||||
as400ReadTimeout=300000
|
||||
|
||||
#Time before cleaning an unused as400 resource (ms)
|
||||
as400ResourceDuration=7200000
|
||||
|
||||
#time before killing a dead as400 connection (s)
|
||||
as400SoLinger=1
|
||||
|
||||
#Duration of the job & (ms)
|
||||
cacheTimeout=60000
|
||||
|
||||
daemonNoRequestTimeout=5000
|
||||
|
||||
daemonRequestParseTimeout=5000
|
||||
|
||||
#time before killing a dead as400 connection (s)
|
||||
daemonSoLinger=1
|
||||
|
||||
#Time before discaring a check in queue (ms)
|
||||
workerQueueTimeout=360000
|
||||
|
||||
# active debug
|
||||
debug=false
|
||||
|
||||
# active exception
|
||||
exception=false
|
||||
|
||||
# active trace (in /tmp/trace.log)
|
||||
trace=false
|
||||
|
||||
# MessageQueueDB Base path
|
||||
pathMsgQDB=/tmp/
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Configuration>
|
||||
|
||||
<Appenders>
|
||||
<Console name="console" target="System.err">
|
||||
<PatternLayout pattern="[%-20d{dd/MM/yyyy HH:mm:ss}] [%-6p] %m %n"/>
|
||||
</Console>
|
||||
|
||||
<RollingFile name="RollingFile">
|
||||
<FileName>${sys:CONNECTOR_LOG}/connector.log</FileName>
|
||||
<FilePattern>${sys:CONNECTOR_LOG}/connector.%d{yyyy-MM-dd}.log</FilePattern>
|
||||
<PatternLayout>
|
||||
<Pattern>[%-20d{dd/MM/yyyy HH:mm:ss}] [%-6p] %m %n</Pattern>
|
||||
</PatternLayout>
|
||||
<Policies>
|
||||
<SizeBasedTriggeringPolicy size="5MB" />
|
||||
</Policies>
|
||||
<DefaultRolloverStrategy max="10" />
|
||||
</RollingFile>
|
||||
</Appenders>
|
||||
|
||||
<Loggers>
|
||||
<Logger name="org.apache.log4j.xml" level="info"/>
|
||||
<Root level="error">
|
||||
<AppenderRef ref="RollingFile"/>
|
||||
</Root>
|
||||
</Loggers>
|
||||
|
||||
</Configuration>
|
|
@ -0,0 +1,8 @@
|
|||
# centreon-as400 command line options
|
||||
JAVA_OPTS="-Xms128M -Xmx2G -XX:MaxPermSize=128m"
|
||||
CONNECTOR_OPTS="--port 8091"
|
||||
CONNECTOR_HOME=@CONNECTOR_HOME@
|
||||
CONNECTOR_ETC=@CONNECTOR_ETC@
|
||||
CONNECTOR_LOG=@CONNECTOR_LOG@
|
||||
CONNECTOR_TMP=/tmp/
|
||||
CONNECTOR_BIN=@CONNECTOR_HOME@/bin/centreon-as400-@CONNECTOR_VERSION@-jar-with-dependencies.jar
|
|
@ -0,0 +1,29 @@
|
|||
##
|
||||
## Copyright 2019-2021 Centreon
|
||||
##
|
||||
## 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.
|
||||
##
|
||||
## For more information : contact@centreon.com
|
||||
##
|
||||
|
||||
[Unit]
|
||||
Description=Centreon AS400
|
||||
|
||||
[Service]
|
||||
EnvironmentFile=/etc/sysconfig/centreon-as400
|
||||
ExecStart=@JAVA_BIN@ $JAVA_OPTS -DCONNECTOR_HOME=${CONNECTOR_HOME} -DCONNECTOR_ETC=${CONNECTOR_ETC} -DCONNECTOR_LOG=${CONNECTOR_LOG} -DCONNECTOR_TMP=${CONNECTOR_TMP} -jar $CONNECTOR_BIN $CONNECTOR_OPTS
|
||||
Type=simple
|
||||
User=centreon-as400
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
|
@ -0,0 +1,243 @@
|
|||
#!/bin/bash
|
||||
|
||||
#################################################
|
||||
##Functions and vars for actions results printing
|
||||
#################################################
|
||||
|
||||
RES_COL=80
|
||||
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
|
||||
SETCOLOR_INFO="echo -en \\033[1;38m"
|
||||
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
|
||||
SETCOLOR_FAILURE="echo -en \\033[1;31m"
|
||||
SETCOLOR_NORMAL="echo -en \\033[0;39m"
|
||||
SETCOLOR_WARNING="echo -en \\033[1;33m"
|
||||
|
||||
function echo_success() {
|
||||
echo -n "$1"
|
||||
$MOVE_TO_COL
|
||||
$SETCOLOR_SUCCESS
|
||||
echo -n "$2"
|
||||
$SETCOLOR_NORMAL
|
||||
echo -e "\r"
|
||||
echo ""
|
||||
}
|
||||
|
||||
function echo_failure() {
|
||||
echo -n "$1"
|
||||
$MOVE_TO_COL
|
||||
$SETCOLOR_FAILURE
|
||||
echo -n "$2"
|
||||
$SETCOLOR_NORMAL
|
||||
echo -e "\r"
|
||||
echo ""
|
||||
}
|
||||
|
||||
function echo_passed() {
|
||||
echo -n "$1"
|
||||
$MOVE_TO_COL
|
||||
$SETCOLOR_WARNING
|
||||
echo -n "$2"
|
||||
$SETCOLOR_NORMAL
|
||||
echo -e "\r"
|
||||
echo ""
|
||||
}
|
||||
|
||||
##################
|
||||
##Static variables
|
||||
##################
|
||||
|
||||
INIT_FOLDER="init-script/"
|
||||
INIT_FILE="centreon-as400.service"
|
||||
SYSCONFIG_FILE="centreon-as400-sysconfig"
|
||||
|
||||
CONNECTOR_VERSION=2.0.0
|
||||
CONNECTOR_HOME="/usr/share/centreon-as400/"
|
||||
CONNECTOR_LOG="/var/log/centreon-as400/"
|
||||
CONNECTOR_ETC="/etc/centreon-as400/"
|
||||
LOG_ETC_FILE="log4j.xml"
|
||||
|
||||
CONNECTOR_USER="centreon-as400"
|
||||
CONNECTOR_GROUP="centreon-as400"
|
||||
|
||||
JAVA_BIN=""
|
||||
|
||||
ETC_PASSWD="/etc/passwd"
|
||||
ETC_GROUP="/etc/group"
|
||||
ETC_INITD="/etc/systemd/system/"
|
||||
ETC_SYSCONFIG="/etc/sysconfig/"
|
||||
|
||||
######
|
||||
##INIT
|
||||
######
|
||||
|
||||
$SETCOLOR_WARNING
|
||||
echo "Starting setup..."
|
||||
$SETCOLOR_NORMAL
|
||||
echo ""
|
||||
|
||||
##############################
|
||||
##Getting modules install path
|
||||
##############################
|
||||
DONE="no"
|
||||
CREATE_HOME="no"
|
||||
temp_folder="$CONNECTOR_HOME"
|
||||
while [ "$DONE" = "no" ]; do
|
||||
echo "Centreon AS400 home Directory [$CONNECTOR_HOME]? "
|
||||
echo -n ">"
|
||||
read temp_folder
|
||||
if [ -z "$temp_folder" ]; then
|
||||
temp_folder="$CONNECTOR_HOME"
|
||||
fi
|
||||
temp_folder=`echo "$temp_folder" | sed "s/$/\//"`
|
||||
|
||||
if [ -d "$temp_folder" ]; then
|
||||
DONE="yes"
|
||||
else
|
||||
echo_failure "$temp does not exists" "CRITICAL"
|
||||
echo "Specified path does not exists, do you want to create it ?[Y/n]"
|
||||
echo -n ">"
|
||||
read temp
|
||||
if [ -z "$temp" ]; then
|
||||
temp="Y"
|
||||
fi
|
||||
while [ "$temp" != "Y" ] && [ "$temp" != "y" ] && [ "$temp" != "n" ] && [ "$temp" != "N" ]; do
|
||||
echo "Specified path does not exists, do you want to create it ?[Y/n]"
|
||||
echo -n ">"
|
||||
read temp
|
||||
if [ -z "$temp" ]; then
|
||||
temp="Y"
|
||||
fi
|
||||
done
|
||||
if [ "$temp" = "Y" ] || [ "$temp" = "y" ]; then
|
||||
DONE="yes"
|
||||
CREATE_HOME="yes"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
temp_folder=$(echo $temp_folder | sed "s/\/\/$/\//")
|
||||
CONNECTOR_HOME=${temp_folder}
|
||||
echo_success "Centreon AS400 home directory" "$CONNECTOR_HOME"
|
||||
|
||||
#############################
|
||||
##Getting java home directory
|
||||
#############################
|
||||
|
||||
JAVA_HOME="/usr/"
|
||||
temp=$JAVA_HOME
|
||||
while [ ! -x "$temp/bin/java" ]; do
|
||||
echo_failure "Cannot find java binary" "FAILURE"
|
||||
echo "Java home directory?"
|
||||
echo -n ">"
|
||||
read temp
|
||||
if [ -z "$temp" ]; then
|
||||
temp="$JAVA_HOME"
|
||||
fi
|
||||
done
|
||||
temp=`echo "$temp" | sed "s/$/\//"`
|
||||
JAVA_BIN=`echo $temp | sed "s/\/\/$/\//"`"bin/java"
|
||||
echo_success "Java bin path :" "$JAVA_BIN"
|
||||
|
||||
###################
|
||||
# CONNECTOR INIT SCRIPT
|
||||
###################
|
||||
|
||||
echo "Do you want to install AS400 systemd script [y/N]?"
|
||||
echo -n ">"
|
||||
read response
|
||||
if [ -z "$response" ]; then
|
||||
response="N"
|
||||
fi
|
||||
while [ "$response" != "Y" ] && [ "$response" != "y" ] && [ "$response" != "N" ] && [ "$response" != "n" ]; do
|
||||
echo "Do you want to install AS400 systemd script [y/N]?"
|
||||
echo -n ">"
|
||||
read response
|
||||
if [ -z "$response" ]; then
|
||||
response="N"
|
||||
fi
|
||||
done
|
||||
INSTALL_CONNECTOR_INIT=$response
|
||||
echo_success "CONNECTOR systemd script :" "$ETC_INITD/$INIT_FILE"
|
||||
|
||||
########################
|
||||
## Centreon BI user and Group
|
||||
########################
|
||||
exists=`cat $ETC_PASSWD | grep "^$CONNECTOR_USER:"`
|
||||
if [ -z "$exists" ]; then
|
||||
useradd -m $CONNECTOR_USER -d $CONNECTOR_HOME
|
||||
fi
|
||||
echo_success "CONNECTOR run user :" "$CONNECTOR_USER"
|
||||
|
||||
exists=`cat $ETC_GROUP | grep "^$CONNECTOR_GROUP:"`
|
||||
if [ -z "$exists" ]; then
|
||||
groupadd $CONNECTOR_GROUP
|
||||
fi
|
||||
echo_success "CONNECTOR run group :" "$CONNECTOR_GROUP"
|
||||
|
||||
#######################
|
||||
# DEPLOYING CENTREON BI
|
||||
#######################
|
||||
echo ""
|
||||
echo_success "Creating directories and moving binaries..." "OK"
|
||||
if [ ! -d "${CONNECTOR_HOME}" ]; then
|
||||
mkdir -p $CONNECTOR_HOME
|
||||
fi
|
||||
if [ ! -d "${CONNECTOR_HOME}/bin" ]; then
|
||||
mkdir ${CONNECTOR_HOME}/bin
|
||||
fi
|
||||
|
||||
if [ -d bin/ ] ; then
|
||||
cp -f bin/*.jar ${CONNECTOR_HOME}/bin/
|
||||
fi
|
||||
|
||||
if [ ! -d "${CONNECTOR_LOG}" ]; then
|
||||
mkdir -p ${CONNECTOR_LOG}
|
||||
fi
|
||||
if [ ! -d "${CONNECTOR_ETC}" ]; then
|
||||
mkdir -p ${CONNECTOR_ETC}
|
||||
fi
|
||||
|
||||
cp etc/log4j.xml ${CONNECTOR_ETC}
|
||||
cp etc/config.properties ${CONNECTOR_ETC}
|
||||
|
||||
###################
|
||||
##Macro replacement
|
||||
###################
|
||||
|
||||
ETC_FILE=${CONNECTOR_ETC}${CONNECTOR_ETC_FILE}
|
||||
|
||||
if [ "$INSTALL_CONNECTOR_INIT" = "y" ] || [ "$INSTALL_CONNECTOR_INIT" = "Y" ]; then
|
||||
echo_success "Copying CONNECTOR init script..." "OK"
|
||||
sed -e 's|@JAVA_BIN@|'"$JAVA_BIN"'|g' \
|
||||
$INIT_FOLDER/$INIT_FILE > $ETC_INITD/$INIT_FILE
|
||||
chmod 644 $ETC_INITD/$INIT_FILE
|
||||
sed -e 's|@CONNECTOR_HOME@|'"$CONNECTOR_HOME"'|g' \
|
||||
-e 's|@JAVA_BIN@|'"$JAVA_BIN"'|g' \
|
||||
-e 's|@CONNECTOR_USER@|'"$CONNECTOR_USER"'|g' \
|
||||
-e 's|@CONNECTOR_ETC@|'"${CONNECTOR_ETC}"'|g' \
|
||||
-e 's|@CONNECTOR_LOG@|'"${CONNECTOR_LOG}"'|g' \
|
||||
-e 's|@CONNECTOR_VERSION@|'"${CONNECTOR_VERSION}"'|g' \
|
||||
$INIT_FOLDER/$SYSCONFIG_FILE > $ETC_SYSCONFIG/centreon-as400
|
||||
fi
|
||||
echo_success "Deploying Centreon-AS400..." "OK"
|
||||
|
||||
###################################################
|
||||
##Rights settings on install directory and binaries
|
||||
###################################################
|
||||
|
||||
chown -R $CONNECTOR_USER.$CONNECTOR_GROUP $CONNECTOR_HOME
|
||||
chown -R $CONNECTOR_USER.$CONNECTOR_GROUP $CONNECTOR_LOG
|
||||
chown -R $CONNECTOR_USER.$CONNECTOR_GROUP $CONNECTOR_ETC
|
||||
chmod -R 775 $CONNECTOR_HOME
|
||||
|
||||
echo_success "Rights settings..." "OK"
|
||||
|
||||
systemctl enable $INIT_FILE
|
||||
|
||||
#########
|
||||
# THE END
|
||||
#########
|
||||
|
||||
echo ""
|
||||
$SETCOLOR_WARNING
|
||||
echo "Setup finished."
|
||||
echo ""
|
|
@ -0,0 +1,55 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" output="target/classes" path="src/main/java">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
<attribute name="test" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
<attribute name="test" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="src" path="target/generated-sources/annotations">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
<attribute name="ignore_optional_problems" value="true"/>
|
||||
<attribute name="m2e-apt" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="src" output="target/test-classes" path="target/generated-sources/test-annotations">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
<attribute name="ignore_optional_problems" value="true"/>
|
||||
<attribute name="m2e-apt" value="true"/>
|
||||
<attribute name="test" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="output" path="target/classes"/>
|
||||
</classpath>
|
|
@ -0,0 +1,2 @@
|
|||
.vscode
|
||||
/target
|
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>as400</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.m2e.core.maven2Builder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.sonar.ide.eclipse.core.sonarNature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
|
@ -0,0 +1,6 @@
|
|||
eclipse.preferences.version=1
|
||||
encoding//src/main/java=UTF-8
|
||||
encoding//src/main/resources=UTF-8
|
||||
encoding//src/test/java=UTF-8
|
||||
encoding//src/test/resources=UTF-8
|
||||
encoding/<project>=UTF-8
|
|
@ -0,0 +1,2 @@
|
|||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.apt.aptEnabled=false
|
|
@ -0,0 +1,7 @@
|
|||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||
org.eclipse.jdt.core.compiler.processAnnotations=disabled
|
||||
org.eclipse.jdt.core.compiler.release=disabled
|
||||
org.eclipse.jdt.core.compiler.source=1.6
|
|
@ -0,0 +1,5 @@
|
|||
#Tue Nov 08 15:01:53 CET 2011
|
||||
activeProfiles=
|
||||
eclipse.preferences.version=1
|
||||
resolveWorkspaceProjects=true
|
||||
version=1
|
|
@ -0,0 +1,8 @@
|
|||
#Tue Nov 08 15:01:08 CET 2011
|
||||
activeProfiles=
|
||||
eclipse.preferences.version=1
|
||||
fullBuildGoals=process-test-resources
|
||||
resolveWorkspaceProjects=true
|
||||
resourceFilterGoals=process-resources resources\:testResources
|
||||
skipCompilerPlugin=true
|
||||
version=1
|
|
@ -0,0 +1,5 @@
|
|||
eclipse.preferences.version=1
|
||||
extraProperties=sonar.java.coveragePlugin\=jacoco\r\nsonar.language\=java\r\nsonar.jacoco.itReportPath\=/home/jblamotte/git/centreon-connector-as400/connector.as400/../target/jacoco-it.exec\r\nsonar.dynamicAnalysis\=reuseReports
|
||||
projectKey=com.centreon.connector\:connector-as400
|
||||
serverUrl=http\://localhost\:9000
|
||||
version=2
|
|
@ -0,0 +1,4 @@
|
|||
#Thu Sep 22 10:02:29 CEST 2011
|
||||
eclipse.preferences.version=1
|
||||
projectArtifactId=connector-as400
|
||||
projectGroupId=com.centreon.connector
|
|
@ -0,0 +1,25 @@
|
|||
# Tools
|
||||
|
||||
## Launch test
|
||||
|
||||
### Build
|
||||
|
||||
mvn clean package
|
||||
|
||||
### Execute
|
||||
|
||||
java \
|
||||
-DCONNECTOR_ETC=target/test-classes/ \
|
||||
-DCONNECTOR_HOME=target/test-classes/ \
|
||||
-DCONNECTOR_LOG=target/test-classes/ \
|
||||
-DCONNECTOR_TMP=target/test-classes/ \
|
||||
-jar target/centreon-as400-2.0.0-jar-with-dependencies.jar \
|
||||
--port 8091
|
||||
|
||||
### Test
|
||||
|
||||
curl -X POST -d '{"host": "test-as400", "login": "myuser", "password": "mypass", "command": "test" }' http://127.0.0.1:8091
|
||||
|
||||
## References
|
||||
|
||||
[IBM knowledge center example](https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_72/rzahh/pcsystemstatexample.htm)
|
|
@ -0,0 +1,241 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.centreon.connector</groupId>
|
||||
<artifactId>centreon-as400</artifactId>
|
||||
<version>2.0.2</version>
|
||||
<name>Centreon-AS/400</name>
|
||||
<description>Connecteur AS/400</description>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<spring.version>4.0.5.RELEASE</spring.version>
|
||||
<java.version>17</java.version>
|
||||
<log4j.version>2.17.1</log4j.version>
|
||||
<!-- Sonar -->
|
||||
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
|
||||
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
|
||||
<sonar.jacoco.itReportPath>${project.basedir}/../target/jacoco-it.exec</sonar.jacoco.itReportPath>
|
||||
<sonar.language>java</sonar.language>
|
||||
</properties>
|
||||
|
||||
<developers>
|
||||
<developer>
|
||||
<id>qgarnier</id>
|
||||
<name>Quentin GARNIER</name>
|
||||
<email>qgarnier@centreon.com</email>
|
||||
<organization>Centreon</organization>
|
||||
</developer>
|
||||
<developer>
|
||||
<id>jblamotte</id>
|
||||
<name>Jean-Baptiste LAMOTTE</name>
|
||||
<organization>Centreon</organization>
|
||||
</developer>
|
||||
</developers>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>2.3.1</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<version>2.2.1</version>
|
||||
<configuration>
|
||||
<descriptorRefs>
|
||||
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||
</descriptorRefs>
|
||||
|
||||
<!-- <descriptors> <descriptor>jar-with-dependencies-packed.xml</descriptor>
|
||||
</descriptors> -->
|
||||
<archive>
|
||||
<manifest>
|
||||
<mainClass>com.centreon.connector.as400.Main</mainClass>
|
||||
<addClasspath>true</addClasspath>
|
||||
</manifest>
|
||||
</archive>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.13.0</version>
|
||||
<configuration>
|
||||
<source>17</source>
|
||||
<target>17</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.fusesource.mvnplugins</groupId>
|
||||
<artifactId>maven-graph-plugin</artifactId>
|
||||
<version>1.35</version>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<!-- <includes> -->
|
||||
<!-- <include>>com.centreon.**</include> -->
|
||||
<!-- </includes> -->
|
||||
<!-- <includes>com.centreon.*</includes> -->
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>pre-test</id>
|
||||
<goals>
|
||||
<goal>prepare-agent</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>post-test</id>
|
||||
<phase>test</phase>
|
||||
<goals>
|
||||
<goal>report</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
<version>0.8.12</version>
|
||||
</plugin>
|
||||
<!--This plugin's configuration is used to store Eclipse m2e settings
|
||||
only. It has no influence on the Maven build itself. -->
|
||||
<plugin>
|
||||
<groupId>org.eclipse.m2e</groupId>
|
||||
<artifactId>lifecycle-mapping</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<configuration>
|
||||
<lifecycleMappingMetadata>
|
||||
<pluginExecutions>
|
||||
<pluginExecution>
|
||||
<pluginExecutionFilter>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>
|
||||
jacoco-maven-plugin
|
||||
</artifactId>
|
||||
<versionRange>
|
||||
[0.8.2,)
|
||||
</versionRange>
|
||||
<goals>
|
||||
<goal>prepare-agent</goal>
|
||||
</goals>
|
||||
</pluginExecutionFilter>
|
||||
<action>
|
||||
<ignore></ignore>
|
||||
</action>
|
||||
</pluginExecution>
|
||||
</pluginExecutions>
|
||||
</lifecycleMappingMetadata>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>commons-cli</groupId>
|
||||
<artifactId>commons-cli</artifactId>
|
||||
<version>1.4</version>
|
||||
<type>jar</type>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-exec</artifactId>
|
||||
<version>1.3</version>
|
||||
<type>jar</type>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.sf.jt400</groupId>
|
||||
<artifactId>jt400</artifactId>
|
||||
<version>10.7</version>
|
||||
<type>jar</type>
|
||||
<!-- <scope>compile</scope> -->
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.undertow</groupId>
|
||||
<artifactId>undertow-core</artifactId>
|
||||
<version>2.2.11.Final</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
<version>2.8.9</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-api</artifactId>
|
||||
<version>${log4j.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-core</artifactId>
|
||||
<version>${log4j.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.13.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-core</artifactId>
|
||||
<version>5.13.0</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
</dependencies>
|
||||
|
||||
<reporting>
|
||||
<plugins>
|
||||
<!-- Normally, we take off the dependency report, saves time. -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-project-info-reports-plugin</artifactId>
|
||||
<version>2.7</version>
|
||||
<configuration>
|
||||
<dependencyLocationsEnabled>false</dependencyLocationsEnabled>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>cobertura-maven-plugin</artifactId>
|
||||
<version>2.6</version>
|
||||
<configuration>
|
||||
<formats>
|
||||
<format>html</format>
|
||||
<format>xml</format>
|
||||
</formats>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
</reporting>
|
||||
</project>
|
|
@ -0,0 +1,143 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class Conf {
|
||||
|
||||
public static void loadConfiguration(final InputStream in) throws IOException {
|
||||
final Properties properties = new Properties();
|
||||
properties.load(in);
|
||||
|
||||
String param;
|
||||
|
||||
Conf.debug = Boolean.parseBoolean("" + properties.get("debug"));
|
||||
Conf.exception = Boolean.parseBoolean("" + properties.get("exception"));
|
||||
Conf.trace = Boolean.parseBoolean("" + properties.get("trace"));
|
||||
|
||||
param = (String)properties.get("daemonListenerHost");
|
||||
if (param != null) {
|
||||
Conf.daemonListenerHost = param;
|
||||
}
|
||||
|
||||
param = (String)properties.get("daemonNoRequestTimeout");
|
||||
if (param != null) {
|
||||
Conf.daemonNoRequestTimeout = Integer.parseInt(param);
|
||||
}
|
||||
param = (String)properties.get("daemonRequestParseTimeout");
|
||||
if (param != null) {
|
||||
Conf.daemonRequestParseTimeout = Integer.parseInt(param);
|
||||
}
|
||||
|
||||
Conf.authUsername = (String)properties.get("authUsername");
|
||||
Conf.authPassword = (String)properties.get("authPassword");
|
||||
|
||||
param = (String)properties.get("keyStoreType");
|
||||
if (param != null) {
|
||||
Conf.keyStoreType = param;
|
||||
}
|
||||
Conf.keyStoreFile = (String)properties.get("keyStoreFile");
|
||||
Conf.keyStorePassword = (String)properties.get("keyStorePassword");
|
||||
|
||||
param = (String)properties.get("sslProtocol");
|
||||
if (param != null) {
|
||||
Conf.sslProtocol = param;
|
||||
}
|
||||
|
||||
Conf.daemonSoLinger = Integer.parseInt("" + properties.get("daemonSoLinger"));
|
||||
Conf.as400SoLinger = Integer.parseInt("" + properties.get("as400SoLinger"));
|
||||
Conf.as400ReadTimeout = Integer.parseInt("" + properties.get("as400ReadTimeout"));
|
||||
Conf.as400LoginTimeout = Integer.parseInt("" + properties.get("as400LoginTimeout"));
|
||||
Conf.as400ResourceDuration = Integer.parseInt("" + properties.get("as400ResourceDuration"));
|
||||
Conf.workerQueueTimeout = Integer.parseInt("" + properties.get("workerQueueTimeout"));
|
||||
Conf.cacheTimeout = Integer.parseInt("" + properties.get("cacheTimeout"));
|
||||
Conf.msgqDbPath = "" + properties.get("pathMsgQDB");
|
||||
}
|
||||
|
||||
public static boolean debug = true;
|
||||
static boolean exception = true;
|
||||
static boolean trace = true;
|
||||
|
||||
public static String msgqDbPath = "/tmp/";
|
||||
|
||||
public static String daemonListenerHost = "localhost";
|
||||
|
||||
public static int daemonNoRequestTimeout = 5000;
|
||||
|
||||
public static int daemonRequestParseTimeout = 5000;
|
||||
|
||||
public static String authUsername = null;
|
||||
|
||||
public static String authPassword = null;
|
||||
|
||||
public static String keyStoreType = "PKCS12";
|
||||
|
||||
public static String keyStoreFile = null;
|
||||
|
||||
public static String keyStorePassword = null;
|
||||
|
||||
public static String sslProtocol = "TLS";
|
||||
|
||||
/**
|
||||
* Delai avant fermeture force d'une connexion mal ferme par les plugins de
|
||||
* check (en mode daemon) unite en seconde
|
||||
*/
|
||||
public static int daemonSoLinger = 1;
|
||||
|
||||
/**
|
||||
* Delai avant fermeture force d'une connexion mal ferme par l'AS/400 unite en
|
||||
* seconde
|
||||
*/
|
||||
public static int as400SoLinger = 1;
|
||||
|
||||
/**
|
||||
* Timeout lors de la reception d'une reponse de l'AS400 unite en milliseconde
|
||||
*/
|
||||
public static int as400ReadTimeout = 5 * 60 * 1000;
|
||||
|
||||
/**
|
||||
* Timeout lors de la connexion a un as/400 unite en milliseconde
|
||||
*/
|
||||
public static int as400LoginTimeout = 10 * 1000;
|
||||
|
||||
/**
|
||||
* Delai avant de supprimer une connection inactive a un as/400 unite en
|
||||
* millisecondes
|
||||
*/
|
||||
public static long as400ResourceDuration = 120 * 60 * 1000;
|
||||
|
||||
/**
|
||||
* duree maximale d'attente d'un check dans une queue unite en millisecondes
|
||||
*/
|
||||
public static long workerQueueTimeout = 6 * 60 * 1000;
|
||||
|
||||
/**
|
||||
* cache duration for disk and job (time before next refresh) duration in
|
||||
* milliseconds
|
||||
*/
|
||||
public static long cacheTimeout = 60 * 1000;
|
||||
}
|
|
@ -0,0 +1,151 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400;
|
||||
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.core.LoggerContext;
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class ConnectorLogger {
|
||||
|
||||
private static ConnectorLogger instance = null;
|
||||
|
||||
public synchronized static final ConnectorLogger getInstance() {
|
||||
if (ConnectorLogger.instance == null) {
|
||||
ConnectorLogger.instance = new ConnectorLogger(Main.getEtcDir());
|
||||
}
|
||||
return ConnectorLogger.instance;
|
||||
}
|
||||
|
||||
private Logger logger = null;
|
||||
|
||||
private ConnectorLogger(String etcDir) {
|
||||
if ((etcDir != null) && (etcDir.length() > 0)) {
|
||||
LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
|
||||
File file = new File(etcDir + "log4j2.xml");
|
||||
context.setConfigLocation(file.toURI());
|
||||
} else {
|
||||
// DOMConfigurator.configure("log4j.xml");
|
||||
}
|
||||
this.logger = LogManager.getRootLogger();
|
||||
}
|
||||
|
||||
public synchronized void debug(final String log) {
|
||||
this.logger.debug(log);
|
||||
}
|
||||
|
||||
public synchronized void trace(final String log, final Throwable t) {
|
||||
this.logger.trace(log, t);
|
||||
}
|
||||
|
||||
public synchronized void trace(final String log) {
|
||||
this.logger.trace(log);
|
||||
}
|
||||
|
||||
public synchronized void debug(final String log, final Throwable t) {
|
||||
if (Conf.exception) {
|
||||
this.logger.debug(log, t);
|
||||
} else {
|
||||
this.logger.debug(log);
|
||||
this.logger.debug(" --> Message: " + t.getMessage());
|
||||
Throwable cause = null;
|
||||
if ((cause = t.getCause()) != null) {
|
||||
this.logger.debug(" --> Cause: " + cause.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void error(final String log) {
|
||||
this.logger.error(log);
|
||||
}
|
||||
|
||||
public void error(final String log, final Throwable t) {
|
||||
if (Conf.exception) {
|
||||
this.logger.error(log, t);
|
||||
} else {
|
||||
this.logger.error(log);
|
||||
this.logger.error(" --> Message: " + t.getMessage());
|
||||
Throwable cause = null;
|
||||
if ((cause = t.getCause()) != null) {
|
||||
this.logger.error(" --> Cause: " + cause.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void fatal(final String log) {
|
||||
this.logger.fatal(log);
|
||||
}
|
||||
|
||||
public synchronized void fatal(final String log, final Throwable t) {
|
||||
if (Conf.exception) {
|
||||
this.logger.fatal(log, t);
|
||||
} else {
|
||||
this.logger.fatal(log);
|
||||
this.logger.fatal(" --> Message: " + t.getMessage());
|
||||
Throwable cause = null;
|
||||
if ((cause = t.getCause()) != null) {
|
||||
this.logger.fatal(" --> Cause: " + cause.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized Logger getLogger() {
|
||||
return this.logger;
|
||||
}
|
||||
|
||||
public synchronized void info(final String log) {
|
||||
this.logger.info(log);
|
||||
}
|
||||
|
||||
public synchronized void info(final String log, final Throwable t) {
|
||||
if (Conf.exception) {
|
||||
this.logger.info(log, t);
|
||||
} else {
|
||||
this.logger.info(log);
|
||||
this.logger.info(" --> Message: " + t.getMessage());
|
||||
Throwable cause = null;
|
||||
if ((cause = t.getCause()) != null) {
|
||||
this.logger.info(" --> Cause: " + cause.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void warn(final String log) {
|
||||
this.logger.warn(log);
|
||||
}
|
||||
|
||||
public synchronized void warn(final String log, final Throwable t) {
|
||||
if (Conf.exception) {
|
||||
this.logger.warn(log, t);
|
||||
} else {
|
||||
this.logger.warn(log);
|
||||
this.logger.warn(" --> Message: " + t.getMessage());
|
||||
Throwable cause = null;
|
||||
if ((cause = t.getCause()) != null) {
|
||||
this.logger.warn(" --> Cause: " + cause.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,162 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.commons.cli.CommandLine;
|
||||
import org.apache.commons.cli.CommandLineParser;
|
||||
import org.apache.commons.cli.HelpFormatter;
|
||||
import org.apache.commons.cli.PosixParser;
|
||||
|
||||
import com.ibm.as400.access.Trace;
|
||||
import com.centreon.connector.as400.daemon.Daemon;
|
||||
import com.centreon.connector.as400.dispatcher.client.impl.ClientDispatcherImpl;
|
||||
import com.centreon.connector.as400.parser.OptionFactory;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
class Main {
|
||||
static public final String CONNECTOR_LOG = "CONNECTOR_LOG";
|
||||
static public final String CONNECTOR_ETC = "CONNECTOR_ETC";
|
||||
|
||||
static private String etcDir;
|
||||
|
||||
static public String getEtcDir() {
|
||||
return etcDir;
|
||||
}
|
||||
|
||||
private static void checkProperties() {
|
||||
etcDir = System.getProperty(Main.CONNECTOR_ETC, "/etc/centreon-as400/");
|
||||
String logDir = System.getProperty(Main.CONNECTOR_LOG, "/var/log/centreon-as400/");
|
||||
|
||||
try {
|
||||
final File file = new File(etcDir + "log4j2.xml");
|
||||
if (!file.exists()) {
|
||||
ConnectorLogger.getInstance().fatal(etcDir + "log4j2.xml doesnt exist. Engine stopped");
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
ConnectorLogger.getInstance().info("[Logs] Logs configuration file : " + file.getAbsolutePath());
|
||||
|
||||
} catch (final Exception e) {
|
||||
ConnectorLogger.getInstance().fatal("", e);
|
||||
}
|
||||
|
||||
System.setErr(System.out);
|
||||
|
||||
try {
|
||||
ConnectorLogger.getInstance().info("[Config] Configuration file : " + etcDir + "config.properties");
|
||||
Conf.loadConfiguration(new FileInputStream(etcDir + "config.properties"));
|
||||
} catch (final IOException e) {
|
||||
ConnectorLogger.getInstance().fatal("", e);
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
if (Conf.trace == true) {
|
||||
try {
|
||||
final String traceLog = logDir + "/trace.log";
|
||||
ConnectorLogger.getInstance().debug("Advanced trace log file : " + traceLog);
|
||||
|
||||
Trace.setFileName(traceLog);
|
||||
Trace.setTraceAllOn(false);
|
||||
Trace.setTraceOn(true);
|
||||
Trace.setTraceErrorOn(true);
|
||||
Trace.setTraceWarningOn(true);
|
||||
Trace.setTraceInformationOn(true);
|
||||
|
||||
} catch (final Exception e) {
|
||||
ConnectorLogger.getInstance().debug("", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void daemon(final CommandLine cmd) {
|
||||
try {
|
||||
int port = 8091;
|
||||
|
||||
if (cmd.hasOption("port")) {
|
||||
port = Integer.parseInt(cmd.getOptionValue("port"));
|
||||
}
|
||||
final Daemon core = new Daemon();
|
||||
core.start(port);
|
||||
} catch (IOException ioe) {
|
||||
System.out.println("Couldn't start server: " + ioe);
|
||||
} catch (InterruptedException ie) {
|
||||
System.out.println("Interrupted exception: " + ie);
|
||||
} catch (final Exception e) {
|
||||
ConnectorLogger.getInstance().fatal("Couldn't start server", e);
|
||||
} finally {
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the help.
|
||||
*
|
||||
* @return the help
|
||||
*/
|
||||
|
||||
private static String getHelp() {
|
||||
final HelpFormatter formatter = new HelpFormatter();
|
||||
String exemple = "--port <port>\n";
|
||||
exemple += "\n";
|
||||
|
||||
formatter.printHelp(" ", exemple, OptionFactory.getOptions(), "");
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* The main method.
|
||||
*
|
||||
* @param args the arguments
|
||||
*/
|
||||
public static void main(final String[] args) {
|
||||
|
||||
Runtime.getRuntime().addShutdownHook(new Thread() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
ConnectorLogger.getInstance().info("Shutdown Centreon-Connector");
|
||||
super.run();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
Main.checkProperties();
|
||||
|
||||
try {
|
||||
|
||||
final CommandLineParser parser = new PosixParser();
|
||||
final CommandLine cmd = parser.parse(OptionFactory.getOptions(), args);
|
||||
|
||||
Main.daemon(cmd);
|
||||
} catch (final Exception e) {
|
||||
ConnectorLogger.getInstance().fatal("", e);
|
||||
Main.getHelp();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400;
|
||||
|
||||
/**
|
||||
* Launch the Engine from a variety of sources, either through a main() or
|
||||
* invoked through Apache Daemon.
|
||||
*/
|
||||
public class WinService {
|
||||
|
||||
public static void main(final String[] args) throws Exception {
|
||||
WinService.start(new String[] { "--port", "8091" });
|
||||
}
|
||||
|
||||
public static void start(final String[] args) throws Exception {
|
||||
final String[] tabArgs = new String[(args.length + 1)];
|
||||
|
||||
tabArgs[0] = "service";
|
||||
int i = 1;
|
||||
for (final String str : args) {
|
||||
tabArgs[i] = str;
|
||||
i++;
|
||||
}
|
||||
|
||||
final Thread thread = new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
Main.main(tabArgs);
|
||||
}
|
||||
};
|
||||
thread.setDaemon(false);
|
||||
thread.start();
|
||||
|
||||
// Main.main(new String[] {"service", "--daemon", "8090"});
|
||||
// System.out.println("Out:EngineLauncher#start");
|
||||
// ConnectorLogger.getInstance().info("EngineLauncher#start");
|
||||
|
||||
/*
|
||||
* Thread thread = new Thread() {
|
||||
*
|
||||
* @Override public void run() { while (true) { try { Thread.sleep(1000); }
|
||||
* catch (InterruptedException e) { e.printStackTrace(); }
|
||||
* System.out.println("Out:EngineLauncher#isRunning");
|
||||
* ConnectorLogger.getInstance().info("EngineLauncher#isRunning"); } }
|
||||
*
|
||||
* };
|
||||
*
|
||||
* thread.start();
|
||||
*/
|
||||
}
|
||||
|
||||
public static void stop(final String[] args) throws Exception {
|
||||
System.out.println("Out:EngineLauncher#stop");
|
||||
ConnectorLogger.getInstance().info("EngineLauncher#stop");
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler;
|
||||
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
|
||||
public interface ICachedMessageQueueHandler {
|
||||
|
||||
ResponseData getNewMessageInMessageQueue(String messageQueuePath, String messageIdfilterPattern, int minSeverityLevel,
|
||||
int maxSeverityLevel) throws Exception;
|
||||
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler;
|
||||
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
|
||||
public interface ICommandHandler {
|
||||
ResponseData executeCommand(String commandName) throws Exception;
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler;
|
||||
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public interface IDiskHandler {
|
||||
ResponseData listDisks(String diskName) throws Exception;
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler;
|
||||
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public interface IJobHandler {
|
||||
ResponseData listJobs() throws Exception;
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public interface IJobQueueHandler {
|
||||
|
||||
ResponseData getJobQueues(List<Map<String , String>> queues) throws Exception;
|
||||
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler;
|
||||
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public interface IMessageQueueHandler {
|
||||
void dumpMessageQueue() throws Exception;
|
||||
|
||||
ResponseData getErrorMessageQueue(String messageQueuePath, String messageIdfilterPattern,
|
||||
int minSeverityLevel, int maxSeverityLevel) throws Exception;
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler;
|
||||
|
||||
import com.ibm.as400.access.Subsystem;
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public interface ISubSystemHandler {
|
||||
void dumpSubSystem(Subsystem subSystem) throws Exception;
|
||||
|
||||
ResponseData listSubsystems() throws Exception;
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler;
|
||||
|
||||
import com.ibm.as400.access.SystemPool;
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public interface ISystemHandler {
|
||||
void dumpPool(SystemPool pool) throws Exception;
|
||||
|
||||
void dumpSystem() throws Exception;
|
||||
|
||||
ResponseData getPageFault() throws Exception;
|
||||
|
||||
ResponseData getSystem() throws Exception;
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.text.DecimalFormat;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.Locale;
|
||||
|
||||
import com.ibm.as400.access.AS400;
|
||||
import com.ibm.as400.access.AS400SecurityException;
|
||||
import com.ibm.as400.access.ConnectionEvent;
|
||||
import com.ibm.as400.access.ConnectionListener;
|
||||
import com.ibm.as400.access.SocketProperties;
|
||||
import com.centreon.connector.as400.Conf;
|
||||
import com.centreon.connector.as400.ConnectorLogger;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public abstract class AbstractHandler {
|
||||
|
||||
private static NumberFormat formatterNoDecimal;
|
||||
private static NumberFormat formatterTreeDecimal;
|
||||
|
||||
protected String host = null;
|
||||
protected String login = null;
|
||||
protected String password = null;
|
||||
|
||||
public AbstractHandler(final String host, final String login, final String password) {
|
||||
this.host = host;
|
||||
this.login = login;
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
static {
|
||||
final DecimalFormat df0 = (DecimalFormat) NumberFormat.getNumberInstance(Locale.ENGLISH);
|
||||
df0.applyPattern("#0");
|
||||
AbstractHandler.formatterNoDecimal = df0;
|
||||
|
||||
final DecimalFormat df3 = (DecimalFormat) NumberFormat.getNumberInstance(Locale.ENGLISH);
|
||||
df3.applyPattern("#0.###");
|
||||
AbstractHandler.formatterTreeDecimal = df3;
|
||||
}
|
||||
|
||||
static NumberFormat getFormatterNoDecimal() {
|
||||
return AbstractHandler.formatterNoDecimal;
|
||||
}
|
||||
|
||||
static NumberFormat getFormatterTreeDecimal() {
|
||||
return AbstractHandler.formatterTreeDecimal;
|
||||
}
|
||||
|
||||
protected AS400 getNewAs400() throws AS400SecurityException, IOException {
|
||||
final SocketProperties properties = new SocketProperties();
|
||||
properties.setSoLinger(1);
|
||||
properties.setKeepAlive(false);
|
||||
properties.setTcpNoDelay(true);
|
||||
properties.setLoginTimeout(Conf.as400LoginTimeout);
|
||||
properties.setSoTimeout(Conf.as400ReadTimeout);
|
||||
|
||||
final AS400 system = new AS400(this.host, this.login, this.password);
|
||||
system.setSocketProperties(properties);
|
||||
system.addConnectionListener(new ConnectionListener() {
|
||||
@Override
|
||||
public void connected(final ConnectionEvent event) {
|
||||
ConnectorLogger.getInstance().getLogger().debug("Connect event service : " + event.getService());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disconnected(final ConnectionEvent event) {
|
||||
ConnectorLogger.getInstance().getLogger().debug("Disconnect event service : " + event.getService());
|
||||
}
|
||||
});
|
||||
|
||||
system.validateSignon();
|
||||
|
||||
return system;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import com.ibm.as400.access.AS400;
|
||||
import com.ibm.as400.access.AS400Message;
|
||||
import com.ibm.as400.access.CommandCall;
|
||||
import com.centreon.connector.as400.ConnectorLogger;
|
||||
import com.centreon.connector.as400.check.handler.ICommandHandler;
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class CommandHandler extends AbstractHandler implements ICommandHandler {
|
||||
|
||||
public CommandHandler(final String host, final String login, final String password) {
|
||||
super(host, login, password);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseData executeCommand(final String commandName) throws Exception {
|
||||
final ResponseData data = new ResponseData();
|
||||
HashMap<String, Object> attrs = new HashMap<String, Object>();
|
||||
attrs.put("cmdName", commandName);
|
||||
attrs.put("status", "success");
|
||||
|
||||
final AS400 system = this.getNewAs400();
|
||||
|
||||
final CommandCall command = new CommandCall(system);
|
||||
String output = "";
|
||||
try {
|
||||
if (!command.run(commandName)) {
|
||||
attrs.put("status", "failed");
|
||||
attrs.put("message", "command run failed");
|
||||
}
|
||||
for (final AS400Message message : command.getMessageList()) {
|
||||
output += message.getText() + "\n";
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
attrs.put("status", "failed");
|
||||
attrs.put("message", "exception: " + e.getMessage());
|
||||
ConnectorLogger.getInstance().debug("", e);
|
||||
}
|
||||
attrs.put("output", output);
|
||||
data.getResult().add(attrs);
|
||||
|
||||
// Done with the system.
|
||||
system.disconnectService(AS400.COMMAND);
|
||||
system.disconnectAllServices();
|
||||
|
||||
return data;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
import com.ibm.as400.access.AS400SecurityException;
|
||||
import com.centreon.connector.as400.check.handler.IDiskHandler;
|
||||
import com.centreon.connector.as400.check.handler.impl.disk.QyaspolYasp0300PcmlHandler;
|
||||
import com.centreon.connector.as400.check.handler.impl.disk.Yasp0300Data;
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class DiskHandler extends AbstractHandler implements IDiskHandler {
|
||||
|
||||
private QyaspolYasp0300PcmlHandler qyaspolPcmlHandler = null;
|
||||
|
||||
public DiskHandler(final String host, final String login, final String password)
|
||||
throws AS400SecurityException, IOException {
|
||||
super(host, login, password);
|
||||
this.qyaspolPcmlHandler = new QyaspolYasp0300PcmlHandler(host, login, password);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseData listDisks(final String diskName) throws Exception {
|
||||
final ResponseData data = new ResponseData();
|
||||
|
||||
List<Yasp0300Data> disks = null;
|
||||
|
||||
if (diskName == null) {
|
||||
disks = this.qyaspolPcmlHandler.getDisksList();
|
||||
} else {
|
||||
final Yasp0300Data disk = this.qyaspolPcmlHandler.getDiskByResourceName(diskName);
|
||||
if (disk == null) {
|
||||
return new ResponseData(ResponseData.statusError, "Disk " + diskName + " not found");
|
||||
}
|
||||
disks = new ArrayList<Yasp0300Data>();
|
||||
disks.add(disk);
|
||||
}
|
||||
|
||||
/*
|
||||
* 0 - There is no unit control value (noUnitControl)
|
||||
* 1 - The disk unit is active (active)
|
||||
* 2 - The disk unit has failed (failed)
|
||||
* 3 - Some other disk unit in the disk subsystem has failed (otherDiskSubFailed)
|
||||
* 4 - There is a hardware failure within the disk subsystem that affects performance, but does not affect the function of the disk unit (hwFailurePerf)
|
||||
* 5 - There is a hardware failure within the disk subsystem that does not affect the function or performance of the disk unit (hwFailureOk)
|
||||
* 6 - The disk unit's parity protection is being rebuilt (rebuilding)
|
||||
* 7 - The disk unit is not ready (noReady)
|
||||
* 8 - The disk unit is write protected (writeProtected)
|
||||
* 9 - The disk unit is busy. (busy)
|
||||
* 10 - The disk unit is not operational (notOperational)
|
||||
* 11 - The disk unit has returned a status that is not recognizable by the system (unknownStatus)
|
||||
* 12 - The disk unit cannot be accessed (noAccess)
|
||||
* 13 - The disk unit is read/write protected (rwProtected)
|
||||
*/
|
||||
for (final Yasp0300Data disk : disks) {
|
||||
HashMap<String, Object> attrs = new HashMap<String, Object>();
|
||||
|
||||
attrs.put("status", disk.getUnitControl());
|
||||
attrs.put("name", disk.getResourceName());
|
||||
attrs.put("totalSpace", disk.getDiskCapacity() * 1024d * 1024d);
|
||||
attrs.put("reservedSpace", disk.getDiskStorageReservedForSystem() * 1024d * 1024d);
|
||||
attrs.put("freeSpace", disk.getDiskStorageAvailable() * 1024d * 1024d);
|
||||
data.getResult().add(attrs);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class FailedCheckException extends Exception {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1812060950998874570L;
|
||||
|
||||
public FailedCheckException(final String reason) {
|
||||
super(reason);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,95 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Enumeration;
|
||||
import java.util.LinkedList;
|
||||
|
||||
import com.ibm.as400.access.AS400;
|
||||
import com.ibm.as400.access.Job;
|
||||
import com.ibm.as400.access.JobList;
|
||||
import com.centreon.connector.as400.Conf;
|
||||
import com.centreon.connector.as400.ConnectorLogger;
|
||||
|
||||
class JobCache {
|
||||
private volatile LinkedList<Job> lastJobCache = null;
|
||||
private long lastRefresh = 0;
|
||||
|
||||
JobHandler handler;
|
||||
Exception lastFailException = new Exception("First check");
|
||||
|
||||
JobCache(final JobHandler handler) {
|
||||
this.handler = handler;
|
||||
}
|
||||
|
||||
Collection<Job> getJobListCache(final boolean forceRefresh) throws Exception {
|
||||
this.refreshJobListCache(forceRefresh);
|
||||
if (this.lastJobCache == null) {
|
||||
throw this.lastFailException;
|
||||
}
|
||||
return new LinkedList<Job>(this.lastJobCache);
|
||||
}
|
||||
|
||||
Collection<Job> getJobListCache() throws Exception {
|
||||
return this.getJobListCache(false);
|
||||
}
|
||||
|
||||
private void refreshJobListCache(final boolean forceRefresh) throws Exception {
|
||||
if (!(((this.lastRefresh + Conf.cacheTimeout) < System.currentTimeMillis()) || forceRefresh)) {
|
||||
return;
|
||||
}
|
||||
final AS400 system = this.handler.getNewAs400();
|
||||
|
||||
final JobList jobList = new JobList(system);
|
||||
jobList.addJobAttributeToRetrieve(Job.ACTIVE_JOB_STATUS);
|
||||
jobList.addJobAttributeToRetrieve(Job.SUBSYSTEM);
|
||||
jobList.addJobAttributeToRetrieve(Job.JOB_NAME);
|
||||
jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_ACTIVE, Boolean.TRUE);
|
||||
jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_JOBQ, Boolean.FALSE);
|
||||
jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_OUTQ, Boolean.FALSE);
|
||||
|
||||
try {
|
||||
@SuppressWarnings("unchecked")
|
||||
final Enumeration<Job> enumeration = jobList.getJobs();
|
||||
final LinkedList<Job> list = new LinkedList<Job>();
|
||||
|
||||
while (enumeration.hasMoreElements()) {
|
||||
list.add(enumeration.nextElement());
|
||||
}
|
||||
|
||||
this.lastJobCache = list;
|
||||
} catch (final Exception e) {
|
||||
this.lastFailException = new FailedCheckException("" + e.getMessage());
|
||||
this.lastJobCache = null;
|
||||
ConnectorLogger.getInstance().debug("", e);
|
||||
} finally {
|
||||
try {
|
||||
jobList.close();
|
||||
system.disconnectAllServices();
|
||||
} catch (final Exception e) {
|
||||
ConnectorLogger.getInstance().info("Job list close failed (" + system.getSystemName() + ")", e);
|
||||
}
|
||||
this.lastRefresh = System.currentTimeMillis();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
|
||||
import com.ibm.as400.access.AS400SecurityException;
|
||||
import com.ibm.as400.access.ErrorCompletingRequestException;
|
||||
import com.ibm.as400.access.Job;
|
||||
import com.ibm.as400.access.ObjectDoesNotExistException;
|
||||
import com.centreon.connector.as400.ConnectorLogger;
|
||||
import com.centreon.connector.as400.check.handler.IJobHandler;
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class JobHandler extends AbstractHandler implements IJobHandler {
|
||||
private final JobCache jobCache;
|
||||
|
||||
public JobHandler(final String host, final String login, final String password) {
|
||||
super(host, login, password);
|
||||
this.jobCache = new JobCache(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseData listJobs() throws Exception {
|
||||
final ResponseData data = new ResponseData();
|
||||
|
||||
Collection<Job> jobs = this.jobCache.getJobListCache();
|
||||
for (final Job job : jobs) {
|
||||
HashMap<String, Object> attrs = new HashMap<String, Object>();
|
||||
|
||||
attrs.put("name", job.getName());
|
||||
attrs.put("subSystem", job.getSubsystem());
|
||||
attrs.put("status", job.getStatus());
|
||||
attrs.put("activeStatus", job.getValue(Job.ACTIVE_JOB_STATUS));
|
||||
|
||||
String currentLibrary = "";
|
||||
try {
|
||||
job.getCurrentLibrary();
|
||||
} catch (final Exception e) {
|
||||
attrs.put("currentLibraryException", e.getMessage());
|
||||
}
|
||||
attrs.put("currentLibrary", currentLibrary);
|
||||
|
||||
data.getResult().add(attrs);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
|
||||
import com.ibm.as400.access.AS400;
|
||||
import com.centreon.connector.as400.check.handler.IJobQueueHandler;
|
||||
import com.centreon.connector.as400.check.handler.impl.jobqueue.Jobq0100;
|
||||
import com.centreon.connector.as400.check.handler.impl.jobqueue.Jobq0200;
|
||||
import com.centreon.connector.as400.check.handler.impl.jobqueue.Qsprjobq100Handler;
|
||||
import com.centreon.connector.as400.check.handler.impl.jobqueue.Qsprjobq200Handler;
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class JobQueueHandler extends AbstractHandler implements IJobQueueHandler {
|
||||
|
||||
public JobQueueHandler(final String host, final String login, final String password) {
|
||||
super(host, login, password);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseData getJobQueues(List<Map<String , String>> queues) throws Exception {
|
||||
final ResponseData data = new ResponseData();
|
||||
|
||||
final AS400 system = this.getNewAs400();
|
||||
final Qsprjobq200Handler qsprjobq200Handler = new Qsprjobq200Handler(system);
|
||||
|
||||
for (Map<String, String> queue : queues) {
|
||||
String name = queue.get("name");
|
||||
String library = queue.get("library");
|
||||
|
||||
if (name == null || library == null) {
|
||||
return new ResponseData(ResponseData.statusError,
|
||||
"JobQueue name/library attribute must be set");
|
||||
}
|
||||
|
||||
Jobq0200 jobq0200 = null;
|
||||
try {
|
||||
jobq0200 = qsprjobq200Handler.loadJobq0200(name, library);
|
||||
} catch (final Exception e) {
|
||||
system.disconnectAllServices();
|
||||
throw e;
|
||||
}
|
||||
|
||||
if (jobq0200 == null) {
|
||||
return new ResponseData(ResponseData.statusError,
|
||||
"JobQueue " + name + " in library " + library + " not found");
|
||||
}
|
||||
|
||||
HashMap<String, Object> attrs = new HashMap<String, Object>();
|
||||
attrs.put("name", name);
|
||||
attrs.put("library", library);
|
||||
// RELEASED, HELD
|
||||
attrs.put("status", jobq0200.getJobQueueStatus());
|
||||
attrs.put("activeJob", jobq0200.getActiveJobTotal());
|
||||
attrs.put("heldJobOnQueue", jobq0200.getHeldJobTotal());
|
||||
attrs.put("scheduledJobOnQueue", jobq0200.getScheduledJobTotal());
|
||||
data.getResult().add(attrs);
|
||||
}
|
||||
|
||||
system.disconnectAllServices();
|
||||
return data;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,101 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashMap;
|
||||
|
||||
import com.ibm.as400.access.AS400;
|
||||
import com.ibm.as400.access.AS400Exception;
|
||||
import com.ibm.as400.access.AS400SecurityException;
|
||||
import com.ibm.as400.access.ErrorCompletingRequestException;
|
||||
import com.ibm.as400.access.ObjectDescription;
|
||||
import com.ibm.as400.access.ObjectDoesNotExistException;
|
||||
import com.ibm.as400.access.ObjectList;
|
||||
import com.ibm.as400.access.RequestNotSupportedException;
|
||||
import com.ibm.as400.access.Subsystem;
|
||||
import com.centreon.connector.as400.ConnectorLogger;
|
||||
import com.centreon.connector.as400.check.handler.ISubSystemHandler;
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class SubSystemHandler extends AbstractHandler implements ISubSystemHandler {
|
||||
|
||||
public SubSystemHandler(final String host, final String login, final String password)
|
||||
throws AS400SecurityException, IOException {
|
||||
super(host, login, password);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dumpSubSystem(final Subsystem subSystem) throws AS400Exception, AS400SecurityException,
|
||||
ErrorCompletingRequestException, InterruptedException, IOException, ObjectDoesNotExistException {
|
||||
System.out.println("getCurrentActiveJobs : " + subSystem.getCurrentActiveJobs());
|
||||
System.out.println("getDescriptionText : " + subSystem.getDescriptionText());
|
||||
System.out.println("getDisplayFilePath : " + subSystem.getDisplayFilePath());
|
||||
System.out.println("getLanguageLibrary : " + subSystem.getLanguageLibrary());
|
||||
System.out.println("getLibrary : " + subSystem.getLibrary());
|
||||
System.out.println("getMaximumActiveJobs : " + subSystem.getMaximumActiveJobs());
|
||||
|
||||
subSystem.getMonitorJob();
|
||||
|
||||
System.out.println("getName : " + subSystem.getName());
|
||||
System.out.println("getObjectDescription : " + subSystem.getObjectDescription());
|
||||
System.out.println("getPath : " + subSystem.getPath());
|
||||
System.out.println("getPools (array count) : " + subSystem.getPools().length);
|
||||
System.out.println("getStatus : " + subSystem.getStatus());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseData listSubsystems() throws Exception {
|
||||
final ResponseData data = new ResponseData();
|
||||
|
||||
final AS400 system = this.getNewAs400();
|
||||
try {
|
||||
Subsystem[] list = Subsystem.listAllSubsystems(system);
|
||||
for (int i = 0; i < list.length; i++) {
|
||||
HashMap<String, Object> attrs = new HashMap<String, Object>();
|
||||
|
||||
list[i].refresh();
|
||||
attrs.put("name", list[i].getName());
|
||||
attrs.put("path", list[i].getPath());
|
||||
attrs.put("library", list[i].getLibrary());
|
||||
// *ACTIVE, *ENDING, *INACTIVE, *RESTRICTED, *STARTING
|
||||
attrs.put("status", list[i].getStatus());
|
||||
attrs.put("currentActiveJobs", list[i].getCurrentActiveJobs());
|
||||
data.getResult().add(attrs);
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
ConnectorLogger.getInstance().error("", e);
|
||||
try {
|
||||
system.disconnectAllServices();
|
||||
} catch (final Exception e1) {
|
||||
ConnectorLogger.getInstance().debug("", e);
|
||||
}
|
||||
throw new Exception(e);
|
||||
}
|
||||
system.disconnectAllServices();
|
||||
|
||||
return data;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,221 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashMap;
|
||||
|
||||
import com.ibm.as400.access.AS400Bin4;
|
||||
import com.ibm.as400.access.AS400SecurityException;
|
||||
import com.ibm.as400.access.AS400Text;
|
||||
import com.ibm.as400.access.ErrorCompletingRequestException;
|
||||
import com.ibm.as400.access.ObjectDoesNotExistException;
|
||||
import com.ibm.as400.access.ProgramCall;
|
||||
import com.ibm.as400.access.ProgramParameter;
|
||||
import com.ibm.as400.access.QSYSObjectPathName;
|
||||
import com.ibm.as400.access.SystemPool;
|
||||
import com.ibm.as400.access.SystemStatus;
|
||||
import com.centreon.connector.as400.Conf;
|
||||
import com.centreon.connector.as400.check.handler.ISystemHandler;
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class SystemHandler extends AbstractHandler implements ISystemHandler {
|
||||
private SystemStatus status = null;
|
||||
|
||||
public SystemHandler(final String host, final String login, final String password)
|
||||
throws AS400SecurityException, IOException {
|
||||
this(host, login, password, null);
|
||||
}
|
||||
|
||||
public SystemHandler(final String host, final String login, final String password, SystemStatus as400Status)
|
||||
throws AS400SecurityException, IOException {
|
||||
super(host, login, password);
|
||||
this.status = as400Status == null ? new SystemStatus(getNewAs400()) : as400Status;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
public void dumpPool(final SystemPool pool) throws UnsupportedEncodingException, AS400SecurityException,
|
||||
ErrorCompletingRequestException, InterruptedException, IOException, ObjectDoesNotExistException {
|
||||
|
||||
System.out.println("------------------------------------");
|
||||
System.out.println("name : " + pool.getName() + " | " + pool.getDescription());
|
||||
System.out.println("Identifier : " + pool.getIdentifier());
|
||||
System.out.println("ActiveToIneligible : " + pool.getActiveToIneligible()
|
||||
+ " transitions per minute, of transitions of threads from an active condition to an ineligible condition");
|
||||
System.out.println("ActiveToWait : " + pool.getActiveToWait()
|
||||
+ " transitions per minute, of transitions of threads from an active condition to a waiting condition");
|
||||
System.out.println("WaitToIneligible : " + pool.getWaitToIneligible()
|
||||
+ " transitions per minute, of transitions of threads from a waiting condition to an ineligible condition");
|
||||
System.out.println("ActivityLevel : " + pool.getActivityLevel()
|
||||
+ " maximum number of threads that can be active in the pool at any one time");
|
||||
System.out.println("DatabaseFaults : " + pool.getDatabaseFaults() + " page faults per second");
|
||||
System.out.println("DatabasePages : " + pool.getDatabasePages() + " page per second");
|
||||
System.out.println("MaximumActiveThreads : " + pool.getMaximumActiveThreads() + "(deprecated)");
|
||||
System.out.println("NonDatabaseFaults : " + pool.getNonDatabaseFaults() + " page faults per second");
|
||||
System.out.println("NonDatabasePages : " + pool.getNonDatabasePages() + " page per second");
|
||||
System.out.println("PagingOption : " + pool.getPagingOption());
|
||||
System.out.println("PoolIdentifier : " + pool.getPoolIdentifier() + "(deprecated)");
|
||||
System.out.println("PoolName : " + pool.getPoolName() + "(deprecated)");
|
||||
System.out.println("PoolSize : " + pool.getPoolSize() + " (deprecated)");
|
||||
System.out.println("ReservedSize : " + pool.getReservedSize() + " kilobytes,");
|
||||
System.out.println("Size : " + pool.getSize() + " kilobytes");
|
||||
System.out.println("SubsystemLibrary : " + pool.getSubsystemLibrary());
|
||||
System.out.println("SubsystemName : " + pool.getSubsystemName());
|
||||
System.out.println("System : " + pool.getSystem());
|
||||
|
||||
pool.getActiveToIneligible();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dumpSystem() throws AS400SecurityException, ErrorCompletingRequestException, InterruptedException,
|
||||
IOException, ObjectDoesNotExistException {
|
||||
|
||||
System.out.println("ActiveJobsInSystem : " + this.status.getActiveJobsInSystem());
|
||||
// System.out.println("PercentSystemASPUsed : " +
|
||||
// status.getPercentSystemASPUsed() + "%"); //<== stockage
|
||||
// System.out.println("getPercentProcessingUnitUsed : " +
|
||||
// status.getPercentProcessingUnitUsed() + "%");
|
||||
System.out.println("ActiveThreadsInSystem : " + this.status.getActiveThreadsInSystem() + "");
|
||||
System.out.println("BatchJobsEndedWithPrinterOutputWaitingToPrint : "
|
||||
+ this.status.getBatchJobsEndedWithPrinterOutputWaitingToPrint() + "");
|
||||
System.out.println("BatchJobsEnding : " + this.status.getBatchJobsEnding() + "");
|
||||
System.out.println("BatchJobsHeldOnJobQueue : " + this.status.getBatchJobsHeldOnJobQueue() + "");
|
||||
System.out.println("BatchJobsHeldWhileRunning : " + this.status.getBatchJobsHeldWhileRunning() + "");
|
||||
System.out.println("BatchJobsOnAHeldJobQueue : " + this.status.getBatchJobsOnAHeldJobQueue() + "");
|
||||
System.out.println("BatchJobsOnUnassignedJobQueue : " + this.status.getBatchJobsOnUnassignedJobQueue() + "");
|
||||
System.out.println("BatchJobsRunning : " + this.status.getBatchJobsRunning() + "");
|
||||
System.out.println("BatchJobsWaitingForMessage : " + this.status.getBatchJobsWaitingForMessage() + "");
|
||||
System.out.println(
|
||||
"BatchJobsWaitingToRunOrAlreadyScheduled : " + this.status.getBatchJobsWaitingToRunOrAlreadyScheduled() + "");
|
||||
System.out.println("CurrentProcessingCapacity : " + this.status.getCurrentProcessingCapacity() + "");
|
||||
System.out.println("CurrentUnprotectedStorageUsed : " + this.status.getCurrentUnprotectedStorageUsed() + "");
|
||||
System.out.println("DateAndTimeStatusGathered : " + this.status.getDateAndTimeStatusGathered() + "");
|
||||
System.out.println("ElapsedTime : " + this.status.getElapsedTime() + "");
|
||||
System.out.println("JobsInSystem : " + this.status.getJobsInSystem() + "");
|
||||
System.out.println("MainStorageSize : " + this.status.getMainStorageSize() + "");
|
||||
System.out.println("MaximumJobsInSystem : " + this.status.getMaximumJobsInSystem() + "");
|
||||
System.out.println("MaximumUnprotectedStorageUsed : " + this.status.getMaximumUnprotectedStorageUsed() + "");
|
||||
System.out.println("NumberOfPartitions : " + this.status.getNumberOfPartitions() + "");
|
||||
System.out.println("NumberOfProcessors : " + this.status.getNumberOfProcessors() + "");
|
||||
System.out.println("PartitionIdentifier : " + this.status.getPartitionIdentifier() + "");
|
||||
System.out.println(
|
||||
"PercentCurrentInteractivePerformance : " + this.status.getPercentCurrentInteractivePerformance() + "");
|
||||
System.out.println("PercentDBCapability : " + this.status.getPercentDBCapability() + "");
|
||||
System.out
|
||||
.println("PercentPermanent256MBSegmentsUsed : " + this.status.getPercentPermanent256MBSegmentsUsed() + "");
|
||||
System.out.println("PercentPermanent4GBSegmentsUsed : " + this.status.getPercentPermanent4GBSegmentsUsed() + "");
|
||||
System.out.println("PercentPermanentAddresses : " + this.status.getPercentPermanentAddresses() + "");
|
||||
System.out.println("PercentProcessingUnitUsed : " + this.status.getPercentProcessingUnitUsed() + "");
|
||||
System.out.println("PercentSharedProcessorPoolUsed : " + this.status.getPercentSharedProcessorPoolUsed() + "");
|
||||
System.out.println("PercentSystemASPUsed : " + this.status.getPercentSystemASPUsed() + "");
|
||||
System.out
|
||||
.println("PercentTemporary256MBSegmentsUsed : " + this.status.getPercentTemporary256MBSegmentsUsed() + "");
|
||||
System.out.println("PercentTemporary4GBSegmentsUsed : " + this.status.getPercentTemporary4GBSegmentsUsed() + "");
|
||||
System.out.println("PercentTemporaryAddresses : " + this.status.getPercentTemporaryAddresses() + "");
|
||||
System.out.println("PercentUncappedCPUCapacityUsed : " + this.status.getPercentUncappedCPUCapacityUsed() + "");
|
||||
System.out.println("PoolsNumber : " + this.status.getPoolsNumber() + "");
|
||||
System.out.println("ProcessorSharingAttribute : " + this.status.getProcessorSharingAttribute() + "");
|
||||
System.out.println("RestrictedStateFlag : " + this.status.getRestrictedStateFlag() + "");
|
||||
System.out.println("System : " + this.status.getSystem() + "");
|
||||
System.out.println("SystemASP : " + this.status.getSystemASP() + " Mbytes");
|
||||
System.out.println("SystemName : " + this.status.getSystemName() + "");
|
||||
System.out.println("TotalAuxiliaryStorage : " + this.status.getTotalAuxiliaryStorage() + "");
|
||||
System.out.println("UsersCurrentSignedOn : " + this.status.getUsersCurrentSignedOn() + "");
|
||||
System.out.println("UsersSignedOffWithPrinterOutputWaitingToPrint : "
|
||||
+ this.status.getUsersSignedOffWithPrinterOutputWaitingToPrint() + "");
|
||||
System.out.println("UsersSuspendedByGroupJobs : " + this.status.getUsersSuspendedByGroupJobs() + "");
|
||||
System.out.println("UsersSuspendedBySystemRequest : " + this.status.getUsersSuspendedBySystemRequest() + "");
|
||||
System.out.println("UsersTemporarilySignedOff : " + this.status.getUsersTemporarilySignedOff() + "");
|
||||
|
||||
final Enumeration<?> enumeration = this.status.getSystemPools();
|
||||
|
||||
while (enumeration.hasMoreElements()) {
|
||||
this.dumpPool((SystemPool) enumeration.nextElement());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseData getSystem() throws Exception {
|
||||
final ResponseData data = new ResponseData();
|
||||
HashMap<String, Object> attrs = new HashMap<String, Object>();
|
||||
|
||||
attrs.put("percentProcessingUnitUsed", this.status.getPercentProcessingUnitUsed());
|
||||
attrs.put("percentSystemASPUsed", this.status.getPercentSystemASPUsed());
|
||||
attrs.put("maxJobInSystem", this.status.getMaximumJobsInSystem());
|
||||
attrs.put("jobInSystem", this.status.getJobsInSystem());
|
||||
attrs.put("activeJobInSystem", this.status.getActiveJobsInSystem());
|
||||
attrs.put("activeThreadInSystem", this.status.getActiveThreadsInSystem());
|
||||
attrs.put("batchJobsEndedWithPrinterOutputWaitingToPrint", this.status
|
||||
.getBatchJobsEndedWithPrinterOutputWaitingToPrint());
|
||||
attrs.put("batchJobEnding", this.status.getBatchJobsEnding());
|
||||
attrs.put("batchJobHeldInJobQueue", this.status.getBatchJobsHeldOnJobQueue());
|
||||
attrs.put("batchJobHeldWhileRunning", this.status.getBatchJobsHeldWhileRunning());
|
||||
attrs.put("batchJobOnHeldJobQueue", this.status.getBatchJobsOnAHeldJobQueue());
|
||||
attrs.put("batchJobOnUnassignedJobQueue", this.status.getBatchJobsOnUnassignedJobQueue());
|
||||
attrs.put("batchJobRunning", this.status.getBatchJobsRunning());
|
||||
attrs.put("batchJobWaitingForMessage", this.status.getBatchJobsWaitingForMessage());
|
||||
attrs.put("batchJobWaitingToRunOrAlreadyScheduled", this.status.getBatchJobsWaitingToRunOrAlreadyScheduled());
|
||||
data.getResult().add(attrs);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public ResponseData getPageFault() throws Exception {
|
||||
final ResponseData data = new ResponseData();
|
||||
|
||||
for (final Enumeration<SystemPool> enumeration = this.status.getSystemPools(); enumeration.hasMoreElements();) {
|
||||
final SystemPool pool = enumeration.nextElement();
|
||||
HashMap<String, Object> attrs = new HashMap<String, Object>();
|
||||
|
||||
attrs.put("id", pool.getIdentifier());
|
||||
attrs.put("name", pool.getPoolName());
|
||||
attrs.put("dbPageFault", pool.getDatabaseFaults());
|
||||
attrs.put("dbPage", pool.getDatabasePages());
|
||||
attrs.put("nonDbPageFault", pool.getNonDatabaseFaults());
|
||||
attrs.put("nonDbPage",pool.getNonDatabasePages());
|
||||
data.getResult().add(attrs);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public SystemPool searchSystemPoolByName(final String poolName) throws AS400SecurityException,
|
||||
ErrorCompletingRequestException, InterruptedException, IOException, ObjectDoesNotExistException {
|
||||
for (final Enumeration<SystemPool> enumeration = this.status.getSystemPools(); enumeration.hasMoreElements();) {
|
||||
final SystemPool pool = enumeration.nextElement();
|
||||
System.out.println("poolName : " + pool.getName());
|
||||
if (poolName.equalsIgnoreCase(pool.getName())) {
|
||||
return pool;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,108 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl.disk;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import com.ibm.as400.access.AS400;
|
||||
import com.ibm.as400.access.AS400Exception;
|
||||
import com.ibm.as400.access.AS400SecurityException;
|
||||
import com.ibm.as400.access.AS400Text;
|
||||
import com.ibm.as400.access.BinaryConverter;
|
||||
import com.ibm.as400.access.ErrorCompletingRequestException;
|
||||
import com.ibm.as400.access.ObjectDoesNotExistException;
|
||||
import com.ibm.as400.access.ProgramCall;
|
||||
import com.ibm.as400.access.ProgramParameter;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class DiskInfo {
|
||||
AS400 system = null;
|
||||
|
||||
private static final ProgramParameter ERROR_CODE = new ProgramParameter(new byte[8]);
|
||||
|
||||
byte[][] receiverVariables_ = new byte[4][];
|
||||
|
||||
public DiskInfo(final AS400 system) {
|
||||
this.system = system;
|
||||
}
|
||||
|
||||
public void load() throws AS400SecurityException, ErrorCompletingRequestException, InterruptedException, IOException,
|
||||
ObjectDoesNotExistException {
|
||||
this.load(1);
|
||||
}
|
||||
|
||||
// Retrieve Disk Information (QYASRDI) API
|
||||
public void load(int format) throws AS400SecurityException, ErrorCompletingRequestException, InterruptedException,
|
||||
IOException, ObjectDoesNotExistException {
|
||||
// Check to see if the format has been loaded already.
|
||||
if (this.receiverVariables_[format] != null) {
|
||||
return;
|
||||
}
|
||||
if (format == 0) {
|
||||
format = 1;
|
||||
}
|
||||
|
||||
final int receiverVariableLength = format == 1 ? 80 : format == 2 ? 148 : 2048;
|
||||
|
||||
final AS400Text param3 = new AS400Text(8, this.system);
|
||||
// AS400Array param4 = new AS400Array(param3., system);
|
||||
|
||||
final ProgramParameter[] parameters = new ProgramParameter[] {
|
||||
// 1 Receiver variable Output Char(*)
|
||||
new ProgramParameter(receiverVariableLength),
|
||||
// 2 Length of receiver variable Input Binary(4)
|
||||
new ProgramParameter(BinaryConverter.intToByteArray(receiverVariableLength)),
|
||||
// 3 Format name Input Char(8)
|
||||
new ProgramParameter(param3.toBytes("DMIN0100")),
|
||||
// 4 Disk unit resource name array Input Array of CHAR(10)
|
||||
new ProgramParameter(("*ALL ").getBytes("ASCII")),
|
||||
// 5 Number of disk unit resource names Input Binary(4)
|
||||
new ProgramParameter(BinaryConverter.intToByteArray(1)), DiskInfo.// 6
|
||||
// Error
|
||||
// code
|
||||
// I/O
|
||||
// Char(*)
|
||||
ERROR_CODE };
|
||||
|
||||
final ProgramCall pc = new ProgramCall(this.system, "/QSYS.LIB/QYASRDI.PGM", parameters);
|
||||
// QWCRSSTS is not thread safe.
|
||||
boolean repeatRun;
|
||||
do {
|
||||
repeatRun = false;
|
||||
if (!pc.run()) {
|
||||
throw new AS400Exception(pc.getMessageList());
|
||||
}
|
||||
|
||||
this.receiverVariables_[format] = parameters[0].getOutputData();
|
||||
|
||||
final int bytesAvailable = BinaryConverter.byteArrayToInt(this.receiverVariables_[format], 0);
|
||||
final int bytesReturned = BinaryConverter.byteArrayToInt(this.receiverVariables_[format], 4);
|
||||
if (bytesReturned < bytesAvailable) {
|
||||
repeatRun = true;
|
||||
parameters[0] = new ProgramParameter(bytesAvailable);
|
||||
parameters[1] = new ProgramParameter(BinaryConverter.intToByteArray(bytesAvailable));
|
||||
}
|
||||
} while (repeatRun);
|
||||
this.receiverVariables_[0] = this.receiverVariables_[format];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl.disk;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import com.ibm.as400.access.AS400;
|
||||
import com.ibm.as400.access.AS400Exception;
|
||||
import com.ibm.as400.access.AS400SecurityException;
|
||||
import com.ibm.as400.access.AS400Text;
|
||||
import com.ibm.as400.access.BinaryConverter;
|
||||
import com.ibm.as400.access.ErrorCompletingRequestException;
|
||||
import com.ibm.as400.access.ObjectDoesNotExistException;
|
||||
import com.ibm.as400.access.ProgramCall;
|
||||
import com.ibm.as400.access.ProgramParameter;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class DiskManagement {
|
||||
AS400 system = null;
|
||||
DiskManagementSession session = null;
|
||||
|
||||
private static final ProgramParameter ERROR_CODE = new ProgramParameter(new byte[8]);
|
||||
|
||||
byte[][] receiverVariables_ = new byte[4][];
|
||||
|
||||
public DiskManagement(final AS400 system) {
|
||||
this.system = system;
|
||||
this.session = new DiskManagementSession(system);
|
||||
}
|
||||
|
||||
public void load() throws AS400SecurityException, ErrorCompletingRequestException, InterruptedException, IOException,
|
||||
ObjectDoesNotExistException {
|
||||
this.load(1);
|
||||
}
|
||||
|
||||
// Retrieve Disk Information (QYASRDI) API
|
||||
public void load(int format) throws AS400SecurityException, ErrorCompletingRequestException, InterruptedException,
|
||||
IOException, ObjectDoesNotExistException {
|
||||
this.session.load();
|
||||
// Check to see if the format has been loaded already.
|
||||
if (this.receiverVariables_[format] != null) {
|
||||
return;
|
||||
}
|
||||
if (format == 0) {
|
||||
format = 1;
|
||||
}
|
||||
|
||||
final int receiverVariableLength = format == 1 ? 80 : format == 2 ? 148 : 2048;
|
||||
|
||||
final AS400Text param3 = new AS400Text(8, this.system);
|
||||
// AS400Array param4 = new AS400Array(param3., system);
|
||||
|
||||
final ProgramParameter[] parameters = new ProgramParameter[] {
|
||||
// 1 Receiver variable Output Char(*)
|
||||
new ProgramParameter(receiverVariableLength),
|
||||
// 2 Length of receiver variable Input Binary(4)
|
||||
new ProgramParameter(BinaryConverter.intToByteArray(receiverVariableLength)),
|
||||
// 3 Format name Input Char(8)
|
||||
new ProgramParameter(param3.toBytes("DMIN0100")),
|
||||
// 4 Session handle Input Char(8)
|
||||
new ProgramParameter(this.session.getHandle()), DiskManagement.// 5
|
||||
// Error
|
||||
// code
|
||||
// I/O
|
||||
// Char(*)a
|
||||
ERROR_CODE };
|
||||
|
||||
final ProgramCall pc = new ProgramCall(this.system, "/QSYS.LIB/QYASRDI.PGM", parameters);
|
||||
// QWCRSSTS is not thread safe.
|
||||
boolean repeatRun;
|
||||
do {
|
||||
repeatRun = false;
|
||||
if (!pc.run()) {
|
||||
throw new AS400Exception(pc.getMessageList());
|
||||
}
|
||||
|
||||
this.receiverVariables_[format] = parameters[0].getOutputData();
|
||||
|
||||
final int bytesAvailable = BinaryConverter.byteArrayToInt(this.receiverVariables_[format], 0);
|
||||
final int bytesReturned = BinaryConverter.byteArrayToInt(this.receiverVariables_[format], 4);
|
||||
if (bytesReturned < bytesAvailable) {
|
||||
repeatRun = true;
|
||||
parameters[0] = new ProgramParameter(bytesAvailable);
|
||||
parameters[1] = new ProgramParameter(BinaryConverter.intToByteArray(bytesAvailable));
|
||||
}
|
||||
} while (repeatRun);
|
||||
this.receiverVariables_[0] = this.receiverVariables_[format];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl.disk;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import com.ibm.as400.access.AS400;
|
||||
import com.ibm.as400.access.AS400SecurityException;
|
||||
import com.ibm.as400.access.ErrorCompletingRequestException;
|
||||
import com.ibm.as400.access.ObjectDoesNotExistException;
|
||||
import com.ibm.as400.access.ProgramCall;
|
||||
import com.ibm.as400.access.ProgramParameter;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class DiskManagementSession {
|
||||
AS400 system = null;
|
||||
|
||||
byte[] session;
|
||||
|
||||
private static final ProgramParameter ERROR_CODE = new ProgramParameter(new byte[8]);
|
||||
|
||||
public DiskManagementSession(final AS400 system) {
|
||||
this.system = system;
|
||||
}
|
||||
|
||||
public byte[] getHandle() {
|
||||
return this.session;
|
||||
}
|
||||
|
||||
// Retrieve Disk Information (QYASRDI) API
|
||||
public void load() throws AS400SecurityException, ErrorCompletingRequestException, InterruptedException, IOException,
|
||||
ObjectDoesNotExistException {
|
||||
|
||||
final ProgramParameter[] parameters = new ProgramParameter[] {
|
||||
// 1 Session handle Output Char(8)
|
||||
new ProgramParameter(8), DiskManagementSession.// 2 Error code
|
||||
// I/O Char(*)
|
||||
ERROR_CODE };
|
||||
|
||||
new ProgramCall(this.system, "/QSYS.LIB/QYASSDMS.PGM", parameters);
|
||||
|
||||
this.session = parameters[0].getOutputData();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,136 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl.disk;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import com.ibm.as400.access.AS400;
|
||||
import com.ibm.as400.access.AS400Message;
|
||||
import com.ibm.as400.data.PcmlException;
|
||||
import com.ibm.as400.data.ProgramCallDocument;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class QyaspolYasp0100PcmlHandler {
|
||||
AS400 system = null;
|
||||
|
||||
ProgramCallDocument pcml; // com.ibm.as400.data.ProgramCallDocument
|
||||
HashMap<String, Yasp0100Data> disks = new HashMap<String, Yasp0100Data>();
|
||||
|
||||
long lastLoad = 0;
|
||||
|
||||
int totalRecord = -1;
|
||||
|
||||
int rcdsReturned = -1;
|
||||
|
||||
byte[] rqsHandle = null;
|
||||
|
||||
public QyaspolYasp0100PcmlHandler(final AS400 system) {
|
||||
this.system = system;
|
||||
|
||||
}
|
||||
|
||||
public void addYasp0100Data(final Yasp0100Data data) {
|
||||
this.disks.put(data.getResourceName(), data);
|
||||
}
|
||||
|
||||
public boolean callProgram(final String programName) throws PcmlException {
|
||||
|
||||
// Request to call the API
|
||||
final boolean rc = this.pcml.callProgram(programName);
|
||||
if (rc == false) {
|
||||
this.displayMessageError(this.pcml, programName);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void displayMessageError(final ProgramCallDocument pcml, final String programmName) throws PcmlException {
|
||||
// Retrieve list of server messages
|
||||
final AS400Message[] msgs = pcml.getMessageList(programmName);
|
||||
|
||||
// Iterate through messages and write them to standard output
|
||||
for (final AS400Message msg : msgs) {
|
||||
final String msgId = msg.getID();
|
||||
final String msgText = msg.getText();
|
||||
System.out.println(" " + msgId + " - " + msgText);
|
||||
}
|
||||
}
|
||||
|
||||
public Yasp0100Data getDiskByResourceName(final String name) {
|
||||
return this.disks.get(name);
|
||||
}
|
||||
|
||||
public List<Yasp0100Data> getDisksList() {
|
||||
final List<Yasp0100Data> list = new LinkedList<Yasp0100Data>();
|
||||
list.addAll(this.disks.values());
|
||||
return list;
|
||||
}
|
||||
|
||||
public List<String> getResourceNameList() {
|
||||
final LinkedList<String> list = new LinkedList<String>();
|
||||
list.addAll(this.disks.keySet());
|
||||
return list;
|
||||
}
|
||||
|
||||
public synchronized void load() throws PcmlException {
|
||||
if (System.currentTimeMillis() < (this.lastLoad + (10 * 1000))) {
|
||||
return;
|
||||
}
|
||||
this.lastLoad = System.currentTimeMillis();
|
||||
|
||||
this.pcml = new ProgramCallDocument(this.system, "com.centreon.connector.as400.box.system.disk.qyaspol100.pcml");
|
||||
|
||||
this.callProgram("qyaspol");
|
||||
this.loadListInfo("qyaspol");
|
||||
this.addYasp0100Data(this.loadYasp0100(this.pcml, "qyaspol"));
|
||||
|
||||
if (this.totalRecord > 1) {
|
||||
for (int i = 1; i <= this.totalRecord; i++) {
|
||||
this.pcml.setValue("qgygtle.requestHandle", this.rqsHandle);
|
||||
this.pcml.setIntValue("qgygtle.startingRcd", i);
|
||||
this.callProgram("qgygtle");
|
||||
this.addYasp0100Data(this.loadYasp0100(this.pcml, "qgygtle"));
|
||||
}
|
||||
}
|
||||
this.pcml.setValue("qgyclst.requestHandle", this.rqsHandle);
|
||||
this.callProgram("qgyclst");
|
||||
}
|
||||
|
||||
public void loadListInfo(final String programName) throws PcmlException {
|
||||
this.totalRecord = this.pcml.getIntValue(programName + ".listInfo.totalRcds");
|
||||
this.rcdsReturned = this.pcml.getIntValue(programName + ".listInfo.rcdsReturned");
|
||||
this.rqsHandle = (byte[]) this.pcml.getValue(programName + ".listInfo.rqsHandle");
|
||||
}
|
||||
|
||||
public Yasp0100Data loadYasp0100(final ProgramCallDocument pcml, final String programName) throws PcmlException {
|
||||
final int[] indices = new int[1];
|
||||
indices[0] = 0;
|
||||
|
||||
final Yasp0100Data data = new Yasp0100Data();
|
||||
data.setResourceName(pcml.getStringValue(programName + ".receiver.resourceName", indices));
|
||||
|
||||
return data;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,259 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl.disk;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import com.ibm.as400.access.AS400;
|
||||
import com.ibm.as400.access.AS400Message;
|
||||
import com.ibm.as400.access.AS400SecurityException;
|
||||
import com.ibm.as400.access.ConnectionEvent;
|
||||
import com.ibm.as400.access.ConnectionListener;
|
||||
import com.ibm.as400.access.SocketProperties;
|
||||
import com.ibm.as400.data.PcmlException;
|
||||
import com.ibm.as400.data.ProgramCallDocument;
|
||||
import com.centreon.connector.as400.Conf;
|
||||
import com.centreon.connector.as400.ConnectorLogger;
|
||||
import com.centreon.connector.as400.check.handler.impl.FailedCheckException;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class QyaspolYasp0300PcmlHandler {
|
||||
String pcmlFile = "qyaspol300.pcml";
|
||||
|
||||
// AS400 system = null;
|
||||
|
||||
ProgramCallDocument pcml; // com.ibm.as400.data.ProgramCallDocument
|
||||
HashMap<String, Yasp0300Data> currentDiskLoad = new HashMap<String, Yasp0300Data>();
|
||||
HashMap<String, Yasp0300Data> cachedDiskList = null;
|
||||
Exception lastFailException = new Exception("First check");
|
||||
|
||||
long lastLoad = 0;
|
||||
|
||||
int totalRecord = -1;
|
||||
|
||||
int rcdsReturned = -1;
|
||||
|
||||
byte[] rqsHandle = null;
|
||||
|
||||
String host = null;
|
||||
String login = null;
|
||||
String password = null;
|
||||
|
||||
public QyaspolYasp0300PcmlHandler(final String host, final String login, final String password) {
|
||||
this.host = host;
|
||||
this.login = login;
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
public void addYasp0300Data(final Yasp0300Data data) {
|
||||
this.currentDiskLoad.put(data.getResourceName(), data);
|
||||
}
|
||||
|
||||
public boolean callProgram(final String programName) throws PcmlException {
|
||||
|
||||
// Request to call the API
|
||||
final boolean rc = this.pcml.callProgram(programName);
|
||||
if (rc == false) {
|
||||
this.displayMessageError(this.pcml, programName);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void displayMessageError(final ProgramCallDocument pcml, final String programmName) throws PcmlException {
|
||||
// Retrieve list of server messages
|
||||
final AS400Message[] msgs = pcml.getMessageList(programmName);
|
||||
|
||||
// Iterate through messages and write them to standard output
|
||||
for (final AS400Message msg : msgs) {
|
||||
final String msgId = msg.getID();
|
||||
final String msgText = msg.getText();
|
||||
System.out.println(" " + msgId + " - " + msgText);
|
||||
}
|
||||
}
|
||||
|
||||
public Yasp0300Data getDiskByResourceName(final String name) throws Exception {
|
||||
this.load();
|
||||
if (this.cachedDiskList == null) {
|
||||
throw this.lastFailException;
|
||||
}
|
||||
return this.cachedDiskList.get(name);
|
||||
}
|
||||
|
||||
public List<Yasp0300Data> getDisksList() throws Exception {
|
||||
this.load();
|
||||
if (this.cachedDiskList == null) {
|
||||
throw this.lastFailException;
|
||||
}
|
||||
final List<Yasp0300Data> list = new LinkedList<Yasp0300Data>();
|
||||
list.addAll(this.cachedDiskList.values());
|
||||
return list;
|
||||
}
|
||||
|
||||
public List<String> getResourceNameList() throws Exception {
|
||||
this.load();
|
||||
if (this.cachedDiskList == null) {
|
||||
throw this.lastFailException;
|
||||
}
|
||||
final LinkedList<String> list = new LinkedList<String>();
|
||||
list.addAll(this.cachedDiskList.keySet());
|
||||
return list;
|
||||
}
|
||||
|
||||
public void load() throws PcmlException {
|
||||
if (!((this.lastLoad + Conf.cacheTimeout) < System.currentTimeMillis())) {
|
||||
return;
|
||||
}
|
||||
|
||||
AS400 system = null;
|
||||
try {
|
||||
this.currentDiskLoad = new HashMap<String, Yasp0300Data>();
|
||||
|
||||
system = this.getNewAs400();
|
||||
this.pcml = new ProgramCallDocument(system, this.pcmlFile);
|
||||
|
||||
this.callProgram("qyaspol");
|
||||
this.loadListInfo("qyaspol");
|
||||
this.addYasp0300Data(this.loadYasp0300(this.pcml, "qyaspol"));
|
||||
|
||||
if (this.totalRecord > 1) {
|
||||
for (int i = 1; i <= this.totalRecord; i++) {
|
||||
this.pcml.setValue("qgygtle.requestHandle", this.rqsHandle);
|
||||
this.pcml.setIntValue("qgygtle.startingRcd", i);
|
||||
this.callProgram("qgygtle");
|
||||
this.addYasp0300Data(this.loadYasp0300(this.pcml, "qgygtle"));
|
||||
}
|
||||
}
|
||||
|
||||
this.pcml.setValue("qgyclst.requestHandle", this.rqsHandle);
|
||||
this.callProgram("qgyclst");
|
||||
|
||||
this.cachedDiskList = this.currentDiskLoad;
|
||||
this.lastLoad = System.currentTimeMillis();
|
||||
|
||||
} catch (final com.ibm.as400.data.PcmlException e) {
|
||||
if (e.getCause() != null) {
|
||||
new FailedCheckException("" + e.getCause().getMessage());
|
||||
} else {
|
||||
new FailedCheckException("" + e.getMessage());
|
||||
}
|
||||
this.cachedDiskList = null;
|
||||
ConnectorLogger.getInstance().debug("", e);
|
||||
} catch (final java.net.UnknownHostException e) {
|
||||
this.lastFailException = new FailedCheckException("Invalid hostname for server: " + e.getMessage());
|
||||
this.cachedDiskList = null;
|
||||
ConnectorLogger.getInstance().debug("", e);
|
||||
} catch (final Exception e) {
|
||||
System.out.println("plop " + e.getMessage());
|
||||
this.lastFailException = new FailedCheckException("" + e.getMessage());
|
||||
this.cachedDiskList = null;
|
||||
ConnectorLogger.getInstance().debug("", e);
|
||||
} finally {
|
||||
this.lastLoad = System.currentTimeMillis();
|
||||
if (system != null) {
|
||||
system.disconnectAllServices();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void loadListInfo(final String programName) throws PcmlException {
|
||||
this.totalRecord = this.pcml.getIntValue(programName + ".listInfo.totalRcds");
|
||||
this.rcdsReturned = this.pcml.getIntValue(programName + ".listInfo.rcdsReturned");
|
||||
this.rqsHandle = (byte[]) this.pcml.getValue(programName + ".listInfo.rqsHandle");
|
||||
}
|
||||
|
||||
public Yasp0300Data loadYasp0300(final ProgramCallDocument pcml, final String programName) throws PcmlException {
|
||||
final int[] indices = new int[1];
|
||||
indices[0] = 0;
|
||||
|
||||
final Yasp0300Data data = new Yasp0300Data();
|
||||
|
||||
data.setAspNumber(pcml.getIntValue(programName + ".receiver.aspNumber", indices));
|
||||
data.setDiskType(pcml.getStringValue(programName + ".receiver.diskType", indices));
|
||||
data.setDiskModel(pcml.getStringValue(programName + ".receiver.diskModel", indices));
|
||||
data.setDiskSerialNumber(pcml.getStringValue(programName + ".receiver.diskSerialNumber", indices));
|
||||
data.setResourceName(pcml.getStringValue(programName + ".receiver.resourceName", indices));
|
||||
data.setDiskUnitNumber(pcml.getIntValue(programName + ".receiver.diskUnitNumber", indices));
|
||||
data.setDiskCapacity(pcml.getIntValue(programName + ".receiver.diskCapacity", indices));
|
||||
data.setDiskStorageAvailable(pcml.getIntValue(programName + ".receiver.diskStorageAvailable", indices));
|
||||
data.setDiskStorageReservedForSystem(
|
||||
pcml.getIntValue(programName + ".receiver.diskStorageReservedForSystem", indices));
|
||||
data.setMirroredUnitProtected(pcml.getStringValue(programName + ".receiver.mirroredUnitProtected", indices));
|
||||
data.setMirroredUnitReported(pcml.getStringValue(programName + ".receiver.mirroredUnitReported", indices));
|
||||
data.setMirroredUnitStatus(pcml.getStringValue(programName + ".receiver.mirroredUnitStatus", indices));
|
||||
data.setReserved(pcml.getStringValue(programName + ".receiver.reserved", indices));
|
||||
data.setUnitControl(pcml.getIntValue(programName + ".receiver.unitControl", indices));
|
||||
data.setBlockTransferredToMainStorage(
|
||||
pcml.getIntValue(programName + ".receiver.blockTransferredToMainStorage", indices));
|
||||
data.setBlockTransferredFromMainStorage(
|
||||
pcml.getIntValue(programName + ".receiver.blockTransferredFromMainStorage", indices));
|
||||
data.setRequestForDataToMainStorage(
|
||||
pcml.getIntValue(programName + ".receiver.requestForDataToMainStorage", indices));
|
||||
data.setRequestForDataForMainStorage(
|
||||
pcml.getIntValue(programName + ".receiver.requestForDataForMainStorage", indices));
|
||||
data.setRequestForPermanentFromMainStorage(
|
||||
pcml.getIntValue(programName + ".receiver.requestForPermanentFromMainStorage", indices));
|
||||
data.setSampleCount(pcml.getIntValue(programName + ".receiver.sampleCount", indices));
|
||||
data.setNotBusyCount(pcml.getIntValue(programName + ".receiver.notBusyCount", indices));
|
||||
data.setCompressionStatus(pcml.getStringValue(programName + ".receiver.compressionStatus", indices));
|
||||
data.setDiskProtectionType(pcml.getStringValue(programName + ".receiver.diskProtectionType", indices));
|
||||
data.setCompressedUnit(pcml.getStringValue(programName + ".receiver.compressedUnit", indices));
|
||||
data.setStorageAllocationRestrictedUnit(
|
||||
pcml.getStringValue(programName + ".receiver.storageAllocationRestrictedUnit", indices));
|
||||
data.setAvailabilityParitySetUnit(
|
||||
pcml.getStringValue(programName + ".receiver.availabilityParitySetUnit", indices));
|
||||
data.setMultipleConnectionUnit(pcml.getStringValue(programName + ".receiver.multipleConnectionUnit", indices));
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
protected AS400 getNewAs400() throws AS400SecurityException, IOException {
|
||||
final SocketProperties properties = new SocketProperties();
|
||||
properties.setSoLinger(1);
|
||||
properties.setKeepAlive(false);
|
||||
properties.setTcpNoDelay(true);
|
||||
properties.setLoginTimeout(Conf.as400LoginTimeout);
|
||||
properties.setSoTimeout(Conf.as400ReadTimeout);
|
||||
|
||||
final AS400 system = new AS400(this.host, this.login, this.password);
|
||||
system.setSocketProperties(properties);
|
||||
system.addConnectionListener(new ConnectionListener() {
|
||||
@Override
|
||||
public void connected(final ConnectionEvent event) {
|
||||
ConnectorLogger.getInstance().getLogger().debug("Connect event service : " + event.getService());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disconnected(final ConnectionEvent event) {
|
||||
ConnectorLogger.getInstance().getLogger().debug("Disconnect event service : " + event.getService());
|
||||
}
|
||||
});
|
||||
|
||||
system.validateSignon();
|
||||
|
||||
return system;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl.disk;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
class Yasp0100Data {
|
||||
private int aspNumber;
|
||||
String resourceName;
|
||||
|
||||
public int getAspNumber() {
|
||||
return this.aspNumber;
|
||||
}
|
||||
|
||||
public String getResourceName() {
|
||||
return this.resourceName;
|
||||
}
|
||||
|
||||
public void setAspNumber(final int aspNumber) {
|
||||
this.aspNumber = aspNumber;
|
||||
}
|
||||
|
||||
public void setResourceName(final String resourceName) {
|
||||
this.resourceName = resourceName;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,317 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl.disk;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class Yasp0300Data {
|
||||
private int aspNumber;
|
||||
private String diskType;
|
||||
private String diskModel;
|
||||
private String diskSerialNumber;
|
||||
private String resourceName;
|
||||
private int diskUnitNumber;
|
||||
private int diskCapacity;
|
||||
private int diskStorageAvailable;
|
||||
private int diskStorageReservedForSystem;
|
||||
private String mirroredUnitProtected;
|
||||
private String mirroredUnitReported;
|
||||
private String mirroredUnitStatus;
|
||||
private String reserved;
|
||||
private int unitControl;
|
||||
private int blockTransferredToMainStorage;
|
||||
private int blockTransferredFromMainStorage;
|
||||
private int requestForDataToMainStorage;
|
||||
private int requestForDataForMainStorage;
|
||||
private int requestForPermanentFromMainStorage;
|
||||
private int sampleCount;
|
||||
private int notBusyCount;
|
||||
private String compressionStatus;
|
||||
private String diskProtectionType;
|
||||
private String compressedUnit;
|
||||
private String storageAllocationRestrictedUnit;
|
||||
private String availabilityParitySetUnit;
|
||||
private String multipleConnectionUnit;
|
||||
|
||||
public int getAspNumber() {
|
||||
return this.aspNumber;
|
||||
}
|
||||
|
||||
public String getAvailabilityParitySetUnit() {
|
||||
return this.availabilityParitySetUnit;
|
||||
}
|
||||
|
||||
public int getBlockTransferredFromMainStorage() {
|
||||
return this.blockTransferredFromMainStorage;
|
||||
}
|
||||
|
||||
public int getBlockTransferredToMainStorage() {
|
||||
return this.blockTransferredToMainStorage;
|
||||
}
|
||||
|
||||
public String getCompressedUnit() {
|
||||
return this.compressedUnit;
|
||||
}
|
||||
|
||||
public String getCompressionStatus() {
|
||||
return this.compressionStatus;
|
||||
}
|
||||
|
||||
public int getDiskCapacity() {
|
||||
return this.diskCapacity;
|
||||
}
|
||||
|
||||
public String getDiskModel() {
|
||||
return this.diskModel;
|
||||
}
|
||||
|
||||
public String getDiskProtectionType() {
|
||||
return this.diskProtectionType;
|
||||
}
|
||||
|
||||
public String getDiskSerialNumber() {
|
||||
return this.diskSerialNumber;
|
||||
}
|
||||
|
||||
public int getDiskStorageAvailable() {
|
||||
return this.diskStorageAvailable;
|
||||
}
|
||||
|
||||
public int getDiskStorageReservedForSystem() {
|
||||
return this.diskStorageReservedForSystem;
|
||||
}
|
||||
|
||||
public String getDiskType() {
|
||||
return this.diskType;
|
||||
}
|
||||
|
||||
public int getDiskUnitNumber() {
|
||||
return this.diskUnitNumber;
|
||||
}
|
||||
|
||||
public String getMirroredUnitProtected() {
|
||||
return this.mirroredUnitProtected;
|
||||
}
|
||||
|
||||
public String getMirroredUnitReported() {
|
||||
return this.mirroredUnitReported;
|
||||
}
|
||||
|
||||
public String getMirroredUnitStatus() {
|
||||
return this.mirroredUnitStatus;
|
||||
}
|
||||
|
||||
public String getMultipleConnectionUnit() {
|
||||
return this.multipleConnectionUnit;
|
||||
}
|
||||
|
||||
public int getNotBusyCount() {
|
||||
return this.notBusyCount;
|
||||
}
|
||||
|
||||
public int getRequestForDataForMainStorage() {
|
||||
return this.requestForDataForMainStorage;
|
||||
}
|
||||
|
||||
public int getRequestForDataToMainStorage() {
|
||||
return this.requestForDataToMainStorage;
|
||||
}
|
||||
|
||||
public int getRequestForPermanentFromMainStorage() {
|
||||
return this.requestForPermanentFromMainStorage;
|
||||
}
|
||||
|
||||
public String getReserved() {
|
||||
return this.reserved;
|
||||
}
|
||||
|
||||
public String getResourceName() {
|
||||
return this.resourceName;
|
||||
}
|
||||
|
||||
public int getSampleCount() {
|
||||
return this.sampleCount;
|
||||
}
|
||||
|
||||
public String getStorageAllocationRestrictedUnit() {
|
||||
return this.storageAllocationRestrictedUnit;
|
||||
}
|
||||
|
||||
public int getUnitControl() {
|
||||
return this.unitControl;
|
||||
}
|
||||
|
||||
public String getUnitControlString() {
|
||||
/*
|
||||
* 0 There is no unit control value. 1 The disk unit is active. 2 The disk unit
|
||||
* has failed. 3 Some other disk unit in the disk subsystem has failed. 4 There
|
||||
* is a hardware failure within the disk subsystem that affects performance, but
|
||||
* does not affect the function of the disk unit. 5 There is a hardware failure
|
||||
* within the disk subsystem that does not affect the function or performance of
|
||||
* the disk unit. 6 The disk unit's parity protection is being rebuilt. 7 The
|
||||
* disk unit is not ready. 8 The disk unit is write protected. 9 The disk unit
|
||||
* is busy. 10 The disk unit is not operational. 11 The disk unit has returned a
|
||||
* status that is not recognizable by the system. 12 The disk unit cannot be
|
||||
* accessed. 13 The disk unit is read/write protected.
|
||||
*/
|
||||
if (this.getUnitControl() == 0) {
|
||||
return "There is no unit control value";
|
||||
} else if (this.getUnitControl() == 1) {
|
||||
return "The disk unit is active";
|
||||
} else if (this.getUnitControl() == 2) {
|
||||
return "The disk unit has failed";
|
||||
} else if (this.getUnitControl() == 3) {
|
||||
return "Some other disk unit in the disk subsystem has failed";
|
||||
} else if (this.getUnitControl() == 4) {
|
||||
return "There is a hardware failure within the disk subsystem that affects performance, but does not affect the function of the disk unit";
|
||||
} else if (this.getUnitControl() == 5) {
|
||||
return "There is a hardware failure within the disk subsystem that does not affect the function or performance of the disk unit";
|
||||
} else if (this.getUnitControl() == 6) {
|
||||
return "The disk unit's parity protection is being rebuilt";
|
||||
} else if (this.getUnitControl() == 7) {
|
||||
return "The disk unit is not ready";
|
||||
} else if (this.getUnitControl() == 8) {
|
||||
return "The disk unit is write protected";
|
||||
} else if (this.getUnitControl() == 9) {
|
||||
return "The disk unit is busy";
|
||||
} else if (this.getUnitControl() == 10) {
|
||||
return "The disk unit is not operational";
|
||||
} else if (this.getUnitControl() == 11) {
|
||||
return "The disk unit has returned a status that is not recognizable by the system";
|
||||
} else if (this.getUnitControl() == 12) {
|
||||
return "The disk unit cannot be accessed";
|
||||
} else if (this.getUnitControl() == 13) {
|
||||
return "The disk unit is read/write protected";
|
||||
} else {
|
||||
return "state unknown (" + this.getUnitControl() + ")";
|
||||
}
|
||||
}
|
||||
|
||||
public void setAspNumber(final int aspNumber) {
|
||||
this.aspNumber = aspNumber;
|
||||
}
|
||||
|
||||
public void setAvailabilityParitySetUnit(final String availabilityParitySetUnit) {
|
||||
this.availabilityParitySetUnit = availabilityParitySetUnit;
|
||||
}
|
||||
|
||||
public void setBlockTransferredFromMainStorage(final int blockTransferredFromMainStorage) {
|
||||
this.blockTransferredFromMainStorage = blockTransferredFromMainStorage;
|
||||
}
|
||||
|
||||
public void setBlockTransferredToMainStorage(final int blockTransferredToMainStorage) {
|
||||
this.blockTransferredToMainStorage = blockTransferredToMainStorage;
|
||||
}
|
||||
|
||||
public void setCompressedUnit(final String compressedUnit) {
|
||||
this.compressedUnit = compressedUnit;
|
||||
}
|
||||
|
||||
public void setCompressionStatus(final String compressionStatus) {
|
||||
this.compressionStatus = compressionStatus;
|
||||
}
|
||||
|
||||
public void setDiskCapacity(final int diskCapacity) {
|
||||
this.diskCapacity = diskCapacity;
|
||||
}
|
||||
|
||||
public void setDiskModel(final String diskModel) {
|
||||
this.diskModel = diskModel;
|
||||
}
|
||||
|
||||
public void setDiskProtectionType(final String diskProtectionType) {
|
||||
this.diskProtectionType = diskProtectionType;
|
||||
}
|
||||
|
||||
public void setDiskSerialNumber(final String diskSerialNumber) {
|
||||
this.diskSerialNumber = diskSerialNumber;
|
||||
}
|
||||
|
||||
public void setDiskStorageAvailable(final int diskStorageAvailable) {
|
||||
this.diskStorageAvailable = diskStorageAvailable;
|
||||
}
|
||||
|
||||
public void setDiskStorageReservedForSystem(final int diskStorageReservedForSystem) {
|
||||
this.diskStorageReservedForSystem = diskStorageReservedForSystem;
|
||||
}
|
||||
|
||||
public void setDiskType(final String diskType) {
|
||||
this.diskType = diskType;
|
||||
}
|
||||
|
||||
public void setDiskUnitNumber(final int diskUnitNumber) {
|
||||
this.diskUnitNumber = diskUnitNumber;
|
||||
}
|
||||
|
||||
public void setMirroredUnitProtected(final String mirroredUnitProtected) {
|
||||
this.mirroredUnitProtected = mirroredUnitProtected;
|
||||
}
|
||||
|
||||
public void setMirroredUnitReported(final String mirroredUnitReported) {
|
||||
this.mirroredUnitReported = mirroredUnitReported;
|
||||
}
|
||||
|
||||
public void setMirroredUnitStatus(final String mirroredUnitStatus) {
|
||||
this.mirroredUnitStatus = mirroredUnitStatus;
|
||||
}
|
||||
|
||||
public void setMultipleConnectionUnit(final String multipleConnectionUnit) {
|
||||
this.multipleConnectionUnit = multipleConnectionUnit;
|
||||
}
|
||||
|
||||
public void setNotBusyCount(final int notBusyCount) {
|
||||
this.notBusyCount = notBusyCount;
|
||||
}
|
||||
|
||||
public void setRequestForDataForMainStorage(final int requestForDataForMainStorage) {
|
||||
this.requestForDataForMainStorage = requestForDataForMainStorage;
|
||||
}
|
||||
|
||||
public void setRequestForDataToMainStorage(final int requestForDataToMainStorage) {
|
||||
this.requestForDataToMainStorage = requestForDataToMainStorage;
|
||||
}
|
||||
|
||||
public void setRequestForPermanentFromMainStorage(final int requestForPermanentFromMainStorage) {
|
||||
this.requestForPermanentFromMainStorage = requestForPermanentFromMainStorage;
|
||||
}
|
||||
|
||||
public void setReserved(final String reserved) {
|
||||
this.reserved = reserved;
|
||||
}
|
||||
|
||||
public void setResourceName(final String resourceName) {
|
||||
this.resourceName = resourceName;
|
||||
}
|
||||
|
||||
public void setSampleCount(final int sampleCount) {
|
||||
this.sampleCount = sampleCount;
|
||||
}
|
||||
|
||||
public void setStorageAllocationRestrictedUnit(final String storageAllocationRestrictedUnit) {
|
||||
this.storageAllocationRestrictedUnit = storageAllocationRestrictedUnit;
|
||||
}
|
||||
|
||||
public void setUnitControl(final int unitControl) {
|
||||
this.unitControl = unitControl;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,153 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl.jobqueue;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class Jobq0100 {
|
||||
private int bytesReturned;
|
||||
private int bytesAvailable;
|
||||
private String jobqName;
|
||||
private String jobqLibName;
|
||||
private String operatorControlled;
|
||||
private String authorityCheck;
|
||||
private int numberOfJob;
|
||||
private String jobQueueStatus;
|
||||
private String subSystemName;
|
||||
private String textDescription;
|
||||
private String subSystemLibName;
|
||||
private int sequenceNumber;
|
||||
private int maximumActive;
|
||||
private int currentActive;
|
||||
|
||||
public int getBytesReturned() {
|
||||
return this.bytesReturned;
|
||||
}
|
||||
|
||||
public void setBytesReturned(final int bytesReturned) {
|
||||
this.bytesReturned = bytesReturned;
|
||||
}
|
||||
|
||||
public int getBytesAvailable() {
|
||||
return this.bytesAvailable;
|
||||
}
|
||||
|
||||
public void setBytesAvailable(final int bytesAvailable) {
|
||||
this.bytesAvailable = bytesAvailable;
|
||||
}
|
||||
|
||||
public String getJobqName() {
|
||||
return this.jobqName;
|
||||
}
|
||||
|
||||
public void setJobqName(final String jobqName) {
|
||||
this.jobqName = jobqName;
|
||||
}
|
||||
|
||||
public String getJobqLibName() {
|
||||
return this.jobqLibName;
|
||||
}
|
||||
|
||||
public void setJobqLibName(final String jobqLibName) {
|
||||
this.jobqLibName = jobqLibName;
|
||||
}
|
||||
|
||||
public String getOperatorControlled() {
|
||||
return this.operatorControlled;
|
||||
}
|
||||
|
||||
public void setOperatorControlled(final String operatorControlled) {
|
||||
this.operatorControlled = operatorControlled;
|
||||
}
|
||||
|
||||
public String getAuthorityCheck() {
|
||||
return this.authorityCheck;
|
||||
}
|
||||
|
||||
public void setAuthorityCheck(final String authorityCheck) {
|
||||
this.authorityCheck = authorityCheck;
|
||||
}
|
||||
|
||||
public int getNumberOfJob() {
|
||||
return this.numberOfJob;
|
||||
}
|
||||
|
||||
public void setNumberOfJob(final int numberOfJob) {
|
||||
this.numberOfJob = numberOfJob;
|
||||
}
|
||||
|
||||
public String getJobQueueStatus() {
|
||||
return this.jobQueueStatus;
|
||||
}
|
||||
|
||||
public void setJobQueueStatus(final String jobQueueStatus) {
|
||||
this.jobQueueStatus = jobQueueStatus;
|
||||
}
|
||||
|
||||
public String getSubSystemName() {
|
||||
return this.subSystemName;
|
||||
}
|
||||
|
||||
public void setSubSystemName(final String subSystemName) {
|
||||
this.subSystemName = subSystemName;
|
||||
}
|
||||
|
||||
public String getTextDescription() {
|
||||
return this.textDescription;
|
||||
}
|
||||
|
||||
public void setTextDescription(final String textDescription) {
|
||||
this.textDescription = textDescription;
|
||||
}
|
||||
|
||||
public String getSubSystemLibName() {
|
||||
return this.subSystemLibName;
|
||||
}
|
||||
|
||||
public void setSubSystemLibName(final String subSystemLibName) {
|
||||
this.subSystemLibName = subSystemLibName;
|
||||
}
|
||||
|
||||
public int getSequenceNumber() {
|
||||
return this.sequenceNumber;
|
||||
}
|
||||
|
||||
public void setSequenceNumber(final int sequenceNumber) {
|
||||
this.sequenceNumber = sequenceNumber;
|
||||
}
|
||||
|
||||
public int getMaximumActive() {
|
||||
return this.maximumActive;
|
||||
}
|
||||
|
||||
public void setMaximumActive(final int maximumActive) {
|
||||
this.maximumActive = maximumActive;
|
||||
}
|
||||
|
||||
public int getCurrentActive() {
|
||||
return this.currentActive;
|
||||
}
|
||||
|
||||
public void setCurrentActive(final int currentActive) {
|
||||
this.currentActive = currentActive;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,403 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl.jobqueue;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class Jobq0200 extends Jobq0100 {
|
||||
|
||||
private int maxActiveJobPriority1;
|
||||
private int maxActiveJobPriority2;
|
||||
private int maxActiveJobPriority3;
|
||||
private int maxActiveJobPriority4;
|
||||
private int maxActiveJobPriority5;
|
||||
private int maxActiveJobPriority6;
|
||||
private int maxActiveJobPriority7;
|
||||
private int maxActiveJobPriority8;
|
||||
private int maxActiveJobPriority9;
|
||||
|
||||
private int activeJobPriority0;
|
||||
private int activeJobPriority1;
|
||||
private int activeJobPriority2;
|
||||
private int activeJobPriority3;
|
||||
private int activeJobPriority4;
|
||||
private int activeJobPriority5;
|
||||
private int activeJobPriority6;
|
||||
private int activeJobPriority7;
|
||||
private int activeJobPriority8;
|
||||
private int activeJobPriority9;
|
||||
|
||||
private int scheduledJobOnQueuePriority0;
|
||||
private int scheduledJobOnQueuePriority1;
|
||||
private int scheduledJobOnQueuePriority2;
|
||||
private int scheduledJobOnQueuePriority3;
|
||||
private int scheduledJobOnQueuePriority4;
|
||||
private int scheduledJobOnQueuePriority5;
|
||||
private int scheduledJobOnQueuePriority6;
|
||||
private int scheduledJobOnQueuePriority7;
|
||||
private int scheduledJobOnQueuePriority8;
|
||||
private int scheduledJobOnQueuePriority9;
|
||||
|
||||
private int heldJobOnQueuePriority0;
|
||||
private int heldJobOnQueuePriority1;
|
||||
private int heldJobOnQueuePriority2;
|
||||
private int heldJobOnQueuePriority3;
|
||||
private int heldJobOnQueuePriority4;
|
||||
private int heldJobOnQueuePriority5;
|
||||
private int heldJobOnQueuePriority6;
|
||||
private int heldJobOnQueuePriority7;
|
||||
private int heldJobOnQueuePriority8;
|
||||
private int heldJobOnQueuePriority9;
|
||||
|
||||
public int getActiveJobTotal() {
|
||||
return this.activeJobPriority0 + this.activeJobPriority1 + this.activeJobPriority2 + this.activeJobPriority3
|
||||
+ this.activeJobPriority4 + this.activeJobPriority5 + this.activeJobPriority6 + this.activeJobPriority7
|
||||
+ this.activeJobPriority8 + this.activeJobPriority9;
|
||||
}
|
||||
|
||||
public int getScheduledJobTotal() {
|
||||
return this.scheduledJobOnQueuePriority0 + this.scheduledJobOnQueuePriority1 + this.scheduledJobOnQueuePriority2
|
||||
+ this.scheduledJobOnQueuePriority3 + this.scheduledJobOnQueuePriority4 + this.scheduledJobOnQueuePriority5
|
||||
+ this.scheduledJobOnQueuePriority6 + this.scheduledJobOnQueuePriority7 + this.scheduledJobOnQueuePriority8
|
||||
+ this.scheduledJobOnQueuePriority9;
|
||||
}
|
||||
|
||||
public int getHeldJobTotal() {
|
||||
return this.heldJobOnQueuePriority0 + this.heldJobOnQueuePriority1 + this.heldJobOnQueuePriority2
|
||||
+ this.heldJobOnQueuePriority3 + this.heldJobOnQueuePriority4 + this.heldJobOnQueuePriority5
|
||||
+ this.heldJobOnQueuePriority6 + this.heldJobOnQueuePriority7 + this.heldJobOnQueuePriority8
|
||||
+ this.heldJobOnQueuePriority9;
|
||||
}
|
||||
|
||||
public int getMaxActiveJobPriority1() {
|
||||
return this.maxActiveJobPriority1;
|
||||
}
|
||||
|
||||
public void setMaxActiveJobPriority1(final int maxActiveJobPriority1) {
|
||||
this.maxActiveJobPriority1 = maxActiveJobPriority1;
|
||||
}
|
||||
|
||||
public int getMaxActiveJobPriority2() {
|
||||
return this.maxActiveJobPriority2;
|
||||
}
|
||||
|
||||
public void setMaxActiveJobPriority2(final int maxActiveJobPriority2) {
|
||||
this.maxActiveJobPriority2 = maxActiveJobPriority2;
|
||||
}
|
||||
|
||||
public int getMaxActiveJobPriority3() {
|
||||
return this.maxActiveJobPriority3;
|
||||
}
|
||||
|
||||
public void setMaxActiveJobPriority3(final int maxActiveJobPriority3) {
|
||||
this.maxActiveJobPriority3 = maxActiveJobPriority3;
|
||||
}
|
||||
|
||||
public int getMaxActiveJobPriority4() {
|
||||
return this.maxActiveJobPriority4;
|
||||
}
|
||||
|
||||
public void setMaxActiveJobPriority4(final int maxActiveJobPriority4) {
|
||||
this.maxActiveJobPriority4 = maxActiveJobPriority4;
|
||||
}
|
||||
|
||||
public int getMaxActiveJobPriority5() {
|
||||
return this.maxActiveJobPriority5;
|
||||
}
|
||||
|
||||
public void setMaxActiveJobPriority5(final int maxActiveJobPriority5) {
|
||||
this.maxActiveJobPriority5 = maxActiveJobPriority5;
|
||||
}
|
||||
|
||||
public int getMaxActiveJobPriority6() {
|
||||
return this.maxActiveJobPriority6;
|
||||
}
|
||||
|
||||
public void setMaxActiveJobPriority6(final int maxActiveJobPriority6) {
|
||||
this.maxActiveJobPriority6 = maxActiveJobPriority6;
|
||||
}
|
||||
|
||||
public int getMaxActiveJobPriority7() {
|
||||
return this.maxActiveJobPriority7;
|
||||
}
|
||||
|
||||
public void setMaxActiveJobPriority7(final int maxActiveJobPriority7) {
|
||||
this.maxActiveJobPriority7 = maxActiveJobPriority7;
|
||||
}
|
||||
|
||||
public int getMaxActiveJobPriority8() {
|
||||
return this.maxActiveJobPriority8;
|
||||
}
|
||||
|
||||
public void setMaxActiveJobPriority8(final int maxActiveJobPriority8) {
|
||||
this.maxActiveJobPriority8 = maxActiveJobPriority8;
|
||||
}
|
||||
|
||||
public int getMaxActiveJobPriority9() {
|
||||
return this.maxActiveJobPriority9;
|
||||
}
|
||||
|
||||
public void setMaxActiveJobPriority9(final int maxActiveJobPriority9) {
|
||||
this.maxActiveJobPriority9 = maxActiveJobPriority9;
|
||||
}
|
||||
|
||||
public int getActiveJobPriority1() {
|
||||
return this.activeJobPriority1;
|
||||
}
|
||||
|
||||
public void setActiveJobPriority1(final int activeJobPriority1) {
|
||||
this.activeJobPriority1 = activeJobPriority1;
|
||||
}
|
||||
|
||||
public int getActiveJobPriority2() {
|
||||
return this.activeJobPriority2;
|
||||
}
|
||||
|
||||
public void setActiveJobPriority2(final int activeJobPriority2) {
|
||||
this.activeJobPriority2 = activeJobPriority2;
|
||||
}
|
||||
|
||||
public int getActiveJobPriority3() {
|
||||
return this.activeJobPriority3;
|
||||
}
|
||||
|
||||
public void setActiveJobPriority3(final int activeJobPriority3) {
|
||||
this.activeJobPriority3 = activeJobPriority3;
|
||||
}
|
||||
|
||||
public int getActiveJobPriority4() {
|
||||
return this.activeJobPriority4;
|
||||
}
|
||||
|
||||
public void setActiveJobPriority4(final int activeJobPriority4) {
|
||||
this.activeJobPriority4 = activeJobPriority4;
|
||||
}
|
||||
|
||||
public int getActiveJobPriority5() {
|
||||
return this.activeJobPriority5;
|
||||
}
|
||||
|
||||
public void setActiveJobPriority5(final int activeJobPriority5) {
|
||||
this.activeJobPriority5 = activeJobPriority5;
|
||||
}
|
||||
|
||||
public int getActiveJobPriority6() {
|
||||
return this.activeJobPriority6;
|
||||
}
|
||||
|
||||
public void setActiveJobPriority6(final int activeJobPriority6) {
|
||||
this.activeJobPriority6 = activeJobPriority6;
|
||||
}
|
||||
|
||||
public int getActiveJobPriority7() {
|
||||
return this.activeJobPriority7;
|
||||
}
|
||||
|
||||
public void setActiveJobPriority7(final int activeJobPriority7) {
|
||||
this.activeJobPriority7 = activeJobPriority7;
|
||||
}
|
||||
|
||||
public int getActiveJobPriority8() {
|
||||
return this.activeJobPriority8;
|
||||
}
|
||||
|
||||
public void setActiveJobPriority8(final int activeJobPriority8) {
|
||||
this.activeJobPriority8 = activeJobPriority8;
|
||||
}
|
||||
|
||||
public int getActiveJobPriority9() {
|
||||
return this.activeJobPriority9;
|
||||
}
|
||||
|
||||
public void setActiveJobPriority9(final int activeJobPriority9) {
|
||||
this.activeJobPriority9 = activeJobPriority9;
|
||||
}
|
||||
|
||||
public int getScheduledJobOnQueuePriority1() {
|
||||
return this.scheduledJobOnQueuePriority1;
|
||||
}
|
||||
|
||||
public void setScheduledJobOnQueuePriority1(final int scheduledJobOnQueuePriority1) {
|
||||
this.scheduledJobOnQueuePriority1 = scheduledJobOnQueuePriority1;
|
||||
}
|
||||
|
||||
public int getScheduledJobOnQueuePriority2() {
|
||||
return this.scheduledJobOnQueuePriority2;
|
||||
}
|
||||
|
||||
public void setScheduledJobOnQueuePriority2(final int scheduledJobOnQueuePriority2) {
|
||||
this.scheduledJobOnQueuePriority2 = scheduledJobOnQueuePriority2;
|
||||
}
|
||||
|
||||
public int getScheduledJobOnQueuePriority3() {
|
||||
return this.scheduledJobOnQueuePriority3;
|
||||
}
|
||||
|
||||
public void setScheduledJobOnQueuePriority3(final int scheduledJobOnQueuePriority3) {
|
||||
this.scheduledJobOnQueuePriority3 = scheduledJobOnQueuePriority3;
|
||||
}
|
||||
|
||||
public int getScheduledJobOnQueuePriority4() {
|
||||
return this.scheduledJobOnQueuePriority4;
|
||||
}
|
||||
|
||||
public void setScheduledJobOnQueuePriority4(final int scheduledJobOnQueuePriority4) {
|
||||
this.scheduledJobOnQueuePriority4 = scheduledJobOnQueuePriority4;
|
||||
}
|
||||
|
||||
public int getScheduledJobOnQueuePriority5() {
|
||||
return this.scheduledJobOnQueuePriority5;
|
||||
}
|
||||
|
||||
public void setScheduledJobOnQueuePriority5(final int scheduledJobOnQueuePriority5) {
|
||||
this.scheduledJobOnQueuePriority5 = scheduledJobOnQueuePriority5;
|
||||
}
|
||||
|
||||
public int getScheduledJobOnQueuePriority6() {
|
||||
return this.scheduledJobOnQueuePriority6;
|
||||
}
|
||||
|
||||
public void setScheduledJobOnQueuePriority6(final int scheduledJobOnQueuePriority6) {
|
||||
this.scheduledJobOnQueuePriority6 = scheduledJobOnQueuePriority6;
|
||||
}
|
||||
|
||||
public int getScheduledJobOnQueuePriority7() {
|
||||
return this.scheduledJobOnQueuePriority7;
|
||||
}
|
||||
|
||||
public void setScheduledJobOnQueuePriority7(final int scheduledJobOnQueuePriority7) {
|
||||
this.scheduledJobOnQueuePriority7 = scheduledJobOnQueuePriority7;
|
||||
}
|
||||
|
||||
public int getScheduledJobOnQueuePriority8() {
|
||||
return this.scheduledJobOnQueuePriority8;
|
||||
}
|
||||
|
||||
public void setScheduledJobOnQueuePriority8(final int scheduledJobOnQueuePriority8) {
|
||||
this.scheduledJobOnQueuePriority8 = scheduledJobOnQueuePriority8;
|
||||
}
|
||||
|
||||
public int getScheduledJobOnQueuePriority9() {
|
||||
return this.scheduledJobOnQueuePriority9;
|
||||
}
|
||||
|
||||
public void setScheduledJobOnQueuePriority9(final int scheduledJobOnQueuePriority9) {
|
||||
this.scheduledJobOnQueuePriority9 = scheduledJobOnQueuePriority9;
|
||||
}
|
||||
|
||||
public int getHeldJobOnQueuePriority1() {
|
||||
return this.heldJobOnQueuePriority1;
|
||||
}
|
||||
|
||||
public void setHeldJobOnQueuePriority1(final int heldJobOnQueuePriority1) {
|
||||
this.heldJobOnQueuePriority1 = heldJobOnQueuePriority1;
|
||||
}
|
||||
|
||||
public int getHeldJobOnQueuePriority2() {
|
||||
return this.heldJobOnQueuePriority2;
|
||||
}
|
||||
|
||||
public void setHeldJobOnQueuePriority2(final int heldJobOnQueuePriority2) {
|
||||
this.heldJobOnQueuePriority2 = heldJobOnQueuePriority2;
|
||||
}
|
||||
|
||||
public int getHeldJobOnQueuePriority3() {
|
||||
return this.heldJobOnQueuePriority3;
|
||||
}
|
||||
|
||||
public void setHeldJobOnQueuePriority3(final int heldJobOnQueuePriority3) {
|
||||
this.heldJobOnQueuePriority3 = heldJobOnQueuePriority3;
|
||||
}
|
||||
|
||||
public int getHeldJobOnQueuePriority4() {
|
||||
return this.heldJobOnQueuePriority4;
|
||||
}
|
||||
|
||||
public void setHeldJobOnQueuePriority4(final int heldJobOnQueuePriority4) {
|
||||
this.heldJobOnQueuePriority4 = heldJobOnQueuePriority4;
|
||||
}
|
||||
|
||||
public int getHeldJobOnQueuePriority5() {
|
||||
return this.heldJobOnQueuePriority5;
|
||||
}
|
||||
|
||||
public void setHeldJobOnQueuePriority5(final int heldJobOnQueuePriority5) {
|
||||
this.heldJobOnQueuePriority5 = heldJobOnQueuePriority5;
|
||||
}
|
||||
|
||||
public int getHeldJobOnQueuePriority6() {
|
||||
return this.heldJobOnQueuePriority6;
|
||||
}
|
||||
|
||||
public void setHeldJobOnQueuePriority6(final int heldJobOnQueuePriority6) {
|
||||
this.heldJobOnQueuePriority6 = heldJobOnQueuePriority6;
|
||||
}
|
||||
|
||||
public int getHeldJobOnQueuePriority7() {
|
||||
return this.heldJobOnQueuePriority7;
|
||||
}
|
||||
|
||||
public void setHeldJobOnQueuePriority7(final int heldJobOnQueuePriority7) {
|
||||
this.heldJobOnQueuePriority7 = heldJobOnQueuePriority7;
|
||||
}
|
||||
|
||||
public int getHeldJobOnQueuePriority8() {
|
||||
return this.heldJobOnQueuePriority8;
|
||||
}
|
||||
|
||||
public void setHeldJobOnQueuePriority8(final int heldJobOnQueuePriority8) {
|
||||
this.heldJobOnQueuePriority8 = heldJobOnQueuePriority8;
|
||||
}
|
||||
|
||||
public int getHeldJobOnQueuePriority9() {
|
||||
return this.heldJobOnQueuePriority9;
|
||||
}
|
||||
|
||||
public void setHeldJobOnQueuePriority9(final int heldJobOnQueuePriority9) {
|
||||
this.heldJobOnQueuePriority9 = heldJobOnQueuePriority9;
|
||||
}
|
||||
|
||||
public int getActiveJobPriority0() {
|
||||
return this.activeJobPriority0;
|
||||
}
|
||||
|
||||
public void setActiveJobPriority0(final int activeJobPriority0) {
|
||||
this.activeJobPriority0 = activeJobPriority0;
|
||||
}
|
||||
|
||||
public int getScheduledJobOnQueuePriority0() {
|
||||
return this.scheduledJobOnQueuePriority0;
|
||||
}
|
||||
|
||||
public void setScheduledJobOnQueuePriority0(final int scheduledJobOnQueuePriority0) {
|
||||
this.scheduledJobOnQueuePriority0 = scheduledJobOnQueuePriority0;
|
||||
}
|
||||
|
||||
public int getHeldJobOnQueuePriority0() {
|
||||
return this.heldJobOnQueuePriority0;
|
||||
}
|
||||
|
||||
public void setHeldJobOnQueuePriority0(final int heldJobOnQueuePriority0) {
|
||||
this.heldJobOnQueuePriority0 = heldJobOnQueuePriority0;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,91 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl.jobqueue;
|
||||
|
||||
import com.ibm.as400.access.AS400;
|
||||
import com.ibm.as400.access.AS400Message;
|
||||
import com.ibm.as400.data.ProgramCallDocument;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class Qsprjobq100Handler {
|
||||
private final String pcmlFile = "qsprjobq100.pcml";
|
||||
|
||||
private AS400 system = null;
|
||||
|
||||
public Qsprjobq100Handler(final AS400 system) {
|
||||
this.system = system;
|
||||
}
|
||||
|
||||
private void displayMessageError(final ProgramCallDocument pcml, final String programmName) throws Exception {
|
||||
final AS400Message[] msgs = pcml.getMessageList(programmName);
|
||||
|
||||
for (final AS400Message msg : msgs) {
|
||||
final String msgId = msg.getID();
|
||||
final String msgText = msg.getText();
|
||||
throw new Exception("" + msgId + " - " + msgText);
|
||||
}
|
||||
}
|
||||
|
||||
public Jobq0100 loadJobq0100(final String jobqName, final String lib) throws Exception {
|
||||
|
||||
String qualifiedQueueName = jobqName;
|
||||
while (qualifiedQueueName.length() < 10) {
|
||||
qualifiedQueueName += " ";
|
||||
}
|
||||
qualifiedQueueName += lib;
|
||||
|
||||
final ProgramCallDocument pcml = new ProgramCallDocument(this.system, this.pcmlFile);
|
||||
|
||||
pcml.setValue("qsprjobq.receiverLength", pcml.getOutputsize("qsprjobq.receiver"));
|
||||
pcml.setValue("qsprjobq.qualifiedJobQueueName", qualifiedQueueName);
|
||||
// pcml.setValue("qsprjobq.qualifiedJobQueueName", jobqName);
|
||||
|
||||
// If return code is false, we received messages from the server
|
||||
if (pcml.callProgram("qsprjobq") == false) {
|
||||
this.displayMessageError(pcml, "qsprjobq");
|
||||
} else {
|
||||
final int[] indices = new int[1];
|
||||
indices[0] = 0;
|
||||
|
||||
final Jobq0100 jobq0100 = new Jobq0100();
|
||||
|
||||
jobq0100.setAuthorityCheck(pcml.getStringValue("qsprjobq.receiver.authorityCheck", indices));
|
||||
jobq0100.setBytesAvailable(pcml.getIntValue("qsprjobq.receiver.bytesAvailable", indices));
|
||||
jobq0100.setBytesReturned(pcml.getIntValue("qsprjobq.receiver.bytesReturned", indices));
|
||||
jobq0100.setCurrentActive(pcml.getIntValue("qsprjobq.receiver.currentActive", indices));
|
||||
jobq0100.setJobqLibName(pcml.getStringValue("qsprjobq.receiver.jobqLibName", indices));
|
||||
jobq0100.setJobqName(pcml.getStringValue("qsprjobq.receiver.jobqName", indices));
|
||||
jobq0100.setJobQueueStatus(pcml.getStringValue("qsprjobq.receiver.jobQueueStatus", indices));
|
||||
jobq0100.setMaximumActive(pcml.getIntValue("qsprjobq.receiver.maximumActive", indices));
|
||||
jobq0100.setNumberOfJob(pcml.getIntValue("qsprjobq.receiver.numberOfJob", indices));
|
||||
jobq0100.setOperatorControlled(pcml.getStringValue("qsprjobq.receiver.operatorControlled", indices));
|
||||
jobq0100.setSequenceNumber(pcml.getIntValue("qsprjobq.receiver.sequenceNumber", indices));
|
||||
jobq0100.setSubSystemLibName(pcml.getStringValue("qsprjobq.receiver.subSystemLibName", indices));
|
||||
jobq0100.setSubSystemName(pcml.getStringValue("qsprjobq.receiver.subSystemName", indices));
|
||||
jobq0100.setTextDescription(pcml.getStringValue("qsprjobq.receiver.textDescription", indices));
|
||||
|
||||
return jobq0100;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,144 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.impl.jobqueue;
|
||||
|
||||
import com.ibm.as400.access.AS400;
|
||||
import com.ibm.as400.access.AS400Message;
|
||||
import com.ibm.as400.data.ProgramCallDocument;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class Qsprjobq200Handler {
|
||||
private final String pcmlFile = "qsprjobq200.pcml";
|
||||
|
||||
private AS400 system = null;
|
||||
|
||||
public Qsprjobq200Handler(final AS400 system) {
|
||||
this.system = system;
|
||||
}
|
||||
|
||||
private void displayMessageError(final ProgramCallDocument pcml, final String programmName) throws Exception {
|
||||
final AS400Message[] msgs = pcml.getMessageList(programmName);
|
||||
|
||||
for (final AS400Message msg : msgs) {
|
||||
final String msgId = msg.getID();
|
||||
final String msgText = msg.getText();
|
||||
throw new Exception("" + msgId + " - " + msgText);
|
||||
}
|
||||
}
|
||||
|
||||
public Jobq0200 loadJobq0200(final String jobqName, final String lib) throws Exception {
|
||||
|
||||
String qualifiedQueueName = jobqName;
|
||||
while (qualifiedQueueName.length() < 10) {
|
||||
qualifiedQueueName += " ";
|
||||
}
|
||||
qualifiedQueueName += lib;
|
||||
|
||||
final ProgramCallDocument pcml = new ProgramCallDocument(this.system, this.pcmlFile);
|
||||
|
||||
pcml.setValue("qsprjobq.receiverLength", pcml.getOutputsize("qsprjobq.receiver"));
|
||||
pcml.setValue("qsprjobq.qualifiedJobQueueName", qualifiedQueueName);
|
||||
// pcml.setValue("qsprjobq.qualifiedJobQueueName", jobqName);
|
||||
|
||||
// If return code is false, we received messages from the server
|
||||
if (pcml.callProgram("qsprjobq") == false) {
|
||||
this.displayMessageError(pcml, "qsprjobq");
|
||||
} else {
|
||||
final int[] indices = new int[1];
|
||||
indices[0] = 0;
|
||||
|
||||
final Jobq0200 jobq0200 = new Jobq0200();
|
||||
|
||||
jobq0200.setBytesReturned(pcml.getIntValue("qsprjobq.receiver.bytesReturned", indices));
|
||||
jobq0200.setBytesAvailable(pcml.getIntValue("qsprjobq.receiver.bytesAvailable", indices));
|
||||
jobq0200.setJobqName(pcml.getStringValue("qsprjobq.receiver.jobqName", indices));
|
||||
jobq0200.setJobqLibName(pcml.getStringValue("qsprjobq.receiver.jobqLibName", indices));
|
||||
jobq0200.setOperatorControlled(pcml.getStringValue("qsprjobq.receiver.operatorControlled", indices));
|
||||
jobq0200.setAuthorityCheck(pcml.getStringValue("qsprjobq.receiver.authorityCheck", indices));
|
||||
jobq0200.setNumberOfJob(pcml.getIntValue("qsprjobq.receiver.numberOfJob", indices));
|
||||
jobq0200.setJobQueueStatus(pcml.getStringValue("qsprjobq.receiver.jobQueueStatus", indices));
|
||||
jobq0200.setSubSystemName(pcml.getStringValue("qsprjobq.receiver.subSystemName", indices));
|
||||
jobq0200.setSubSystemLibName(pcml.getStringValue("qsprjobq.receiver.subSystemLibName", indices));
|
||||
jobq0200.setTextDescription(pcml.getStringValue("qsprjobq.receiver.textDescription", indices));
|
||||
jobq0200.setSequenceNumber(pcml.getIntValue("qsprjobq.receiver.sequenceNumber", indices));
|
||||
jobq0200.setMaximumActive(pcml.getIntValue("qsprjobq.receiver.maximumActive", indices));
|
||||
jobq0200.setCurrentActive(pcml.getIntValue("qsprjobq.receiver.currentActive", indices));
|
||||
|
||||
jobq0200.setMaxActiveJobPriority1(pcml.getIntValue("qsprjobq.receiver.maxActiveJobPriority1", indices));
|
||||
jobq0200.setMaxActiveJobPriority2(pcml.getIntValue("qsprjobq.receiver.maxActiveJobPriority2", indices));
|
||||
jobq0200.setMaxActiveJobPriority3(pcml.getIntValue("qsprjobq.receiver.maxActiveJobPriority3", indices));
|
||||
jobq0200.setMaxActiveJobPriority4(pcml.getIntValue("qsprjobq.receiver.maxActiveJobPriority4", indices));
|
||||
jobq0200.setMaxActiveJobPriority5(pcml.getIntValue("qsprjobq.receiver.maxActiveJobPriority5", indices));
|
||||
jobq0200.setMaxActiveJobPriority6(pcml.getIntValue("qsprjobq.receiver.maxActiveJobPriority6", indices));
|
||||
jobq0200.setMaxActiveJobPriority7(pcml.getIntValue("qsprjobq.receiver.maxActiveJobPriority7", indices));
|
||||
jobq0200.setMaxActiveJobPriority8(pcml.getIntValue("qsprjobq.receiver.maxActiveJobPriority8", indices));
|
||||
jobq0200.setMaxActiveJobPriority9(pcml.getIntValue("qsprjobq.receiver.maxActiveJobPriority9", indices));
|
||||
|
||||
jobq0200.setActiveJobPriority0(pcml.getIntValue("qsprjobq.receiver.activeJobPriority0", indices));
|
||||
jobq0200.setActiveJobPriority1(pcml.getIntValue("qsprjobq.receiver.activeJobPriority1", indices));
|
||||
jobq0200.setActiveJobPriority2(pcml.getIntValue("qsprjobq.receiver.activeJobPriority2", indices));
|
||||
jobq0200.setActiveJobPriority3(pcml.getIntValue("qsprjobq.receiver.activeJobPriority3", indices));
|
||||
jobq0200.setActiveJobPriority4(pcml.getIntValue("qsprjobq.receiver.activeJobPriority4", indices));
|
||||
jobq0200.setActiveJobPriority5(pcml.getIntValue("qsprjobq.receiver.activeJobPriority5", indices));
|
||||
jobq0200.setActiveJobPriority6(pcml.getIntValue("qsprjobq.receiver.activeJobPriority6", indices));
|
||||
jobq0200.setActiveJobPriority7(pcml.getIntValue("qsprjobq.receiver.activeJobPriority7", indices));
|
||||
jobq0200.setActiveJobPriority8(pcml.getIntValue("qsprjobq.receiver.activeJobPriority8", indices));
|
||||
jobq0200.setActiveJobPriority9(pcml.getIntValue("qsprjobq.receiver.activeJobPriority9", indices));
|
||||
|
||||
jobq0200
|
||||
.setScheduledJobOnQueuePriority0(pcml.getIntValue("qsprjobq.receiver.scheduledJobOnQueuePriority0", indices));
|
||||
jobq0200
|
||||
.setScheduledJobOnQueuePriority1(pcml.getIntValue("qsprjobq.receiver.scheduledJobOnQueuePriority1", indices));
|
||||
jobq0200
|
||||
.setScheduledJobOnQueuePriority2(pcml.getIntValue("qsprjobq.receiver.scheduledJobOnQueuePriority2", indices));
|
||||
jobq0200
|
||||
.setScheduledJobOnQueuePriority3(pcml.getIntValue("qsprjobq.receiver.scheduledJobOnQueuePriority3", indices));
|
||||
jobq0200
|
||||
.setScheduledJobOnQueuePriority4(pcml.getIntValue("qsprjobq.receiver.scheduledJobOnQueuePriority4", indices));
|
||||
jobq0200
|
||||
.setScheduledJobOnQueuePriority5(pcml.getIntValue("qsprjobq.receiver.scheduledJobOnQueuePriority5", indices));
|
||||
jobq0200
|
||||
.setScheduledJobOnQueuePriority6(pcml.getIntValue("qsprjobq.receiver.scheduledJobOnQueuePriority6", indices));
|
||||
jobq0200
|
||||
.setScheduledJobOnQueuePriority7(pcml.getIntValue("qsprjobq.receiver.scheduledJobOnQueuePriority7", indices));
|
||||
jobq0200
|
||||
.setScheduledJobOnQueuePriority8(pcml.getIntValue("qsprjobq.receiver.scheduledJobOnQueuePriority8", indices));
|
||||
jobq0200
|
||||
.setScheduledJobOnQueuePriority9(pcml.getIntValue("qsprjobq.receiver.scheduledJobOnQueuePriority9", indices));
|
||||
|
||||
jobq0200.setHeldJobOnQueuePriority0(pcml.getIntValue("qsprjobq.receiver.heldJobOnQueuePriority0", indices));
|
||||
jobq0200.setHeldJobOnQueuePriority1(pcml.getIntValue("qsprjobq.receiver.heldJobOnQueuePriority1", indices));
|
||||
jobq0200.setHeldJobOnQueuePriority2(pcml.getIntValue("qsprjobq.receiver.heldJobOnQueuePriority2", indices));
|
||||
jobq0200.setHeldJobOnQueuePriority3(pcml.getIntValue("qsprjobq.receiver.heldJobOnQueuePriority3", indices));
|
||||
jobq0200.setHeldJobOnQueuePriority4(pcml.getIntValue("qsprjobq.receiver.heldJobOnQueuePriority4", indices));
|
||||
jobq0200.setHeldJobOnQueuePriority5(pcml.getIntValue("qsprjobq.receiver.heldJobOnQueuePriority5", indices));
|
||||
jobq0200.setHeldJobOnQueuePriority6(pcml.getIntValue("qsprjobq.receiver.heldJobOnQueuePriority6", indices));
|
||||
jobq0200.setHeldJobOnQueuePriority7(pcml.getIntValue("qsprjobq.receiver.heldJobOnQueuePriority7", indices));
|
||||
jobq0200.setHeldJobOnQueuePriority8(pcml.getIntValue("qsprjobq.receiver.heldJobOnQueuePriority8", indices));
|
||||
jobq0200.setHeldJobOnQueuePriority9(pcml.getIntValue("qsprjobq.receiver.heldJobOnQueuePriority9", indices));
|
||||
|
||||
return jobq0200;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,289 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.msgqueue;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Map;
|
||||
|
||||
import com.ibm.as400.access.AS400;
|
||||
import com.ibm.as400.access.AS400SecurityException;
|
||||
import com.ibm.as400.access.ErrorCompletingRequestException;
|
||||
import com.ibm.as400.access.MessageQueue;
|
||||
import com.ibm.as400.access.ObjectDoesNotExistException;
|
||||
import com.ibm.as400.access.QueuedMessage;
|
||||
import com.centreon.connector.as400.ConnectorLogger;
|
||||
import com.centreon.connector.as400.check.handler.ICachedMessageQueueHandler;
|
||||
import com.centreon.connector.as400.check.handler.impl.AbstractHandler;
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
import com.centreon.connector.as400.utils.BlowFishUtils;
|
||||
|
||||
public class CachedMessageQueueHandler extends AbstractHandler implements ICachedMessageQueueHandler {
|
||||
|
||||
static int PAGINATE_SIZE = 50;
|
||||
private static Map<String, QueuedMessage> LAST_MESSAGES = java.util.Collections
|
||||
.synchronizedMap(new HashMap<String, QueuedMessage>());
|
||||
|
||||
public static String dumpLightMessage(QueuedMessage m) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("[").append(m.getDate().getTime()).append("] ").append("(").append(m.getSeverity()).append(") ")
|
||||
.append(m.getID()).append(":").append(m.getText().replace('|', ' ')).append(" [JobName: ")
|
||||
.append(m.getFromJobName()).append("][JobNumber: ").append(m.getFromJobNumber()).append("][User: ")
|
||||
.append(m.getUser()).append("]");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public static String dumpMessage(QueuedMessage m) {
|
||||
final String newLine = "\n";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("[").append(m.getDate().getTime()).append("] ").append("(").append(m.getSeverity()).append(") ")
|
||||
.append(m.getID()).append(":").append(m.getText().replace('|', ' ')).append(" [JobName: ")
|
||||
.append(m.getFromJobName()).append("][JobNumber: ").append(m.getFromJobNumber()).append("][User: ")
|
||||
.append(m.getUser()).append("]");
|
||||
|
||||
sb.append("getModificationDate: ").append(m.getModificationDate()).append(newLine).append("getAlertOption: ")
|
||||
.append(m.getAlertOption()).append(newLine).append("getCurrentUser: ").append(m.getCurrentUser())
|
||||
.append(newLine).append("getDataCcsidConversionStatusIndicator: ")
|
||||
.append(m.getDataCcsidConversionStatusIndicator()).append(newLine).append("getDefaultReply: ")
|
||||
.append(m.getDefaultReply()).append(newLine).append("getFileName: ").append(m.getFileName()).append(newLine)
|
||||
.append("getFromJobName: ").append(m.getFromJobName()).append(newLine).append("getFromJobNumber: ")
|
||||
.append(m.getFromJobNumber()).append(newLine).append("getFromProgram: ").append(m.getFromProgram())
|
||||
.append(newLine).append("getLibraryName: ").append(m.getLibraryName()).append(newLine).append("getQueue: ")
|
||||
.append(m.getQueue()).append(newLine).append("getMessage: ").append(m.getMessage()).append(newLine)
|
||||
.append("getMessageFileLibrarySpecified: ").append(m.getMessageFileLibrarySpecified()).append(newLine)
|
||||
.append("getMessageHelp: ").append(m.getMessageHelp()).append(newLine).append("getMessageHelpFormat: ")
|
||||
.append(m.getMessageHelpFormat()).append(newLine).append("getMessageHelpReplacement: ")
|
||||
.append(m.getMessageHelpReplacement()).append(newLine).append("getMessageHelpReplacementandFormat: ")
|
||||
.append(m.getMessageHelpReplacementandFormat()).append(newLine).append("getPath: ").append(m.getPath())
|
||||
.append(newLine).append("getReceivingModuleName: ").append(m.getReceivingModuleName()).append(newLine)
|
||||
.append("getReceivingProcedureName: ").append(m.getReceivingProcedureName()).append(newLine)
|
||||
.append("getReceivingProgramInstructionNumber: ").append(m.getReceivingProgramInstructionNumber())
|
||||
.append(newLine).append("getReceivingProgramName: ").append(m.getReceivingProgramName()).append(newLine)
|
||||
.append("getReceivingType: ").append(m.getReceivingType()).append(newLine).append("getReplyStatus: ")
|
||||
.append(m.getReplyStatus()).append(newLine).append("getRequestStatus: ").append(m.getRequestStatus())
|
||||
.append(newLine).append("getReceiverStatementNumbers: ").append(m.getReceiverStatementNumbers()).append(newLine)
|
||||
.append("getRequestLevel: ").append(m.getRequestLevel()).append(newLine).append("getSenderType: ")
|
||||
.append(m.getSenderType()).append(newLine).append("getSendingModuleName: ").append(m.getSendingModuleName())
|
||||
.append(newLine).append("getSendingProcedureName: ").append(m.getSendingProcedureName()).append(newLine)
|
||||
.append("getSendingProgramInstructionNumber: ").append(m.getSendingProgramInstructionNumber()).append(newLine)
|
||||
.append("getSendingProgramName: ").append(m.getSendingProgramName()).append(newLine).append("getSendingType: ")
|
||||
.append(m.getSendingType()).append(newLine).append("getSendingUserProfile: ").append(m.getSendingUserProfile())
|
||||
.append(newLine).append("getSendingStatementNumbers: ").append(m.getSendingStatementNumbers()).append(newLine)
|
||||
.append("getSeverity: ").append(m.getSeverity()).append(newLine).append("getSubstitutionData: ")
|
||||
.append(m.getSubstitutionData()).append(newLine).append("getCcsidCodedCharacterSetIdentifierForData: ")
|
||||
.append(m.getCcsidCodedCharacterSetIdentifierForData()).append(newLine)
|
||||
.append("getCcsidCodedCharacterSetIdentifierForText: ").append(m.getCcsidCodedCharacterSetIdentifierForText())
|
||||
.append(newLine).append("getCcsidconversionStatusIndicatorForData: ")
|
||||
.append(m.getCcsidconversionStatusIndicatorForData()).append(newLine)
|
||||
.append("getCcsidConversionStatusIndicatorForText: ").append(m.getCcsidConversionStatusIndicatorForText())
|
||||
.append(newLine);
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public CachedMessageQueueHandler(final String host, final String login, final String password) {
|
||||
super(host, login, password);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseData getNewMessageInMessageQueue(final String messageQueuePath, final String messageIdfilterPattern,
|
||||
final int minSeverityLevel, final int maxSeverityLevel)
|
||||
throws Exception {
|
||||
|
||||
StringBuilder dbIdentifier = new StringBuilder();
|
||||
dbIdentifier.append(messageQueuePath).append(messageIdfilterPattern).append(minSeverityLevel)
|
||||
.append(maxSeverityLevel);
|
||||
|
||||
final Collection<QueuedMessage> messages = this.synchronizeDB(messageQueuePath, dbIdentifier.toString());
|
||||
|
||||
if (messages == null) {
|
||||
return new ResponseData(ResponseData.statusOk, "Initialisation of the local DB");
|
||||
}
|
||||
|
||||
final ResponseData data = new ResponseData();
|
||||
|
||||
for (final QueuedMessage message : messages) {
|
||||
if ((message.getSeverity() >= minSeverityLevel) && (message.getSeverity() < maxSeverityLevel)) {
|
||||
if ("A".equals(message.getReplyStatus())) {
|
||||
// The message has been acknowledge already and we don't take it into account
|
||||
continue;
|
||||
}
|
||||
|
||||
final String messageId = message.getID();
|
||||
if (messageIdfilterPattern != null && !messageId.matches(messageIdfilterPattern)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
HashMap<String, Object> attrs = new HashMap<String, Object>();
|
||||
attrs.put("id", messageId);
|
||||
attrs.put("text", message.getText());
|
||||
attrs.put("severity", message.getSeverity());
|
||||
attrs.put("date", message.getDate().getTimeInMillis());
|
||||
attrs.put("jobName", message.getFromJobName());
|
||||
attrs.put("jobNumber", message.getFromJobNumber());
|
||||
attrs.put("user", message.getUser());
|
||||
data.getResult().add(attrs);
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Synchronize DB and return the new messages
|
||||
*
|
||||
* @param messageQueuePath
|
||||
* @return the new messages
|
||||
* @throws AS400SecurityException
|
||||
* @throws IOException
|
||||
* @throws ErrorCompletingRequestException
|
||||
* @throws InterruptedException
|
||||
* @throws ObjectDoesNotExistException
|
||||
*/
|
||||
private Collection<QueuedMessage> synchronizeDB(final String messageQueuePath, final String dbIdentifier)
|
||||
throws AS400SecurityException, IOException, ErrorCompletingRequestException, InterruptedException,
|
||||
ObjectDoesNotExistException {
|
||||
|
||||
String key = BlowFishUtils.encrypt(host + login + dbIdentifier);
|
||||
QueuedMessage previousLastMessage = CachedMessageQueueHandler.LAST_MESSAGES.get(key);
|
||||
|
||||
final AS400 system = this.getNewAs400();
|
||||
final MessageQueue queue = new MessageQueue(system, messageQueuePath);
|
||||
queue.setListDirection(false);
|
||||
|
||||
Collection<QueuedMessage> newMessages = null;
|
||||
|
||||
if (previousLastMessage == null) {
|
||||
final QueuedMessage[] messages = queue.getMessages(0, 1);
|
||||
CachedMessageQueueHandler.LAST_MESSAGES.put(key, messages[0]);
|
||||
} else {
|
||||
newMessages = new LinkedList<QueuedMessage>();
|
||||
int position = 0;
|
||||
final int lenght = queue.getLength();
|
||||
boolean foundMessage = false;
|
||||
boolean firstLoop = true;
|
||||
|
||||
ConnectorLogger.getInstance().trace("*********************************************************");
|
||||
ConnectorLogger.getInstance().trace(" Check message for key: " + key);
|
||||
ConnectorLogger.getInstance().trace(" Last message was: ");
|
||||
ConnectorLogger.getInstance().trace(CachedMessageQueueHandler.dumpLightMessage(previousLastMessage));
|
||||
|
||||
while (position < lenght && !foundMessage) {
|
||||
final QueuedMessage[] messages = queue.getMessages(position, CachedMessageQueueHandler.PAGINATE_SIZE);
|
||||
position += CachedMessageQueueHandler.PAGINATE_SIZE;
|
||||
|
||||
for (QueuedMessage message : messages) {
|
||||
if (firstLoop) {
|
||||
firstLoop = false;
|
||||
CachedMessageQueueHandler.LAST_MESSAGES.put(key, message);
|
||||
ConnectorLogger.getInstance().trace(" New message is:");
|
||||
ConnectorLogger.getInstance().trace(CachedMessageQueueHandler.dumpLightMessage(message));
|
||||
}
|
||||
if (this.customMessageEquals(message, previousLastMessage)
|
||||
|| message.getDate().before(previousLastMessage.getDate())) {
|
||||
foundMessage = true;
|
||||
break;
|
||||
} else {
|
||||
newMessages.add(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
system.disconnectService(AS400.COMMAND);
|
||||
system.disconnectAllServices();
|
||||
|
||||
return newMessages;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param a Message to compare with
|
||||
* @param b Message to compare to
|
||||
* @return True if all the used fields are equals. False otherwise.
|
||||
*/
|
||||
private boolean customMessageEquals(QueuedMessage a, QueuedMessage b) {
|
||||
if (a == null) {
|
||||
if (b == null) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (b == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.getDate() == null) {
|
||||
if (b.getDate() != null)
|
||||
return false;
|
||||
} else {
|
||||
if (!a.getDate().equals(b.getDate()))
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.getSeverity() != b.getSeverity())
|
||||
return false;
|
||||
|
||||
if (a.getID() == null) {
|
||||
if (b.getID() != null)
|
||||
return false;
|
||||
} else {
|
||||
if (!a.getID().equals(b.getID()))
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.getText() == null) {
|
||||
if (b.getText() != null)
|
||||
return false;
|
||||
} else {
|
||||
if (!a.getText().equals(b.getText()))
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.getFromJobName() == null) {
|
||||
if (b.getFromJobName() != null)
|
||||
return false;
|
||||
} else {
|
||||
if (!a.getFromJobName().equals(b.getFromJobName()))
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.getFromJobNumber() == null) {
|
||||
if (b.getFromJobNumber() != null)
|
||||
return false;
|
||||
} else {
|
||||
if (!a.getFromJobNumber().equals(b.getFromJobNumber()))
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.getUser() == null) {
|
||||
if (b.getUser() != null)
|
||||
return false;
|
||||
} else {
|
||||
if (!a.getUser().equals(b.getUser()))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,128 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.msgqueue;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
import java.util.Enumeration;
|
||||
import java.util.LinkedList;
|
||||
import java.util.HashMap;
|
||||
|
||||
import com.ibm.as400.access.AS400;
|
||||
import com.ibm.as400.access.AS400SecurityException;
|
||||
import com.ibm.as400.access.ErrorCompletingRequestException;
|
||||
import com.ibm.as400.access.MessageQueue;
|
||||
import com.ibm.as400.access.ObjectDoesNotExistException;
|
||||
import com.ibm.as400.access.QueuedMessage;
|
||||
import com.centreon.connector.as400.ConnectorLogger;
|
||||
import com.centreon.connector.as400.check.handler.IMessageQueueHandler;
|
||||
import com.centreon.connector.as400.check.handler.impl.AbstractHandler;
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class MessageQueueHandler extends AbstractHandler implements IMessageQueueHandler {
|
||||
|
||||
public MessageQueueHandler(final String host, final String login, final String password) {
|
||||
super(host, login, password);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dumpMessageQueue() throws AS400SecurityException, ErrorCompletingRequestException, InterruptedException,
|
||||
IOException, ObjectDoesNotExistException {
|
||||
final AS400 system = this.getNewAs400();
|
||||
/*
|
||||
* MessageQueue messageQueue = new MessageQueue(system);
|
||||
* messageQueue.getHelpTextFormatting(); messageQueue.getLength();
|
||||
* messageQueue.getListDirection(); messageQueue.getMessages();
|
||||
* messageQueue.getMessages(-1, -1); messageQueue.getPath();
|
||||
* messageQueue.getSelection(); messageQueue.getSeverity();
|
||||
* messageQueue.getSort(); messageQueue.getSystem();
|
||||
* messageQueue.getUserStartingMessageKey();
|
||||
* messageQueue.getWorkstationStartingMessageKey();
|
||||
*/
|
||||
final MessageQueue queue = new MessageQueue(system, MessageQueue.CURRENT);
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
final Enumeration e = queue.getMessages();
|
||||
|
||||
while (e.hasMoreElements()) {
|
||||
final QueuedMessage message = (QueuedMessage) e.nextElement();
|
||||
System.out.println(message.getText().replace('|', ' '));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseData getErrorMessageQueue(final String messageQueuePath, final String messageIdfilterPattern,
|
||||
final int minSeverityLevel, final int maxSeverityLevel) throws Exception {
|
||||
final ResponseData data = new ResponseData();
|
||||
|
||||
final AS400 system = this.getNewAs400();
|
||||
try {
|
||||
final Collection<QueuedMessage> messagesFound = new LinkedList<QueuedMessage>();
|
||||
|
||||
final MessageQueue queue = new MessageQueue(system, messageQueuePath);
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
final Enumeration e = queue.getMessages();
|
||||
|
||||
long errorCount = 0;
|
||||
while (e.hasMoreElements()) {
|
||||
|
||||
final QueuedMessage message = (QueuedMessage) e.nextElement();
|
||||
ConnectorLogger.getInstance()
|
||||
.debug("Message found : " + message.getID() + " - " + message.getText().replace('|', ' '));
|
||||
|
||||
if ((message.getSeverity() >= minSeverityLevel) && (message.getSeverity() < maxSeverityLevel)) {
|
||||
if ("A".equals(message.getReplyStatus())) {
|
||||
// The message has been acknowledge already and we don't take it into account
|
||||
continue;
|
||||
}
|
||||
|
||||
final String messageId = message.getID();
|
||||
if (messageIdfilterPattern != null && !messageId.matches(messageIdfilterPattern)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
HashMap<String, Object> attrs = new HashMap<String, Object>();
|
||||
attrs.put("id", messageId);
|
||||
attrs.put("text", message.getText());
|
||||
attrs.put("severity", message.getSeverity());
|
||||
attrs.put("date", message.getDate().getTimeInMillis());
|
||||
attrs.put("jobName", message.getFromJobName());
|
||||
attrs.put("jobNumber", message.getFromJobNumber());
|
||||
attrs.put("user", message.getUser());
|
||||
data.getResult().add(attrs);
|
||||
}
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
system.disconnectService(AS400.COMMAND);
|
||||
system.disconnectAllServices();
|
||||
throw e;
|
||||
}
|
||||
system.disconnectService(AS400.COMMAND);
|
||||
system.disconnectAllServices();
|
||||
|
||||
return data;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,142 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.wrkprb;
|
||||
|
||||
public class CheckAS400Lang {
|
||||
// These constants are referenced during parsing so
|
||||
// that the correct phrases are found.
|
||||
|
||||
// This is found at the bottom when you type dspjob (name of a job
|
||||
// that exists)
|
||||
public String SELECTION = "Selection";
|
||||
|
||||
// This is the status of job or sbs when you type dspjob or dspsbsd
|
||||
public String ACTIVE = "ACTIVE";
|
||||
|
||||
// This is the "DB Capability" dsplay when you type wrksyssts
|
||||
public String DB_CAPABILITY = "DB capability";
|
||||
|
||||
// This is le display for the login screen
|
||||
public String LOGIN_SCREEN = "System . . . . .";
|
||||
|
||||
// Run dspmsg and it will display "No messages available" if there are no
|
||||
// messages
|
||||
public String NO_MESSAGES_AVAILABLE = "No messages available";
|
||||
|
||||
// The "password has expired"/"password expires" messages are the messages
|
||||
// you get when you login with an account which has an expired/will expire
|
||||
// password.
|
||||
public String PASSWORD_HAS_EXPIRED = "Password has expired";
|
||||
public String PASSWORD_EXPIRES = "password expires";
|
||||
|
||||
// The "Display Messages" is what you get after logging into an account
|
||||
// which displays any messages before continuing to the menu.
|
||||
public String DISPLAY_MESSAGES = "Display Messages";
|
||||
|
||||
// Run wrkoutq blah* and it will say "(No output queues)"
|
||||
public String NO_OUTPUT_QUEUES = "No output queues";
|
||||
|
||||
// If you type dspsbsd blah it will say "...not found..."
|
||||
public static String NOT_FOUND = "not found";
|
||||
|
||||
// If you type dspjob QINTER, it should complain that there are duplicate
|
||||
// jobs and print at the bottom of the window "duplicate jobs found"
|
||||
public String DUPLICATE = "Duplicate";
|
||||
|
||||
// if you type dspjob blah, it will respond Job //blah not found
|
||||
// Only put the Job // part.
|
||||
public String JOB = "Job //";
|
||||
|
||||
// If try and execute a command that you are not allowed it will say
|
||||
// "library *LIBL not allowed"
|
||||
public String LIBRARY_NOT_ALLOWED = "library *LIBL not allowed";
|
||||
|
||||
// On a login with an expired password we look for "Exit sign-on" on the
|
||||
// screen before we send the F3 to exit and disconnect.
|
||||
public static String EXIT_SIGNON = "Exit sign-on request";
|
||||
|
||||
// If you type WRKACTJOB it may respond "No active jobs to display"
|
||||
// when there is no job like searched for in the sytem
|
||||
public String NO_JOB_TO_DISPLAY = "No active jobs to display";
|
||||
|
||||
// Messages needing a reply OR Messages not needing a reply
|
||||
public String MSG_NEED_REPLY = "Messages needing a reply";
|
||||
public String MSG_NOT_NEED_REPLY = "Messages not needing a reply";
|
||||
|
||||
// WRKDSKSTS The "Request/Compression/Bottom" message.
|
||||
public String REQUEST_WORD = "Request";
|
||||
public String DSK_STS_COMPRESSION = "Compression";
|
||||
public String LIST_END = "Bottom";
|
||||
|
||||
public CheckAS400Lang(String lang) {
|
||||
if (lang != null && lang.equals("fr")) {
|
||||
this.setLangFr();
|
||||
} else {
|
||||
this.setLangEn();
|
||||
}
|
||||
}
|
||||
|
||||
public void setLangFr() {
|
||||
this.SELECTION = "Selection";
|
||||
this.ACTIVE = "ACTIVE";
|
||||
this.DB_CAPABILITY = "DB capability";
|
||||
this.LOGIN_SCREEN = "System . . . . .";
|
||||
this.NO_MESSAGES_AVAILABLE = "No messages available";
|
||||
this.PASSWORD_HAS_EXPIRED = "Password has expired";
|
||||
this.PASSWORD_EXPIRES = "password expires";
|
||||
this.DISPLAY_MESSAGES = "Display Messages";
|
||||
this.NO_OUTPUT_QUEUES = "No output queues";
|
||||
this.NOT_FOUND = "not found";
|
||||
this.DUPLICATE = "Duplicate";
|
||||
this.JOB = "Job //";
|
||||
this.LIBRARY_NOT_ALLOWED = "library *LIBL not allowed";
|
||||
this.EXIT_SIGNON = "Exit sign-on request";
|
||||
this.NO_JOB_TO_DISPLAY = "No active jobs to display";
|
||||
this.MSG_NEED_REPLY = "Messages needing a reply";
|
||||
this.MSG_NOT_NEED_REPLY = "Messages not needing a reply";
|
||||
this.REQUEST_WORD = "Request";
|
||||
this.DSK_STS_COMPRESSION = "Compression";
|
||||
this.LIST_END = "Bottom";
|
||||
}
|
||||
|
||||
public void setLangEn() {
|
||||
this.SELECTION = "Selection";
|
||||
this.ACTIVE = "ACTIVE";
|
||||
this.DB_CAPABILITY = "DB capability";
|
||||
this.LOGIN_SCREEN = "System . . . . .";
|
||||
this.NO_MESSAGES_AVAILABLE = "No messages available";
|
||||
this.PASSWORD_HAS_EXPIRED = "Password has expired";
|
||||
this.PASSWORD_EXPIRES = "password expires";
|
||||
this.DISPLAY_MESSAGES = "Display Messages";
|
||||
this.NO_OUTPUT_QUEUES = "No output queues";
|
||||
this.NOT_FOUND = "not found";
|
||||
this.DUPLICATE = "Duplicate";
|
||||
this.JOB = "Job //";
|
||||
this.LIBRARY_NOT_ALLOWED = "library *LIBL not allowed";
|
||||
this.EXIT_SIGNON = "Exit sign-on request";
|
||||
this.NO_JOB_TO_DISPLAY = "No active jobs to display";
|
||||
this.MSG_NEED_REPLY = "Messages needing a reply";
|
||||
this.MSG_NOT_NEED_REPLY = "Messages not needing a reply";
|
||||
this.REQUEST_WORD = "Request";
|
||||
this.DSK_STS_COMPRESSION = "Compression";
|
||||
this.LIST_END = "Bottom";
|
||||
}
|
||||
};
|
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.wrkprb;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
//Example Use
|
||||
/*
|
||||
* Color code format WITH background color -> :foreground,background:
|
||||
* Color code format WITHOUT background color -> :foreground,N:
|
||||
* Reset Color format -> [RC]
|
||||
*
|
||||
* Example Use:
|
||||
* String ansiColoredString = ColorCodes.ParseColors("Hello, This :blue,n:is[RC] a :red,white:response[RC].");
|
||||
* - or -
|
||||
* String ansiColoredString = ColorCodes.RED + "Hello" + ColorCodes.WHITE + ". This is a " + ColorColorCodes.BLUE + "test";
|
||||
*/
|
||||
|
||||
/**
|
||||
* Class used for ANSI Color manipulation in a console supporting ANSI color
|
||||
* codes
|
||||
*/
|
||||
public class ColorCodes {
|
||||
|
||||
public static final String RESET = "\u001B[0m";
|
||||
public static final String BLACK = "\u001B[30;40;1m";
|
||||
public static final String RED = "\u001B[31;40;1m";
|
||||
public static final String GREEN = "\u001B[32;40;1m";
|
||||
public static final String YELLOW = "\u001B[33;40;1m";
|
||||
public static final String BLUE = "\u001B[34;40;1m";
|
||||
public static final String PURPLE = "\u001B[35;40;1m";
|
||||
public static final String CYAN = "\u001B[36;40;1m";
|
||||
public static final String WHITE = "\u001B[37;40;1m";
|
||||
|
||||
/**
|
||||
* Parses a string with ANSI color codes based on the input
|
||||
*
|
||||
* @param input the input string
|
||||
* @return the parsed ANSI string
|
||||
*/
|
||||
public static String ParseColors(final String input) {
|
||||
String ret = input;
|
||||
Pattern regexChecker = Pattern.compile(":\\S+,\\S+:");
|
||||
Matcher regexMatcher = regexChecker.matcher(input);
|
||||
while (regexMatcher.find()) {
|
||||
if (regexMatcher.group().length() != 0) {
|
||||
String sub = regexMatcher.group().trim();
|
||||
sub = sub.replace(":", "");
|
||||
String[] colors = sub.split(",");
|
||||
|
||||
ret = (colors[1].equalsIgnoreCase("N"))
|
||||
? ret.replace(regexMatcher.group().trim(), "\u001B[3" + getColorID(colors[0]) + ";1m")
|
||||
: ret.replace(regexMatcher.group().trim(),
|
||||
"\u001B[3" + getColorID(colors[0]) + ";4" + getColorID(colors[1]) + ";1m");
|
||||
ret = ret.replace("[RC]", ColorCodes.WHITE);
|
||||
}
|
||||
}
|
||||
ret = ret + ColorCodes.RESET;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal function for getting a colors value
|
||||
*
|
||||
* @param color The color as test
|
||||
* @return The colors integral value
|
||||
*/
|
||||
private static int getColorID(String color) {
|
||||
if (color.equalsIgnoreCase("BLACK")) {
|
||||
return 0;
|
||||
} else if (color.equalsIgnoreCase("RED")) {
|
||||
return 1;
|
||||
} else if (color.equalsIgnoreCase("GREEN")) {
|
||||
return 2;
|
||||
} else if (color.equalsIgnoreCase("YELLOW")) {
|
||||
return 3;
|
||||
} else if (color.equalsIgnoreCase("BLUE")) {
|
||||
return 4;
|
||||
} else if (color.equalsIgnoreCase("MAGENTA")) {
|
||||
return 5;
|
||||
} else if (color.equalsIgnoreCase("CYAN")) {
|
||||
return 6;
|
||||
} else if (color.equalsIgnoreCase("WHITE")) {
|
||||
return 7;
|
||||
}
|
||||
|
||||
return 7;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,327 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.check.handler.wrkprb;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.PrintWriter;
|
||||
import java.net.Socket;
|
||||
import java.util.List;
|
||||
import java.util.HashMap;
|
||||
|
||||
import javax.net.ssl.SSLSocket;
|
||||
import javax.net.ssl.SSLSocketFactory;
|
||||
|
||||
import com.centreon.connector.as400.check.handler.wrkprb.CheckAS400Lang;
|
||||
import com.centreon.connector.as400.ConnectorLogger;
|
||||
import com.centreon.connector.as400.check.handler.impl.AbstractHandler;
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class WorkWithProblemHandler extends AbstractHandler {
|
||||
|
||||
private static int INSTANCE_ID = 0;
|
||||
private static long LOGIN_COUNT = 0;
|
||||
private static long LOGOUT_COUNT = 0;
|
||||
private static final int LOG_TRACE = 0;
|
||||
private static final int LOG_DEBUG = 1;
|
||||
private static final int LOG_WARN = 2;
|
||||
private static final int LOG_ERROR = 3;
|
||||
|
||||
private static final int OK = 0;
|
||||
private static final int WARN = 1;
|
||||
private static final int CRITICAL = 2;
|
||||
private static final int UNKNOWN = 3;
|
||||
// These constants are for the wait recieve, controlling
|
||||
// any other logic that it should turn on. For example checking
|
||||
// for invalid login.
|
||||
private final static int NONE = 0;
|
||||
private final static int LOGIN = 1;
|
||||
private final static int GETOUTQ = 2;
|
||||
private final static int GETJOB = 3;
|
||||
private final static int GETSBSD = 4;
|
||||
private final static int GETFD = 5;
|
||||
|
||||
private CheckAS400Lang AS400Lang;
|
||||
private SSLSocket sslSocket;
|
||||
private Socket ioSocket;
|
||||
private PrintWriter ioWriter;
|
||||
private BufferedReader ioReader;
|
||||
private final boolean SSL = false;
|
||||
private final String logPrefix;
|
||||
|
||||
public WorkWithProblemHandler(final String host, final String login, final String password) {
|
||||
super(host, login, password);
|
||||
this.logPrefix = "[" + WorkWithProblemHandler.INSTANCE_ID++ + "]";
|
||||
}
|
||||
|
||||
private synchronized static long getAndIncrementLoginCount() {
|
||||
return WorkWithProblemHandler.LOGIN_COUNT++;
|
||||
}
|
||||
|
||||
private synchronized static long getAndIncrementLogoutCount() {
|
||||
return WorkWithProblemHandler.LOGOUT_COUNT++;
|
||||
}
|
||||
|
||||
public ResponseData getProblems(String lang) {
|
||||
ResponseData response = null;
|
||||
|
||||
this.AS400Lang = new CheckAS400Lang(lang);
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + "Establishing connection to server...");
|
||||
if (this.open()) {
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + "done.\nLogging in...");
|
||||
boolean loggedIn = false;
|
||||
try {
|
||||
loggedIn = this.login();
|
||||
} catch (final Exception e) {
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + e.getMessage(), e);
|
||||
response = new ResponseData(ResponseData.statusError, e.getMessage());
|
||||
this.close();
|
||||
return response;
|
||||
}
|
||||
if (loggedIn) {
|
||||
ConnectorLogger.getInstance()
|
||||
.debug(this.logPrefix + "LoginCount = " + WorkWithProblemHandler.getAndIncrementLoginCount());
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + "Login completed.\nSending command (WRKPRB)...");
|
||||
|
||||
this.send("WRKPRB\r");
|
||||
String result = null;
|
||||
try {
|
||||
result = this.waitReceive("F3=", WorkWithProblemHandler.NONE);
|
||||
} catch (final Exception e) {
|
||||
this.logout();
|
||||
response = new ResponseData(ResponseData.statusError, e.getMessage());
|
||||
ConnectorLogger.getInstance().error(e.getMessage(), e);
|
||||
return response;
|
||||
}
|
||||
|
||||
if (result != null) {
|
||||
HashMap<String, Object> attrs = new HashMap<String, Object>();
|
||||
response = new ResponseData();
|
||||
|
||||
attrs.put("result", result);
|
||||
response.getResult().add(attrs);
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + "Finished.");
|
||||
} else {
|
||||
response = new ResponseData(ResponseData.statusError, "Unexpected output on command");
|
||||
}
|
||||
|
||||
this.logout();
|
||||
} else {
|
||||
this.logout();
|
||||
response = new ResponseData(ResponseData.statusError, "Unexpected output on login");
|
||||
}
|
||||
} else {
|
||||
response = new ResponseData(ResponseData.statusError, "Could not open connection to AS400");
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
// open connection to server
|
||||
public boolean open() {
|
||||
try {
|
||||
if (this.SSL) {
|
||||
final SSLSocket sslSocket = (SSLSocket) SSLSocketFactory.getDefault().createSocket(this.host, 992);
|
||||
this.ioWriter = new PrintWriter(sslSocket.getOutputStream(), true);
|
||||
this.ioReader = new BufferedReader(new InputStreamReader(sslSocket.getInputStream()));
|
||||
} else {
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + "Create socket...");
|
||||
this.ioSocket = new Socket(this.host, 23);
|
||||
this.ioSocket.setSoTimeout(6000);
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + "Get outputstream");
|
||||
this.ioWriter = new PrintWriter(this.ioSocket.getOutputStream(), true);
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + "Read from socket");
|
||||
this.ioReader = new BufferedReader(new InputStreamReader(this.ioSocket.getInputStream()));
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + "Reading done");
|
||||
}
|
||||
|
||||
this.send("\n\r");
|
||||
|
||||
return true;
|
||||
} catch (final Exception e) {
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + "CRITICAL: Network error", e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// write str to stream
|
||||
public void send(final String str) {
|
||||
this.ioWriter.print(str);
|
||||
this.ioWriter.flush();
|
||||
}
|
||||
|
||||
public boolean login() throws Exception {
|
||||
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + " waiting for screen...");
|
||||
/* Wait for the login screen */
|
||||
if (this.waitReceive("IBM CORP", WorkWithProblemHandler.NONE) != null) {
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + " sending login information for " + this.login + "...");
|
||||
int unameLength;
|
||||
unameLength = this.login.length();
|
||||
/* send login user/pass */
|
||||
this.send(this.login);
|
||||
if (unameLength != 10) {
|
||||
this.send("\t");
|
||||
}
|
||||
|
||||
this.send(this.password + "\r");
|
||||
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + " waiting for login to process...");
|
||||
/* Wait and receive command screen */
|
||||
if (this.waitReceive("===>", WorkWithProblemHandler.LOGIN) != null)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// close connection to server
|
||||
public boolean close() {
|
||||
try {
|
||||
if (this.SSL) {
|
||||
this.sslSocket.close();
|
||||
} else {
|
||||
if (this.ioSocket != null) {
|
||||
this.ioSocket.close();
|
||||
}
|
||||
}
|
||||
if (this.ioReader != null) {
|
||||
this.ioReader.close();
|
||||
}
|
||||
if (this.ioWriter != null) {
|
||||
this.ioWriter.close();
|
||||
}
|
||||
return true;
|
||||
} catch (final IOException e) {
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + "CRITICAL: Network error", e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Receives all info in stream until it sees the string 'str'.
|
||||
public String waitReceive(final String str, final int procedure) throws Exception {
|
||||
final StringBuilder buffer = new StringBuilder();
|
||||
boolean flag = true;
|
||||
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + " waiting for token " + str + "...");
|
||||
|
||||
try {
|
||||
while (flag) {
|
||||
int ch;
|
||||
while ((ch = this.ioReader.read()) != -1) {
|
||||
buffer.append((char) ch);
|
||||
|
||||
if (!this.ioReader.ready())
|
||||
break;
|
||||
}
|
||||
ConnectorLogger.getInstance().trace("\n**BUFFER IS:**\n");
|
||||
final String convertedBuffer = ColorCodes.ParseColors(buffer.toString());
|
||||
ConnectorLogger.getInstance().trace(convertedBuffer);
|
||||
ConnectorLogger.getInstance().trace("\n**END OF BUFFER**\n");
|
||||
if (procedure == WorkWithProblemHandler.LOGIN) {
|
||||
if (buffer.indexOf("CPF1107") != -1) {
|
||||
this.close();
|
||||
throw new Exception("CRITICAL - Login ERROR, Invalid password");
|
||||
} else if (buffer.indexOf("CPF1120") != -1) {
|
||||
this.close();
|
||||
throw new Exception("CRITICAL - Login ERROR, Invalid username");
|
||||
} else if (buffer.indexOf("/" + this.login.toUpperCase() + "/") != -1) {
|
||||
ConnectorLogger.getInstance()
|
||||
.debug(this.logPrefix + " responding to allocated to another job message...");
|
||||
this.send("\r");
|
||||
buffer.setLength(0);
|
||||
} else if (buffer.indexOf(this.AS400Lang.PASSWORD_HAS_EXPIRED) != -1) {
|
||||
this.send((char) 27 + "3");
|
||||
this.waitReceive("Exit sign-on request", WorkWithProblemHandler.NONE);
|
||||
this.send("Y\r");
|
||||
this.close();
|
||||
throw new Exception("WARNING - Expired password, Please change it.");
|
||||
} else if (buffer.indexOf("CPF1394") != -1) {
|
||||
this.close();
|
||||
throw new Exception("CRITICAL - Login ERROR, User profile " + this.login + " cannot sign on.");
|
||||
} else if (buffer.indexOf(this.AS400Lang.PASSWORD_EXPIRES) != -1) {
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + " responding to password expires message...");
|
||||
this.send("\r");
|
||||
buffer.setLength(0);
|
||||
} else if (buffer.indexOf(this.AS400Lang.DISPLAY_MESSAGES) != -1) {
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + " continuing through message display...");
|
||||
this.send((char) 27 + "3");
|
||||
buffer.setLength(0);
|
||||
}
|
||||
} else if (procedure == WorkWithProblemHandler.GETOUTQ) {
|
||||
if (buffer.indexOf(this.AS400Lang.NO_OUTPUT_QUEUES) != -1) {
|
||||
this.logout();
|
||||
throw new Exception("CRITICAL - outq does NOT exist");
|
||||
}
|
||||
}
|
||||
// check for command not allowed errors
|
||||
if (procedure != WorkWithProblemHandler.LOGIN) {
|
||||
if (buffer.indexOf(this.AS400Lang.LIBRARY_NOT_ALLOWED) != -1) {
|
||||
this.send((char) 27 + "3");
|
||||
this.logout();
|
||||
throw new Exception("CRITICAL - Command NOT allowed");
|
||||
}
|
||||
}
|
||||
if (buffer.indexOf(str) != -1)
|
||||
flag = false;
|
||||
|
||||
}
|
||||
} catch (final IOException e) {
|
||||
throw new Exception("CRITICAL: Network error:" + e);
|
||||
}
|
||||
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + " token received.");
|
||||
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
public void logout() {
|
||||
// send F3
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + "Logging out...\n sending F3...");
|
||||
this.send((char) 27 + "3");
|
||||
try {
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + "Wait for response...");
|
||||
this.waitReceive("===>", WorkWithProblemHandler.NONE);
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + "Response received. requesting signoff...");
|
||||
// send logout
|
||||
this.send("signoff *nolist\r");
|
||||
// waitReceive(";53H",NONE);
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + "Signoff sent. Wait for lockscreen...");
|
||||
waitReceive("IBM CORP", NONE);
|
||||
} catch (final Exception e) {
|
||||
ConnectorLogger.getInstance().error(e.getMessage(), e);
|
||||
} finally {
|
||||
this.close();
|
||||
}
|
||||
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + "Job ending immediately");
|
||||
this.send("\r");
|
||||
// waitReceive(LANG.LOGIN_SCREEN, NONE);
|
||||
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + " terminating connection...");
|
||||
|
||||
this.close();
|
||||
ConnectorLogger.getInstance().debug(this.logPrefix + "Logged out.");
|
||||
ConnectorLogger.getInstance()
|
||||
.debug(this.logPrefix + "LogoutCount = " + WorkWithProblemHandler.getAndIncrementLogoutCount());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.client;
|
||||
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public interface IClient {
|
||||
String getRawRequest();
|
||||
|
||||
void writeAnswer(ResponseData answer);
|
||||
|
||||
void parseRequest() throws Exception;
|
||||
|
||||
String getAs400Host();
|
||||
|
||||
String getAs400Login();
|
||||
|
||||
String getAs400Password();
|
||||
|
||||
String getAs400CheckType();
|
||||
|
||||
Object getAs400Arg(String key);
|
||||
}
|
|
@ -0,0 +1,116 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.client.impl;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.centreon.connector.as400.dispatcher.check.InputData;
|
||||
|
||||
import com.centreon.connector.as400.client.IClient;
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
abstract class AbstractClient implements IClient {
|
||||
private InputData input = null;
|
||||
|
||||
private String as400Host = null;
|
||||
private String as400Login = null;
|
||||
private String as400Password = null;
|
||||
private String as400CheckType = null;
|
||||
private String as400Args = null;
|
||||
private List<Map<String, String>> argList = new ArrayList<Map<String, String>>();
|
||||
|
||||
@Override
|
||||
public abstract String getRawRequest();
|
||||
|
||||
protected abstract void writeAnswer(String answer);
|
||||
|
||||
public AbstractClient() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAs400Host() {
|
||||
return this.input.getHost();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAs400Login() {
|
||||
return this.input.getLogin();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAs400Password() {
|
||||
return this.input.getPassword();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAs400CheckType() {
|
||||
return this.input.getCommand();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getAs400Arg(String key) {
|
||||
return this.input.getArg(key);
|
||||
}
|
||||
|
||||
public List<Map<String , String>> getAs400ArgList(String key) {
|
||||
Object arg = this.input.getArg(key);
|
||||
if (arg == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Gson gson = new Gson();
|
||||
return gson.fromJson(arg.toString(), argList.getClass());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseRequest() throws Exception {
|
||||
Gson gson = new Gson();
|
||||
this.input = gson.fromJson(this.getRawRequest(), InputData.class);
|
||||
|
||||
if (this.input.getHost() == null) {
|
||||
throw new Exception("Invalid option: As/400 host required");
|
||||
}
|
||||
if (this.input.getLogin() == null) {
|
||||
throw new Exception("Invalid option: As/400 login required");
|
||||
}
|
||||
if (this.input.getPassword() == null) {
|
||||
throw new Exception("Invalid option: As/400 password required");
|
||||
}
|
||||
if (this.input.getCommand() == null) {
|
||||
throw new Exception("Invalid option: As/400 command required");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeAnswer(final ResponseData data) {
|
||||
Gson gson = new GsonBuilder().create();
|
||||
String json = gson.toJson(data);
|
||||
|
||||
this.writeAnswer(json);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.client.impl;
|
||||
|
||||
import io.undertow.util.HttpString;
|
||||
import io.undertow.server.HttpServerExchange;
|
||||
import io.undertow.util.Headers;
|
||||
import io.undertow.io.Receiver.FullBytesCallback;
|
||||
|
||||
import com.centreon.connector.as400.Conf;
|
||||
import com.centreon.connector.as400.ConnectorLogger;
|
||||
import com.centreon.connector.as400.client.IClient;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class NetworkClient extends AbstractClient implements IClient {
|
||||
private HttpServerExchange exchange = null;
|
||||
private String rawRequest = null;
|
||||
|
||||
public NetworkClient(final HttpServerExchange exchange) {
|
||||
super();
|
||||
this.exchange = exchange;
|
||||
}
|
||||
|
||||
public void readRequest() throws Exception {
|
||||
HttpString method = exchange.getRequestMethod();
|
||||
|
||||
if (method.toString().equals("POST") == false) {
|
||||
throw new Exception("Unsupported method");
|
||||
}
|
||||
|
||||
this.exchange.getRequestReceiver().receiveFullBytes(new FullBytesCallback() {
|
||||
@Override
|
||||
public void handle(HttpServerExchange exchange, byte[] message) {
|
||||
rawRequest = new String(message);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeAnswer(final String answer) {
|
||||
ConnectorLogger.getInstance().debug("--------------------");
|
||||
ConnectorLogger.getInstance().debug("request : " + this.getRawRequest());
|
||||
ConnectorLogger.getInstance().debug("answer : \n" + answer);
|
||||
ConnectorLogger.getInstance().debug("--------------------");
|
||||
|
||||
this.exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "application/json");
|
||||
this.exchange.getResponseSender().send(answer);
|
||||
this.exchange.endExchange();
|
||||
}
|
||||
|
||||
private void clean() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRawRequest() {
|
||||
return this.rawRequest;
|
||||
}
|
||||
|
||||
public HttpServerExchange getExchange() {
|
||||
return this.exchange;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,140 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.daemon;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.FileInputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import io.undertow.Undertow;
|
||||
import io.undertow.UndertowOptions;
|
||||
import io.undertow.server.HttpHandler;
|
||||
import io.undertow.server.HttpServerExchange;
|
||||
import io.undertow.util.HttpString;
|
||||
|
||||
import io.undertow.security.api.AuthenticationMechanism;
|
||||
import io.undertow.security.api.AuthenticationMode;
|
||||
import io.undertow.security.api.SecurityContext;
|
||||
import io.undertow.security.handlers.AuthenticationCallHandler;
|
||||
import io.undertow.security.handlers.AuthenticationConstraintHandler;
|
||||
import io.undertow.security.handlers.AuthenticationMechanismsHandler;
|
||||
import io.undertow.security.handlers.SecurityInitialHandler;
|
||||
import io.undertow.security.idm.IdentityManager;
|
||||
import io.undertow.security.impl.BasicAuthenticationMechanism;
|
||||
|
||||
import java.security.KeyStore;
|
||||
import javax.net.ssl.KeyManagerFactory;
|
||||
import javax.net.ssl.SSLContext;
|
||||
|
||||
import com.centreon.connector.as400.daemon.MapIdentityManager;
|
||||
import com.centreon.connector.as400.Conf;
|
||||
import com.centreon.connector.as400.ConnectorLogger;
|
||||
import com.centreon.connector.as400.client.impl.NetworkClient;
|
||||
|
||||
/**
|
||||
* The Class DaemonCore.
|
||||
*
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class Daemon {
|
||||
/**
|
||||
* execute.
|
||||
*
|
||||
*/
|
||||
public void start(int port) throws Exception, IOException, InterruptedException {
|
||||
Undertow server;
|
||||
|
||||
Undertow.Builder builder = Undertow.builder();
|
||||
|
||||
builder.setServerOption(UndertowOptions.NO_REQUEST_TIMEOUT, Conf.daemonNoRequestTimeout)
|
||||
.setServerOption(UndertowOptions.REQUEST_PARSE_TIMEOUT, Conf.daemonRequestParseTimeout);
|
||||
|
||||
if (Conf.keyStoreFile != null) {
|
||||
try {
|
||||
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
|
||||
|
||||
KeyStore keyStore = KeyStore.getInstance(Conf.keyStoreType);
|
||||
FileInputStream stream = new FileInputStream(Conf.keyStoreFile);
|
||||
if (stream == null) {
|
||||
throw new Exception("keystore file not found: " + Conf.keyStoreFile);
|
||||
}
|
||||
|
||||
keyStore.load(
|
||||
stream,
|
||||
Conf.keyStorePassword.toCharArray());
|
||||
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
|
||||
keyManagerFactory.init(keyStore, Conf.keyStorePassword.toCharArray());
|
||||
|
||||
SSLContext sslContext;
|
||||
sslContext = SSLContext.getInstance(Conf.sslProtocol);
|
||||
|
||||
sslContext.init(keyManagerFactory.getKeyManagers(), null, null);
|
||||
builder.addHttpsListener(port, Conf.daemonListenerHost, sslContext);
|
||||
} catch (final Exception e) {
|
||||
throw new Exception(e);
|
||||
}
|
||||
} else {
|
||||
builder.addHttpListener(port, Conf.daemonListenerHost);
|
||||
}
|
||||
|
||||
if (Conf.authUsername != null && Conf.authPassword != null) {
|
||||
final Map<String, char[]> users = new HashMap<String, char[]>(1);
|
||||
users.put(Conf.authUsername, Conf.authPassword.toCharArray());
|
||||
|
||||
final IdentityManager identityManager = new MapIdentityManager(users);
|
||||
|
||||
server = builder.setHandler(addSecurity(new HttpHandler() {
|
||||
@Override
|
||||
public void handleRequest(final HttpServerExchange exchange) throws Exception {
|
||||
NewtworkRunnable network = new NewtworkRunnable(new NetworkClient(exchange));
|
||||
network.run();
|
||||
}
|
||||
}, identityManager))
|
||||
.build();
|
||||
} else {
|
||||
server = builder.setHandler(new HttpHandler() {
|
||||
@Override
|
||||
public void handleRequest(final HttpServerExchange exchange) throws Exception {
|
||||
NewtworkRunnable network = new NewtworkRunnable(new NetworkClient(exchange));
|
||||
network.run();
|
||||
}
|
||||
}).build();
|
||||
}
|
||||
server.start();
|
||||
|
||||
while (true) {
|
||||
Thread.sleep(10000);
|
||||
}
|
||||
}
|
||||
|
||||
private static HttpHandler addSecurity(final HttpHandler toWrap, final IdentityManager identityManager) {
|
||||
HttpHandler handler = toWrap;
|
||||
handler = new AuthenticationCallHandler(handler);
|
||||
handler = new AuthenticationConstraintHandler(handler);
|
||||
final List<AuthenticationMechanism> mechanisms = Collections.<AuthenticationMechanism>singletonList(new BasicAuthenticationMechanism("My Realm"));
|
||||
handler = new AuthenticationMechanismsHandler(handler, mechanisms);
|
||||
handler = new SecurityInitialHandler(AuthenticationMode.PRO_ACTIVE, identityManager, handler);
|
||||
return handler;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.daemon;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class DelayedConnectionException extends Exception {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
DelayedConnectionException(final String reason) {
|
||||
super(reason);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,110 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.daemon;
|
||||
|
||||
import io.undertow.security.idm.Account;
|
||||
import io.undertow.security.idm.Credential;
|
||||
import io.undertow.security.idm.IdentityManager;
|
||||
import io.undertow.security.idm.PasswordCredential;
|
||||
|
||||
import java.security.Principal;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* A simple {@link IdentityManager} implementation, that just takes a map of users to their
|
||||
* password.
|
||||
*
|
||||
* This is in now way suitable for real world production use.
|
||||
*
|
||||
*
|
||||
* @author Stuart Douglas
|
||||
*/
|
||||
class MapIdentityManager implements IdentityManager {
|
||||
|
||||
private final Map<String, char[]> users;
|
||||
|
||||
MapIdentityManager(final Map<String, char[]> users) {
|
||||
this.users = users;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Account verify(Account account) {
|
||||
// An existing account so for testing assume still valid.
|
||||
return account;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Account verify(String id, Credential credential) {
|
||||
Account account = getAccount(id);
|
||||
if (account != null && verifyCredential(account, credential)) {
|
||||
return account;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Account verify(Credential credential) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean verifyCredential(Account account, Credential credential) {
|
||||
if (credential instanceof PasswordCredential) {
|
||||
char[] password = ((PasswordCredential) credential).getPassword();
|
||||
char[] expectedPassword = users.get(account.getPrincipal().getName());
|
||||
|
||||
return Arrays.equals(password, expectedPassword);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private Account getAccount(final String id) {
|
||||
if (users.containsKey(id)) {
|
||||
return new Account() {
|
||||
|
||||
private final Principal principal = new Principal() {
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return id;
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public Principal getPrincipal() {
|
||||
return principal;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getRoles() {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.daemon;
|
||||
|
||||
import com.centreon.connector.as400.ConnectorLogger;
|
||||
import com.centreon.connector.as400.client.impl.NetworkClient;
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
import com.centreon.connector.as400.dispatcher.client.impl.ClientDispatcherImpl;
|
||||
|
||||
/**
|
||||
* The Class NewtworkRunnable.
|
||||
*
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
class NewtworkRunnable implements Runnable {
|
||||
private NetworkClient client = null;
|
||||
|
||||
/**
|
||||
* Instantiates a new newtwork runnable.
|
||||
*
|
||||
* @param client the client
|
||||
*/
|
||||
NewtworkRunnable(final NetworkClient client) {
|
||||
this.client = client;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see java.lang.Runnable#run()
|
||||
*/
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
try {
|
||||
this.client.readRequest();
|
||||
this.client.parseRequest();
|
||||
ClientDispatcherImpl.getInstance().dispatch(this.client);
|
||||
} catch (final java.net.SocketException e) {
|
||||
ConnectorLogger.getInstance().debug("", e);
|
||||
this.client.writeAnswer(new ResponseData(ResponseData.statusError, "" + e.getMessage()));
|
||||
} catch (final Exception e) {
|
||||
ConnectorLogger.getInstance().error("", e);
|
||||
this.client.writeAnswer(new ResponseData(ResponseData.statusError, "" + e.getMessage()));
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
ConnectorLogger.getInstance().error("", e);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,241 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.dispatcher.check;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.RejectedExecutionHandler;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import com.ibm.as400.access.AS400SecurityException;
|
||||
import com.centreon.connector.as400.Conf;
|
||||
import com.centreon.connector.as400.check.handler.ICachedMessageQueueHandler;
|
||||
import com.centreon.connector.as400.check.handler.ICommandHandler;
|
||||
import com.centreon.connector.as400.check.handler.IDiskHandler;
|
||||
import com.centreon.connector.as400.check.handler.IJobHandler;
|
||||
import com.centreon.connector.as400.check.handler.IJobQueueHandler;
|
||||
import com.centreon.connector.as400.check.handler.IMessageQueueHandler;
|
||||
import com.centreon.connector.as400.check.handler.ISubSystemHandler;
|
||||
import com.centreon.connector.as400.check.handler.ISystemHandler;
|
||||
import com.centreon.connector.as400.check.handler.impl.CommandHandler;
|
||||
import com.centreon.connector.as400.check.handler.impl.DiskHandler;
|
||||
import com.centreon.connector.as400.check.handler.impl.JobHandler;
|
||||
import com.centreon.connector.as400.check.handler.impl.JobQueueHandler;
|
||||
import com.centreon.connector.as400.check.handler.impl.SubSystemHandler;
|
||||
import com.centreon.connector.as400.check.handler.impl.SystemHandler;
|
||||
import com.centreon.connector.as400.check.handler.msgqueue.CachedMessageQueueHandler;
|
||||
import com.centreon.connector.as400.check.handler.msgqueue.MessageQueueHandler;
|
||||
import com.centreon.connector.as400.check.handler.wrkprb.WorkWithProblemHandler;
|
||||
import com.centreon.connector.as400.client.impl.NetworkClient;
|
||||
|
||||
import io.undertow.server.HttpServerExchange;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class CheckDispatcher {
|
||||
|
||||
private static class DefaultThreadFactory implements ThreadFactory {
|
||||
private static final AtomicInteger poolNumber = new AtomicInteger(1);
|
||||
private final ThreadGroup group;
|
||||
private final AtomicInteger threadNumber = new AtomicInteger(1);
|
||||
private final String namePrefix;
|
||||
|
||||
private DefaultThreadFactory(final String host, final String type) {
|
||||
final SecurityManager s = System.getSecurityManager();
|
||||
this.group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup();
|
||||
this.namePrefix = "" + host + "-pool-" + type + "-" + DefaultThreadFactory.poolNumber.getAndIncrement()
|
||||
+ "-thread-";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Thread newThread(final Runnable r) {
|
||||
final Thread t = new Thread(this.group, r, this.namePrefix + this.threadNumber.getAndIncrement(), 0);
|
||||
if (t.isDaemon()) {
|
||||
t.setDaemon(false);
|
||||
}
|
||||
if (t.getPriority() != Thread.NORM_PRIORITY) {
|
||||
t.setPriority(Thread.NORM_PRIORITY);
|
||||
}
|
||||
return t;
|
||||
}
|
||||
}
|
||||
|
||||
private String host = null;
|
||||
private String login = null;
|
||||
private String password = null;
|
||||
|
||||
private volatile ConcurrentHashMap<String, Long> filter = new ConcurrentHashMap<String, Long>();
|
||||
|
||||
private ISubSystemHandler subSystemHandler = null;
|
||||
private ISystemHandler systemHandler = null;
|
||||
private IJobHandler jobHandler = null;
|
||||
private IDiskHandler diskHandler = null;
|
||||
private ICommandHandler commandHandler = null;
|
||||
|
||||
private ThreadPoolExecutor executorGlobal = null;
|
||||
private ThreadPoolExecutor executorJobs = null;
|
||||
private ThreadPoolExecutor executorDisk = null;
|
||||
|
||||
class ThreadPoolExecutorPostFilter extends ThreadPoolExecutor {
|
||||
public ThreadPoolExecutorPostFilter(final int corePoolSize, final int maximumPoolSize, final long keepAliveTime,
|
||||
final TimeUnit unit, final BlockingQueue<Runnable> workQueue, final RejectedExecutionHandler handler) {
|
||||
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, handler);
|
||||
}
|
||||
|
||||
public ThreadPoolExecutorPostFilter(final int corePoolSize, final int maximumPoolSize, final long keepAliveTime,
|
||||
final TimeUnit unit, final BlockingQueue<Runnable> workQueue) {
|
||||
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
|
||||
}
|
||||
|
||||
public ThreadPoolExecutorPostFilter(final int corePoolSize, final int maximumPoolSize, final long keepAliveTime,
|
||||
final TimeUnit unit, final BlockingQueue<Runnable> workQueue, final ThreadFactory threadFactory) {
|
||||
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory);
|
||||
}
|
||||
|
||||
public ThreadPoolExecutorPostFilter(final int corePoolSize, final int maximumPoolSize, final long keepAliveTime,
|
||||
final TimeUnit unit, final BlockingQueue<Runnable> workQueue, final ThreadFactory threadFactory,
|
||||
final RejectedExecutionHandler handler) {
|
||||
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void afterExecute(final Runnable r, final Throwable t) {
|
||||
if (r instanceof CheckHandlerRunnable) {
|
||||
final CheckHandlerRunnable runnable = (CheckHandlerRunnable) r;
|
||||
final NetworkClient client = runnable.getClient();
|
||||
final String rawRequest = client.getRawRequest();
|
||||
|
||||
CheckDispatcher.this.filter.remove(rawRequest);
|
||||
}
|
||||
super.afterExecute(r, t);
|
||||
}
|
||||
}
|
||||
|
||||
public CheckDispatcher(final String host, final String login, final String password) {
|
||||
this.host = host;
|
||||
this.login = login;
|
||||
this.password = password;
|
||||
|
||||
this.executorGlobal = new ThreadPoolExecutorPostFilter(5, 10, Conf.workerQueueTimeout, TimeUnit.MILLISECONDS,
|
||||
new LinkedBlockingQueue<Runnable>());
|
||||
this.executorGlobal.setThreadFactory(new DefaultThreadFactory(host, "global"));
|
||||
|
||||
this.executorJobs = new ThreadPoolExecutorPostFilter(1, 1, Conf.workerQueueTimeout, TimeUnit.MILLISECONDS,
|
||||
new LinkedBlockingQueue<Runnable>());
|
||||
this.executorJobs.setThreadFactory(new DefaultThreadFactory(host, "job"));
|
||||
|
||||
this.executorDisk = new ThreadPoolExecutorPostFilter(1, 1, Conf.workerQueueTimeout, TimeUnit.MILLISECONDS,
|
||||
new LinkedBlockingQueue<Runnable>());
|
||||
this.executorDisk.setThreadFactory(new DefaultThreadFactory(host, "disk"));
|
||||
}
|
||||
|
||||
public String getHost() {
|
||||
return this.host;
|
||||
}
|
||||
|
||||
public String getLogin() {
|
||||
return this.login;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return this.password;
|
||||
}
|
||||
|
||||
public synchronized void dispatch(final NetworkClient client) {
|
||||
|
||||
if (this.filter.containsKey(client.getRawRequest())) {
|
||||
final long time = this.filter.get(client.getRawRequest());
|
||||
client.writeAnswer(new ResponseData(ResponseData.statusError, "Previous request pending (started "
|
||||
+ (System.currentTimeMillis() - time)
|
||||
+ " ms ago). Increase your check interval, and nagios check timeout. Also check your bandwidth availability"));
|
||||
return;
|
||||
}
|
||||
|
||||
this.filter.put(client.getRawRequest(), System.currentTimeMillis());
|
||||
|
||||
final String command = client.getAs400CheckType();
|
||||
|
||||
if (command.equalsIgnoreCase("listJobs")) {
|
||||
client.getExchange().dispatch(this.executorJobs, new CheckHandlerRunnable(client, this));
|
||||
} else if (command.equalsIgnoreCase("listDisks")) {
|
||||
client.getExchange().dispatch(this.executorDisk, new CheckHandlerRunnable(client, this));
|
||||
} else {
|
||||
client.getExchange().dispatch(this.executorGlobal, new CheckHandlerRunnable(client, this));
|
||||
}
|
||||
}
|
||||
|
||||
public ICommandHandler getCommandHandler() throws AS400SecurityException, IOException {
|
||||
if (this.commandHandler == null) {
|
||||
this.commandHandler = new CommandHandler(this.host, this.login, this.password);
|
||||
}
|
||||
return this.commandHandler;
|
||||
}
|
||||
|
||||
public IDiskHandler getDiskHandler() throws AS400SecurityException, IOException {
|
||||
if (this.diskHandler == null) {
|
||||
this.diskHandler = new DiskHandler(this.host, this.login, this.password);
|
||||
}
|
||||
return this.diskHandler;
|
||||
}
|
||||
|
||||
public IJobHandler getJobHandler() throws AS400SecurityException, IOException {
|
||||
if (this.jobHandler == null) {
|
||||
this.jobHandler = new JobHandler(this.host, this.login, this.password);
|
||||
}
|
||||
return this.jobHandler;
|
||||
}
|
||||
|
||||
public ISubSystemHandler getSubSystemHandler() throws AS400SecurityException, IOException {
|
||||
if (this.subSystemHandler == null) {
|
||||
this.subSystemHandler = new SubSystemHandler(this.host, this.login, this.password);
|
||||
}
|
||||
return this.subSystemHandler;
|
||||
}
|
||||
|
||||
public ISystemHandler getSystemHandler() throws AS400SecurityException, IOException {
|
||||
if (this.systemHandler == null) {
|
||||
this.systemHandler = new SystemHandler(this.host, this.login, this.password);
|
||||
}
|
||||
return this.systemHandler;
|
||||
}
|
||||
|
||||
public ICachedMessageQueueHandler getCachedMessageQueueHandler() throws AS400SecurityException, IOException {
|
||||
return new CachedMessageQueueHandler(this.host, this.login, this.password);
|
||||
}
|
||||
|
||||
public IMessageQueueHandler getMessageQueueHandler() throws AS400SecurityException, IOException {
|
||||
return new MessageQueueHandler(this.host, this.login, this.password);
|
||||
}
|
||||
|
||||
public IJobQueueHandler getJobQueueHandler() throws AS400SecurityException, IOException {
|
||||
return new JobQueueHandler(this.host, this.login, this.password);
|
||||
}
|
||||
|
||||
public WorkWithProblemHandler getWrkPrbHandler() throws AS400SecurityException, IOException {
|
||||
return new WorkWithProblemHandler(this.host, this.login, this.password);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,249 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.dispatcher.check;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.ibm.as400.access.AS400SecurityException;
|
||||
import com.centreon.connector.as400.Conf;
|
||||
import com.centreon.connector.as400.ConnectorLogger;
|
||||
import com.centreon.connector.as400.client.impl.NetworkClient;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class CheckHandlerRunnable implements Runnable {
|
||||
|
||||
protected NetworkClient client = null;
|
||||
protected CheckDispatcher checkDispatcher = null;
|
||||
|
||||
public CheckHandlerRunnable(final NetworkClient client, final CheckDispatcher checkDispatcher) {
|
||||
this.client = client;
|
||||
this.checkDispatcher = checkDispatcher;
|
||||
}
|
||||
|
||||
public NetworkClient getClient() {
|
||||
return this.client;
|
||||
}
|
||||
|
||||
private ResponseData getErrorResponse(final String message) {
|
||||
return new ResponseData(ResponseData.statusError, message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
this.client.writeAnswer(this.handleAs400Args(this.client.getAs400CheckType()));
|
||||
}
|
||||
|
||||
protected ResponseData handleAs400Args(final String check) {
|
||||
ResponseData data = null;
|
||||
|
||||
final String[] args = null;
|
||||
final long now = System.currentTimeMillis();
|
||||
|
||||
try {
|
||||
if (check.equalsIgnoreCase("listDisks")) {
|
||||
data = this.listDisks();
|
||||
} else if (check.equalsIgnoreCase("listSubsystems")) {
|
||||
data = this.listSubsystems();
|
||||
} else if (check.equalsIgnoreCase("listJobs")) {
|
||||
data = this.listJobs();
|
||||
} else if (check.equalsIgnoreCase("getErrorMessageQueue")) {
|
||||
data = this.getErrorMessageQueue();
|
||||
} else if (check.equalsIgnoreCase("pageFault")) {
|
||||
data = this.checkPageFault();
|
||||
} else if (check.equalsIgnoreCase("getSystem")) {
|
||||
data = this.getSystem();
|
||||
} else if (check.equalsIgnoreCase("getJobQueues")) {
|
||||
data = this.getJobQueues();
|
||||
} else if (check.equalsIgnoreCase("executeCommand")) {
|
||||
data = this.executeCommand();
|
||||
} else if (check.equalsIgnoreCase("getNewMessageInMessageQueue")) {
|
||||
data = this.getNewMessageInMessageQueue();
|
||||
} else if (check.equalsIgnoreCase("workWithProblem")) {
|
||||
data = this.workWithProblem();
|
||||
} else if (check.equalsIgnoreCase("dumpAll")) {
|
||||
this.dumpAll();
|
||||
data = new ResponseData(ResponseData.statusOk, "dump done");
|
||||
} else {
|
||||
data = new ResponseData(ResponseData.statusError, "unknown request : " + check);
|
||||
ConnectorLogger.getInstance().debug("unknown request : " + check);
|
||||
}
|
||||
} catch (final NumberFormatException e) {
|
||||
data = new ResponseData(ResponseData.statusError, e.getMessage());
|
||||
ConnectorLogger.getInstance().debug("Error during request", e);
|
||||
} catch (final AS400SecurityException e) {
|
||||
String error = "";
|
||||
if (e.getCause() != null) {
|
||||
error = e.getCause().getMessage();
|
||||
} else {
|
||||
error = e.getMessage();
|
||||
}
|
||||
data = new ResponseData(ResponseData.statusError, error);
|
||||
ConnectorLogger.getInstance().debug("Error during request", e);
|
||||
} catch (final IOException e) {
|
||||
data = new ResponseData(ResponseData.statusError, e.getMessage());
|
||||
ConnectorLogger.getInstance().debug("Error during request", e);
|
||||
} catch (final Exception e) {
|
||||
data = new ResponseData(ResponseData.statusError, e.getMessage());
|
||||
ConnectorLogger.getInstance().debug("Error during request", e);
|
||||
}
|
||||
|
||||
data.setRequestDuration(System.currentTimeMillis() - now);
|
||||
return data;
|
||||
}
|
||||
|
||||
private void dumpAll() {
|
||||
try {
|
||||
checkDispatcher.getSystemHandler().dumpSystem();
|
||||
} catch (Exception e) {
|
||||
ConnectorLogger.getInstance().error("Failed to dump system measures", e);
|
||||
throw new IllegalStateException("Failed to dump system measures", e);
|
||||
}
|
||||
}
|
||||
|
||||
private ResponseData workWithProblem() throws Exception {
|
||||
Object lang = this.client.getAs400Arg("lang");
|
||||
|
||||
final ResponseData data = this.checkDispatcher.getWrkPrbHandler().getProblems(
|
||||
lang != null ? lang.toString() : null);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
private ResponseData listDisks() throws Exception {
|
||||
Object diskName = this.client.getAs400Arg("diskName");
|
||||
|
||||
final ResponseData data = this.checkDispatcher.getDiskHandler().listDisks(
|
||||
diskName != null ? diskName.toString() : null);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
private ResponseData listJobs() throws Exception {
|
||||
ResponseData data = this.checkDispatcher.getJobHandler().listJobs();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
private ResponseData executeCommand() throws Exception {
|
||||
Object cmdName = this.client.getAs400Arg("cmdName");
|
||||
|
||||
final ResponseData data = this.checkDispatcher.getCommandHandler().executeCommand(
|
||||
cmdName != null ? cmdName.toString() : null);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
private ResponseData getJobQueues() throws Exception {
|
||||
List<Map<String , String>> queues = this.client.getAs400ArgList("queues");
|
||||
|
||||
if (queues == null || queues.size() == 0) {
|
||||
return this.getErrorResponse("Invalid arguments. please set jobQueueNames");
|
||||
}
|
||||
|
||||
final ResponseData data = this.checkDispatcher.getJobQueueHandler().getJobQueues(queues);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
private ResponseData getSystem() throws Exception {
|
||||
final ResponseData data = this.checkDispatcher.getSystemHandler().getSystem();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
private ResponseData checkPageFault() throws Exception {
|
||||
final ResponseData data = this.checkDispatcher.getSystemHandler().getPageFault();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
private ResponseData getErrorMessageQueue() throws NumberFormatException, Exception {
|
||||
Object arg = this.client.getAs400Arg("messageQueuePath");
|
||||
String messageQueuePath = (arg != null ? arg.toString() : null);
|
||||
|
||||
arg = this.client.getAs400Arg("messageIdfilterPattern");
|
||||
String messageIdfilterPattern = (arg != null ? arg.toString() : null);
|
||||
|
||||
if (messageQueuePath == null) {
|
||||
return this.getErrorResponse("Invalid arguments. please set messageQueuePath");
|
||||
}
|
||||
|
||||
int minSeverityLevel;
|
||||
try {
|
||||
minSeverityLevel = Integer.parseInt(this.client.getAs400Arg("minSeverityLevel").toString());
|
||||
} catch (final Exception e) {
|
||||
minSeverityLevel = Integer.MIN_VALUE;
|
||||
}
|
||||
int maxSeverityLevel;
|
||||
try {
|
||||
maxSeverityLevel = Integer.parseInt(this.client.getAs400Arg("maxSeverityLevel").toString());
|
||||
} catch (final Exception e) {
|
||||
maxSeverityLevel = Integer.MAX_VALUE;
|
||||
}
|
||||
|
||||
final ResponseData data = this.checkDispatcher.getMessageQueueHandler().getErrorMessageQueue(
|
||||
messageQueuePath, messageIdfilterPattern, minSeverityLevel, maxSeverityLevel);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
private ResponseData getNewMessageInMessageQueue() throws NumberFormatException, Exception {
|
||||
Object arg = this.client.getAs400Arg("messageQueuePath");
|
||||
String messageQueuePath = (arg != null ? arg.toString() : null);
|
||||
|
||||
arg = this.client.getAs400Arg("messageIdfilterPattern");
|
||||
String messageIdfilterPattern = (arg != null ? arg.toString() : null);
|
||||
|
||||
if (messageQueuePath == null) {
|
||||
return this.getErrorResponse("Invalid arguments. please set messageQueuePath");
|
||||
}
|
||||
|
||||
int minSeverityLevel;
|
||||
try {
|
||||
minSeverityLevel = Integer.parseInt(this.client.getAs400Arg("minSeverityLevel").toString());
|
||||
} catch (final Exception e) {
|
||||
minSeverityLevel = Integer.MIN_VALUE;
|
||||
}
|
||||
int maxSeverityLevel;
|
||||
try {
|
||||
maxSeverityLevel = Integer.parseInt(this.client.getAs400Arg("maxSeverityLevel").toString());
|
||||
} catch (final Exception e) {
|
||||
maxSeverityLevel = Integer.MAX_VALUE;
|
||||
}
|
||||
|
||||
final ResponseData data = this.checkDispatcher.getCachedMessageQueueHandler().getNewMessageInMessageQueue(
|
||||
messageQueuePath, messageIdfilterPattern, minSeverityLevel, maxSeverityLevel);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
private ResponseData listSubsystems() throws Exception {
|
||||
final ResponseData data = this.checkDispatcher.getSubSystemHandler().listSubsystems();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.dispatcher.check;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Garnier Quentin
|
||||
*/
|
||||
public class InputData {
|
||||
private String login = null;
|
||||
private String password = null;
|
||||
private String host = null;
|
||||
private String command = null;
|
||||
Map<String, Object> args = null;
|
||||
|
||||
public InputData() {
|
||||
}
|
||||
|
||||
public String getLogin() {
|
||||
return this.login;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return this.password;
|
||||
}
|
||||
|
||||
public String getHost() {
|
||||
return this.host;
|
||||
}
|
||||
|
||||
public String getCommand() {
|
||||
return this.command;
|
||||
}
|
||||
|
||||
public Object getArg(String name) {
|
||||
if (args == null) {
|
||||
return null;
|
||||
}
|
||||
return this.args.get(name);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.dispatcher.check;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class ResponseData {
|
||||
public static final int statusOk = 0;
|
||||
public static final int statusError = 1;
|
||||
|
||||
private long requestDuration = 0;
|
||||
private int code = 0;
|
||||
private String message = null;
|
||||
private ArrayList result = new ArrayList();
|
||||
|
||||
public ResponseData() {
|
||||
}
|
||||
|
||||
public ResponseData(final int code, final String message) {
|
||||
this.message = message;
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return this.code;
|
||||
}
|
||||
|
||||
public void setCode(final int code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public ArrayList getResult() {
|
||||
return this.result;
|
||||
}
|
||||
|
||||
public Object getAttrResult(int index, String attr) {
|
||||
HashMap<String, Object> attrs = (HashMap<String, Object>)this.result.get(index);
|
||||
return attrs.get(attr);
|
||||
}
|
||||
|
||||
public void setResult(final ArrayList result) {
|
||||
this.result = result;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return this.message;
|
||||
}
|
||||
|
||||
public void setMessage(final String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public long getRequestDuration() {
|
||||
return this.requestDuration;
|
||||
}
|
||||
|
||||
public void setRequestDuration(final long requestDuration) {
|
||||
this.requestDuration = requestDuration;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.dispatcher.client;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import com.ibm.as400.access.AS400SecurityException;
|
||||
import com.centreon.connector.as400.client.impl.NetworkClient;
|
||||
import com.centreon.connector.as400.daemon.DelayedConnectionException;
|
||||
|
||||
public interface ClientDispatcher {
|
||||
void dispatch(final NetworkClient client) throws AS400SecurityException, IOException, DelayedConnectionException, Exception;
|
||||
}
|
|
@ -0,0 +1,88 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.dispatcher.client.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import com.ibm.as400.access.AS400SecurityException;
|
||||
import com.centreon.connector.as400.ConnectorLogger;
|
||||
import com.centreon.connector.as400.client.impl.NetworkClient;
|
||||
import com.centreon.connector.as400.daemon.DelayedConnectionException;
|
||||
import com.centreon.connector.as400.dispatcher.check.CheckDispatcher;
|
||||
import com.centreon.connector.as400.dispatcher.client.ClientDispatcher;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class ClientDispatcherImpl implements ClientDispatcher {
|
||||
|
||||
private volatile Map<CheckDispatcher, Long> pool = null;
|
||||
|
||||
private static ClientDispatcherImpl instance = null;
|
||||
|
||||
public static synchronized ClientDispatcherImpl getInstance() {
|
||||
if (ClientDispatcherImpl.instance == null) {
|
||||
ClientDispatcherImpl.instance = new ClientDispatcherImpl();
|
||||
}
|
||||
return ClientDispatcherImpl.instance;
|
||||
}
|
||||
|
||||
private ClientDispatcherImpl() {
|
||||
this.pool = new ConcurrentHashMap<CheckDispatcher, Long>();
|
||||
}
|
||||
|
||||
private synchronized CheckDispatcher createNewCheckDispatcher(final String host, final String login,
|
||||
final String password) throws AS400SecurityException, IOException, DelayedConnectionException, Exception {
|
||||
|
||||
ConnectorLogger.getInstance().info("create new As400 : " + host);
|
||||
|
||||
CheckDispatcher resource = null;
|
||||
resource = new CheckDispatcher(host, login, password);
|
||||
|
||||
this.pool.put(resource, System.currentTimeMillis());
|
||||
|
||||
return resource;
|
||||
}
|
||||
|
||||
private CheckDispatcher getAs400(final String host, final String login, final String password)
|
||||
throws AS400SecurityException, IOException, DelayedConnectionException, Exception {
|
||||
|
||||
for (final CheckDispatcher resource : this.pool.keySet()) {
|
||||
if (resource.getHost().equalsIgnoreCase(host) && resource.getLogin().equalsIgnoreCase(login)
|
||||
&& resource.getPassword().equalsIgnoreCase(password)) {
|
||||
this.pool.put(resource, System.currentTimeMillis());
|
||||
return resource;
|
||||
}
|
||||
}
|
||||
|
||||
return this.createNewCheckDispatcher(host, login, password);
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void dispatch(final NetworkClient client)
|
||||
throws AS400SecurityException, IOException, DelayedConnectionException, Exception {
|
||||
final CheckDispatcher checkDispatcher = this.getAs400(client.getAs400Host(), client.getAs400Login(),
|
||||
client.getAs400Password());
|
||||
checkDispatcher.dispatch(client);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.parser;
|
||||
|
||||
import org.apache.commons.cli.ParseException;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class InvalidOptionException extends ParseException {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 3542190890196517483L;
|
||||
|
||||
public InvalidOptionException(final String reason) {
|
||||
super(reason);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,112 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.parser;
|
||||
|
||||
import org.apache.commons.cli.Option;
|
||||
import org.apache.commons.cli.OptionBuilder;
|
||||
import org.apache.commons.cli.OptionGroup;
|
||||
import org.apache.commons.cli.Options;
|
||||
|
||||
/**
|
||||
* @author Lamotte Jean-Baptiste
|
||||
*/
|
||||
public class OptionFactory {
|
||||
|
||||
private OptionFactory() {
|
||||
|
||||
}
|
||||
|
||||
private static synchronized Options addAs400Options(final Options options) {
|
||||
|
||||
OptionBuilder.withArgName("host");
|
||||
OptionBuilder.hasArg();
|
||||
OptionBuilder.withDescription("dns name or ip address");
|
||||
OptionBuilder.withLongOpt("host");
|
||||
final Option host = OptionBuilder.create('H');
|
||||
|
||||
OptionBuilder.withArgName("login");
|
||||
OptionBuilder.hasArg();
|
||||
OptionBuilder.withDescription("login");
|
||||
OptionBuilder.withLongOpt("login");
|
||||
final Option login = OptionBuilder.create('l');
|
||||
|
||||
OptionBuilder.withArgName("password");
|
||||
OptionBuilder.hasArg();
|
||||
OptionBuilder.withDescription("password");
|
||||
OptionBuilder.withLongOpt("password");
|
||||
final Option password = OptionBuilder.create('p');
|
||||
|
||||
OptionBuilder.withArgName("check");
|
||||
OptionBuilder.hasArgs();
|
||||
OptionBuilder.withDescription("check command type");
|
||||
OptionBuilder.withLongOpt("check");
|
||||
final Option check = OptionBuilder.create('C');
|
||||
|
||||
OptionBuilder.withArgName("args");
|
||||
OptionBuilder.hasArgs();
|
||||
OptionBuilder.withDescription("arguments for as400 request");
|
||||
OptionBuilder.withLongOpt("args");
|
||||
final Option args = OptionBuilder.create('A');
|
||||
|
||||
options.addOption(host);
|
||||
options.addOption(login);
|
||||
options.addOption(password);
|
||||
options.addOption(check);
|
||||
options.addOption(args);
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the options.
|
||||
*
|
||||
* @return the options
|
||||
*/
|
||||
public static synchronized Options getOptions() {
|
||||
Options options = new Options();
|
||||
|
||||
final Option daemon = Option.builder("D")
|
||||
.argName("port")
|
||||
.hasArg()
|
||||
.desc("Start the daemon on the specified port")
|
||||
.longOpt("port")
|
||||
.build();
|
||||
|
||||
// Création des option générique
|
||||
final Option help = new Option("h", "help", false, "print this message");
|
||||
final Option version = new Option("v", "version", false, "print the version information and exit");
|
||||
final Option jmx = new Option("I", "as400", false, "Request type : as400");
|
||||
|
||||
// Ajout des options de groupe unique
|
||||
final OptionGroup startType = new OptionGroup();
|
||||
startType.addOption(daemon);
|
||||
startType.addOption(jmx);
|
||||
startType.addOption(help);
|
||||
startType.addOption(version);
|
||||
startType.setRequired(true);
|
||||
options.addOptionGroup(startType);
|
||||
|
||||
options = OptionFactory.addAs400Options(options);
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,83 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.utils;
|
||||
|
||||
import java.security.GeneralSecurityException;
|
||||
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.spec.IvParameterSpec;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
|
||||
import com.centreon.connector.as400.ConnectorLogger;
|
||||
|
||||
public final class BlowFishUtils {
|
||||
|
||||
private static final String BLOWFISH = "Blowfish"; //$NON-NLS-1$
|
||||
private static final String TRANSFORMATION = "Blowfish/CBC/PKCS5Padding"; //$NON-NLS-1$
|
||||
private static final byte[] KEY = "3fe7b4d9e0b50a".getBytes(StringUtils.CHARSET); //$NON-NLS-1$
|
||||
private static final byte[] IV_BYTES = "00000000".getBytes(StringUtils.CHARSET); //$NON-NLS-1$
|
||||
|
||||
public static final String decrypt(final String cryptedMessage) {
|
||||
if (cryptedMessage == null) {
|
||||
return StringUtils.EMPTY_STRING;
|
||||
}
|
||||
try {
|
||||
final byte[] buffer = HexUtils.hexToBuffer(cryptedMessage);
|
||||
return new String(BlowFishUtils.decrypt(buffer, BlowFishUtils.KEY), StringUtils.CHARSET);
|
||||
} catch (final Exception e) {
|
||||
ConnectorLogger.getInstance().error("", e);
|
||||
return StringUtils.EMPTY_STRING;
|
||||
}
|
||||
}
|
||||
|
||||
public static final String encrypt(final String message) {
|
||||
if (message == null) {
|
||||
return StringUtils.EMPTY_STRING;
|
||||
}
|
||||
try {
|
||||
final byte[] crypted = BlowFishUtils.encrypt(message.getBytes(StringUtils.CHARSET), BlowFishUtils.KEY);
|
||||
return HexUtils.bufferToHex(crypted);
|
||||
} catch (final Exception e) {
|
||||
ConnectorLogger.getInstance().error("", e);
|
||||
return StringUtils.EMPTY_STRING;
|
||||
}
|
||||
}
|
||||
|
||||
private static final byte[] decrypt(final byte[] encrypted, final byte[] key) throws GeneralSecurityException {
|
||||
final SecretKeySpec skeySpec = new SecretKeySpec(key, BlowFishUtils.BLOWFISH);
|
||||
final Cipher cipher = Cipher.getInstance(BlowFishUtils.TRANSFORMATION);
|
||||
final IvParameterSpec ivs = new IvParameterSpec(BlowFishUtils.IV_BYTES);
|
||||
cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivs);
|
||||
return cipher.doFinal(encrypted);
|
||||
}
|
||||
|
||||
private static final byte[] encrypt(final byte[] messageBytes, final byte[] key) throws GeneralSecurityException {
|
||||
final SecretKeySpec skeySpec = new SecretKeySpec(key, BlowFishUtils.BLOWFISH);
|
||||
final Cipher cipher = Cipher.getInstance(BlowFishUtils.TRANSFORMATION);
|
||||
final IvParameterSpec ivs = new IvParameterSpec(BlowFishUtils.IV_BYTES);
|
||||
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivs);
|
||||
return cipher.doFinal(messageBytes);
|
||||
}
|
||||
|
||||
private BlowFishUtils() {
|
||||
// hide
|
||||
}
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.utils;
|
||||
|
||||
public final class HexUtils {
|
||||
|
||||
private static final char[] K_HEX_CHARS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',
|
||||
'F' };
|
||||
|
||||
public static String bufferToHex(final byte[] buffer) {
|
||||
return HexUtils.bufferToHex(buffer, 0, buffer.length);
|
||||
}
|
||||
|
||||
public static byte[] hexToBuffer(final String hex) {
|
||||
final byte[] bytes = new byte[hex.length() / 2];
|
||||
for (int i = 0; i < (hex.length() - 1); i += 2) {
|
||||
final String output = hex.substring(i, i + 2);
|
||||
bytes[i / 2] = (byte) Integer.parseInt(output, 16);
|
||||
}
|
||||
return bytes;
|
||||
}
|
||||
|
||||
private static void appendHexPair(final byte b, final StringBuilder hexString) {
|
||||
final char highNibble = HexUtils.K_HEX_CHARS[(b & 0xF0) >> 4];
|
||||
final char lowNibble = HexUtils.K_HEX_CHARS[b & 0x0F];
|
||||
hexString.append(highNibble);
|
||||
hexString.append(lowNibble);
|
||||
}
|
||||
|
||||
private static String bufferToHex(final byte[] buffer, final int startOffset, final int length) {
|
||||
final StringBuilder hexString = new StringBuilder(2 * length);
|
||||
final int endOffset = startOffset + length;
|
||||
for (int i = startOffset; i < endOffset; i++) {
|
||||
HexUtils.appendHexPair(buffer[i], hexString);
|
||||
}
|
||||
return hexString.toString();
|
||||
}
|
||||
|
||||
private HexUtils() {
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,125 @@
|
|||
/*
|
||||
* Copyright 2021 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 com.centreon.connector.as400.utils;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
import com.centreon.connector.as400.ConnectorLogger;
|
||||
|
||||
public final class StringUtils {
|
||||
|
||||
public static final Charset CHARSET = Charset.forName("UTF-8"); //$NON-NLS-1$
|
||||
|
||||
public static final String NEW_LINE = System.getProperty("line.separator"); //$NON-NLS-1$
|
||||
public static final String EMPTY_STRING = ""; //$NON-NLS-1$
|
||||
public static final String SLASH = "/"; //$NON-NLS-1$
|
||||
public static final String VIRGULE = ","; //$NON-NLS-1$
|
||||
|
||||
public static boolean isNullEmptyOrBlank(final String string) {
|
||||
if (string == null) {
|
||||
return true;
|
||||
}
|
||||
if (string.length() == 0) {
|
||||
return true;
|
||||
}
|
||||
if (string.trim().length() == 0) {
|
||||
return true;
|
||||
}
|
||||
return "null".equalsIgnoreCase(string.trim()); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
public static boolean isOneNullEmptyOrBlank(final String... args) {
|
||||
for (final String arg : args) {
|
||||
if (StringUtils.isNullEmptyOrBlank(arg)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static String nonNullString(final String string) {
|
||||
if (string == null) {
|
||||
return StringUtils.EMPTY_STRING;
|
||||
}
|
||||
return string;
|
||||
}
|
||||
|
||||
public static double parseDouble(final String input) {
|
||||
return StringUtils.parseDouble(input, -1d);
|
||||
}
|
||||
|
||||
public static double parseDouble(final String input, final double errorValue) {
|
||||
if ((input == null) || (input.length() == 0)) {
|
||||
return errorValue;
|
||||
}
|
||||
try {
|
||||
return Double.parseDouble(input);
|
||||
} catch (final Exception e) {
|
||||
ConnectorLogger.getInstance().error("", e);
|
||||
return errorValue;
|
||||
}
|
||||
}
|
||||
|
||||
public static int parseInt(final String input) {
|
||||
return StringUtils.parseInt(input, -1);
|
||||
}
|
||||
|
||||
public static int parseInt(final String input, final int errorValue) {
|
||||
if ((input == null) || (input.length() == 0)) {
|
||||
return errorValue;
|
||||
}
|
||||
try {
|
||||
return Integer.parseInt(input);
|
||||
} catch (final Exception e) {
|
||||
ConnectorLogger.getInstance().error("", e);
|
||||
return errorValue;
|
||||
}
|
||||
}
|
||||
|
||||
public static long parseLong(final String input) {
|
||||
return StringUtils.parseLong(input, Long.MIN_VALUE);
|
||||
}
|
||||
|
||||
public static long parseLong(final String input, final long errorValue) {
|
||||
if ((input == null) || (input.length() == 0)) {
|
||||
return errorValue;
|
||||
}
|
||||
try {
|
||||
return Long.parseLong(input);
|
||||
} catch (final Exception e) {
|
||||
ConnectorLogger.getInstance().error("", e);
|
||||
return errorValue;
|
||||
}
|
||||
}
|
||||
|
||||
public static String toHex(final int value, final int length) {
|
||||
String hex = Integer.toHexString(value);
|
||||
while (hex.length() < length) {
|
||||
hex = '0' + hex;
|
||||
}
|
||||
return hex;
|
||||
}
|
||||
|
||||
private StringUtils() {
|
||||
// hide constructor
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
Open List of Jobs (QGYOLJOB) API
|
||||
Retrieve Job Queue Information (QSPRJOBQ) API
|
||||
List Subsystem Job Queues (QWDLSJBQ) API
|
||||
Open List of ASPs (QYASPOL) API
|
|
@ -0,0 +1,55 @@
|
|||
<pcml version="1.0">
|
||||
|
||||
Offset Type Field
|
||||
Dec Hex
|
||||
0 0 BINARY(4) Bytes returned
|
||||
4 4 BINARY(4) Bytes availablea
|
||||
8 8 CHAR(10) Job queue name
|
||||
18 12 CHAR(10) Job queue library name
|
||||
28 1C CHAR(10) Operator controlled
|
||||
38 26 CHAR(10) Authority to check
|
||||
48 30 BINARY(4) Number of jobs
|
||||
52 34 CHAR(10) Job queue status
|
||||
62 3E CHAR(10) Subsystem name
|
||||
72 48 CHAR(50) Text description
|
||||
122 7A CHAR(10) Subsystem library name
|
||||
132 84 BINARY(4) Sequence number
|
||||
136 88 BINARY(4) Maximum active
|
||||
140 8C BINARY(4) Current active
|
||||
|
||||
<!-- Format JOBQ0100 - Other formats are available -->
|
||||
<struct name="jobq0100">
|
||||
<data name="bytesReturned" type="int" length="4" usage="output"/>
|
||||
<data name="bytesAvailable" type="int" length="4" usage="output"/>
|
||||
<data name="jobqName" type="char" length="10" usage="output"/>
|
||||
<data name="jobqLibName" type="char" length="10" usage="output"/>
|
||||
<data name="operatorControlled" type="char" length="10" usage="output"/>
|
||||
<data name="authorityCheck" type="char" length="10" usage="output"/>
|
||||
<data name="numberOfJob" type="int" length="4" usage="output"/>
|
||||
<data name="jobQueueStatus" type="char" length="10" usage="output"/>
|
||||
<data name="subSystemName" type="char" length="10" usage="output"/>
|
||||
<data name="textDescription" type="char" length="50" usage="output"/>
|
||||
<data name="subSystemLibName" type="char" length="10" usage="output"/>
|
||||
<data name="sequenceNumber" type="int" length="4" usage="output"/>
|
||||
<data name="maximumActive" type="int" length="4" usage="output"/>
|
||||
<data name="currentActive" type="int" length="4" usage="output"/>
|
||||
</struct>
|
||||
|
||||
|
||||
|
||||
1 Receiver variable Output Char(*)
|
||||
2 Length of receiver variable Input Binary(4)
|
||||
3 Format name Input Char(8)
|
||||
4 Qualified job queue name Input Char(20)
|
||||
5 Error Code I/O Char(*)
|
||||
|
||||
<!-- Program QSPRJOBQ and its parameter list for retrieving JOBQ0100 format -->
|
||||
<program name="qsprjobq" path="/QSYS.lib/QSPRJOBQ.pgm">
|
||||
<data name="receiver" type="struct" struct="jobq0100" usage="output"/>
|
||||
<data name="receiverLength" type="int" length="4" usage="input" />
|
||||
<data name="format" type="char" length="8" usage="input" init="JOBQ0100"/>
|
||||
<data name="qualifiedJobQueueName" type="char" length="20" usage="input"/>
|
||||
<data name="errorCode" type="int" length="4" usage="input" init="0"/>
|
||||
</program>
|
||||
|
||||
</pcml>
|
|
@ -0,0 +1,153 @@
|
|||
<pcml version="1.0">
|
||||
|
||||
Offset Type Field
|
||||
Dec Hex
|
||||
0 0 BINARY(4) Bytes returned
|
||||
4 4 BINARY(4) Bytes available
|
||||
8 8 CHAR(10) Job queue name
|
||||
18 12 CHAR(10) Job queue library name
|
||||
28 1C CHAR(10) Operator controlled
|
||||
38 26 CHAR(10) Authority to check
|
||||
48 30 BINARY(4) Number of jobs
|
||||
52 34 CHAR(10) Job queue status
|
||||
62 3E CHAR(10) Subsystem name
|
||||
72 48 CHAR(10) Subsystem library name
|
||||
82 52 CHAR(50) Text description
|
||||
132 84 BINARY(4) Sequence Number
|
||||
136 88 BINARY(4) Maximum active
|
||||
140 8C BINARY(4) Current active
|
||||
|
||||
144 90 BINARY(4) Maximum active jobs with priority 1
|
||||
148 94 BINARY(4) Maximum active jobs with priority 2
|
||||
152 98 BINARY(4) Maximum active jobs with priority 3
|
||||
156 9C BINARY(4) Maximum active jobs with priority 4
|
||||
160 A0 BINARY(4) Maximum active jobs with priority 5
|
||||
164 A4 BINARY(4) Maximum active jobs with priority 6
|
||||
168 A8 BINARY(4) Maximum active jobs with priority 7
|
||||
172 AC BINARY(4) Maximum active jobs with priority 8
|
||||
176 B0 BINARY(4) Maximum active jobs with priority 9
|
||||
|
||||
180 B4 BINARY(4) Active jobs with priority 0
|
||||
184 B8 BINARY(4) Active jobs with priority 1
|
||||
188 BC BINARY(4) Active jobs with priority 2
|
||||
192 C0 BINARY(4) Active jobs with priority 3
|
||||
196 C4 BINARY(4) Active jobs with priority 4
|
||||
200 C8 BINARY(4) Active jobs with priority 5
|
||||
204 CC BINARY(4) Active jobs with priority 6
|
||||
208 D0 BINARY(4) Active jobs with priority 7
|
||||
212 D4 BINARY(4) Active jobs with priority 8
|
||||
216 D8 BINARY(4) Active jobs with priority 9
|
||||
|
||||
220 DC BINARY(4) Released jobs on queue with priority 0
|
||||
224 E0 BINARY(4) Released jobs on queue with priority 1
|
||||
228 E4 BINARY(4) Released jobs on queue with priority 2
|
||||
232 E8 BINARY(4) Released jobs on queue with priority 3
|
||||
236 EC BINARY(4) Released jobs on queue with priority 4
|
||||
240 F0 BINARY(4) Released jobs on queue with priority 5
|
||||
244 F4 BINARY(4) Released jobs on queue with priority 6
|
||||
248 F8 BINARY(4) Released jobs on queue with priority 7
|
||||
252 FC BINARY(4) Released jobs on queue with priority 8
|
||||
256 100 BINARY(4) Released jobs on queue with priority 9
|
||||
|
||||
260 104 BINARY(4) Scheduled jobs on queue with priority 0
|
||||
264 108 BINARY(4) Scheduled jobs on queue with priority 1
|
||||
268 10C BINARY(4) Scheduled jobs on queue with priority 2
|
||||
272 110 BINARY(4) Scheduled jobs on queue with priority 3
|
||||
276 114 BINARY(4) Scheduled jobs on queue with priority 4
|
||||
280 118 BINARY(4) Scheduled jobs on queue with priority 5
|
||||
284 11C BINARY(4) Scheduled jobs on queue with priority 6
|
||||
288 120 BINARY(4) Scheduled jobs on queue with priority 7
|
||||
292 124 BINARY(4) Scheduled jobs on queue with priority 8
|
||||
296 128 BINARY(4) Scheduled jobs on queue with priority 9
|
||||
|
||||
300 12C BINARY(4) Held jobs on queue with priority 0
|
||||
304 130 BINARY(4) Held jobs on queue with priority 1
|
||||
308 134 BINARY(4) Held jobs on queue with priority 2
|
||||
312 138 BINARY(4) Held jobs on queue with priority 3
|
||||
316 13C BINARY(4) Held jobs on queue with priority 4
|
||||
320 140 BINARY(4) Held jobs on queue with priority 5
|
||||
324 144 BINARY(4) Held jobs on queue with priority 6
|
||||
328 148 BINARY(4) Held jobs on queue with priority 7
|
||||
332 14C BINARY(4) Held jobs on queue with priority 8
|
||||
336 150 BINARY(4) Held jobs on queue with priority 9
|
||||
|
||||
<!-- Format JOBQ0200 - Other formats are available -->
|
||||
<struct name="jobq0200">
|
||||
|
||||
<data name="bytesReturned" type="int" length="4" usage="output"/>
|
||||
<data name="bytesAvailable" type="int" length="4" usage="output"/>
|
||||
<data name="jobqName" type="char" length="10" usage="output"/>
|
||||
<data name="jobqLibName" type="char" length="10" usage="output"/>
|
||||
<data name="operatorControlled" type="char" length="10" usage="output"/>
|
||||
<data name="authorityCheck" type="char" length="10" usage="output"/>
|
||||
<data name="numberOfJob" type="int" length="4" usage="output"/>
|
||||
<data name="jobQueueStatus" type="char" length="10" usage="output"/>
|
||||
<data name="subSystemName" type="char" length="10" usage="output"/>
|
||||
<data name="subSystemLibName" type="char" length="10" usage="output"/>
|
||||
<data name="textDescription" type="char" length="50" usage="output"/>
|
||||
<data name="sequenceNumber" type="int" length="4" usage="output"/>
|
||||
<data name="maximumActive" type="int" length="4" usage="output"/>
|
||||
<data name="currentActive" type="int" length="4" usage="output"/>
|
||||
|
||||
<data name="maxActiveJobPriority1" type="int" length="4" usage="output"/>
|
||||
<data name="maxActiveJobPriority2" type="int" length="4" usage="output"/>
|
||||
<data name="maxActiveJobPriority3" type="int" length="4" usage="output"/>
|
||||
<data name="maxActiveJobPriority4" type="int" length="4" usage="output"/>
|
||||
<data name="maxActiveJobPriority5" type="int" length="4" usage="output"/>
|
||||
<data name="maxActiveJobPriority6" type="int" length="4" usage="output"/>
|
||||
<data name="maxActiveJobPriority7" type="int" length="4" usage="output"/>
|
||||
<data name="maxActiveJobPriority8" type="int" length="4" usage="output"/>
|
||||
<data name="maxActiveJobPriority9" type="int" length="4" usage="output"/>
|
||||
|
||||
<data name="activeJobPriority0" type="int" length="4" usage="output"/>
|
||||
<data name="activeJobPriority1" type="int" length="4" usage="output"/>
|
||||
<data name="activeJobPriority2" type="int" length="4" usage="output"/>
|
||||
<data name="activeJobPriority3" type="int" length="4" usage="output"/>
|
||||
<data name="activeJobPriority4" type="int" length="4" usage="output"/>
|
||||
<data name="activeJobPriority5" type="int" length="4" usage="output"/>
|
||||
<data name="activeJobPriority6" type="int" length="4" usage="output"/>
|
||||
<data name="activeJobPriority7" type="int" length="4" usage="output"/>
|
||||
<data name="activeJobPriority8" type="int" length="4" usage="output"/>
|
||||
<data name="activeJobPriority9" type="int" length="4" usage="output"/>
|
||||
|
||||
<data name="scheduledJobOnQueuePriority0" type="int" length="4" usage="output"/>
|
||||
<data name="scheduledJobOnQueuePriority1" type="int" length="4" usage="output"/>
|
||||
<data name="scheduledJobOnQueuePriority2" type="int" length="4" usage="output"/>
|
||||
<data name="scheduledJobOnQueuePriority3" type="int" length="4" usage="output"/>
|
||||
<data name="scheduledJobOnQueuePriority4" type="int" length="4" usage="output"/>
|
||||
<data name="scheduledJobOnQueuePriority5" type="int" length="4" usage="output"/>
|
||||
<data name="scheduledJobOnQueuePriority6" type="int" length="4" usage="output"/>
|
||||
<data name="scheduledJobOnQueuePriority7" type="int" length="4" usage="output"/>
|
||||
<data name="scheduledJobOnQueuePriority8" type="int" length="4" usage="output"/>
|
||||
<data name="scheduledJobOnQueuePriority9" type="int" length="4" usage="output"/>
|
||||
|
||||
<data name="heldJobOnQueuePriority0" type="int" length="4" usage="output"/>
|
||||
<data name="heldJobOnQueuePriority1" type="int" length="4" usage="output"/>
|
||||
<data name="heldJobOnQueuePriority2" type="int" length="4" usage="output"/>
|
||||
<data name="heldJobOnQueuePriority3" type="int" length="4" usage="output"/>
|
||||
<data name="heldJobOnQueuePriority4" type="int" length="4" usage="output"/>
|
||||
<data name="heldJobOnQueuePriority5" type="int" length="4" usage="output"/>
|
||||
<data name="heldJobOnQueuePriority6" type="int" length="4" usage="output"/>
|
||||
<data name="heldJobOnQueuePriority7" type="int" length="4" usage="output"/>
|
||||
<data name="heldJobOnQueuePriority8" type="int" length="4" usage="output"/>
|
||||
<data name="heldJobOnQueuePriority9" type="int" length="4" usage="output"/>
|
||||
</struct>
|
||||
|
||||
|
||||
|
||||
1 Receiver variable Output Char(*)
|
||||
2 Length of receiver variable Input Binary(4)
|
||||
3 Format name Input Char(8)
|
||||
4 Qualified job queue name Input Char(20)
|
||||
5 Error Code I/O Char(*)
|
||||
|
||||
<!-- Program QSPRJOBQ and its parameter list for retrieving JOBQ0200 format -->
|
||||
<program name="qsprjobq" path="/QSYS.lib/QSPRJOBQ.pgm">
|
||||
<data name="receiver" type="struct" struct="jobq0200" usage="output"/>
|
||||
<data name="receiverLength" type="int" length="4" usage="input" />
|
||||
<data name="format" type="char" length="8" usage="input" init="JOBQ0200"/>
|
||||
<data name="qualifiedJobQueueName" type="char" length="20" usage="input"/>
|
||||
<data name="errorCode" type="int" length="4" usage="input" init="0"/>
|
||||
</program>
|
||||
|
||||
</pcml>
|
|
@ -0,0 +1,78 @@
|
|||
<pcml version="1.0">
|
||||
|
||||
<!-- PCML source for calling "Open List of ASPs (QYASPOL) API" (QYASPOL) API -->
|
||||
<!-- http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=%2Fapis%2Fqyaspol.htm -->
|
||||
|
||||
<!-- YASP0100 -->
|
||||
<struct name="yasp0100">
|
||||
<data name="aspNumber" type="int" length="4" />
|
||||
<data name="resourceName" type="char" length="10" />
|
||||
<data name="deviceDescriptionName" type="char" length="10" />
|
||||
<data name="version" type="int" length="4" />
|
||||
<data name="aspUsage" type="int" length="4" />
|
||||
<data name="aspStatus" type="int" length="4" />
|
||||
<data name="databaseName" type="char" length="18" />
|
||||
<data name="primaryAspName" type="char" length="10" />
|
||||
</struct>
|
||||
|
||||
<!-- List information structure (common for "Open List" type APIs) -->
|
||||
<struct name="listInfo">
|
||||
<data name="totalRcds" type="int" length="4" />
|
||||
<data name="rcdsReturned" type="int" length="4" />
|
||||
<data name="rqsHandle" type="byte" length="4" />
|
||||
<data name="rcdLength" type="int" length="4" />
|
||||
<data name="infoComplete" type="char" length="1" />
|
||||
<data name="dateCreated" type="char" length="7" />
|
||||
<data name="timeCreated" type="char" length="6" />
|
||||
<data name="listStatus" type="char" length="1" />
|
||||
<data type="byte" length="1" />
|
||||
<data name="lengthOfInfo" type="int" length="4" />
|
||||
<data name="firstRecord" type="int" length="4" />
|
||||
<data type="byte" length="40" />
|
||||
</struct>
|
||||
|
||||
<struct name="filterInformation" usage="input">
|
||||
<data name="sizeOfFileEntry" type="int" length="4" init="16"/>
|
||||
<data name="filterKey" type="int" length="4" init="1"/>
|
||||
<data name="sizeOfFilterData" type="int" length="4" init="4"/>
|
||||
<data name="filterData" type="int" length="4" init="1"/>
|
||||
</struct>
|
||||
|
||||
<!-- Program QYASPOL and its parameter list-->
|
||||
<program name="qyaspol" path="/QSYS.lib/QGY.lib/QYASPOL.pgm" parseorder="listInfo receiver">
|
||||
<!-- 1 Receiver variable Output Char(*) -->
|
||||
<data name="receiver" type="struct" struct="yasp0100" usage="output" count="listInfo.rcdsReturned" outputsize="receiverLength" />
|
||||
<!-- 2 Length of receiver variable Input Binary(4) -->
|
||||
<data name="receiverLength" type="int" length="4" usage="input" init="16384" />
|
||||
<!-- 3 List information Output Char(80) -->
|
||||
<data name="listInfo" type="struct" struct="listInfo" usage="output" />
|
||||
<!-- 4 Number of records to return Input Binary(4) -->
|
||||
<data name="rcdsToReturn" type="int" length="4" usage="input" init="264" />
|
||||
<!-- 5 Number of filters Input Binary(4) -->
|
||||
<data name="numberOfFilters" type="int" length="4" usage="input" init="1" />
|
||||
<!-- 6 Filter information Input Char(*) -->
|
||||
<data name="filterInfo" type="struct" struct="filterInformation" usage="input" />
|
||||
<!-- 7 Format name Input Char(8) -->
|
||||
<data name="format" type="char" length="8" usage="input" init="YASP0100" />
|
||||
<!-- 8 Error Code I/O Char(*) -->
|
||||
<data name="errorCode" type="int" length="4" usage="input" init="0" />
|
||||
|
||||
</program>
|
||||
|
||||
<!-- Program QGYGTLE returned additional "records" from the list created by QYASPOL. -->
|
||||
<program name="qgygtle" path="/QSYS.lib/QGY.lib/QGYGTLE.pgm" parseorder="listInfo receiver">
|
||||
<data name="receiver" type="struct" struct="yasp0100" usage="output" count="listInfo.rcdsReturned" outputsize="receiverLength" />
|
||||
<data name="receiverLength" type="int" length="4" usage="input" init="16384" />
|
||||
<data name="requestHandle" type="byte" length="4" usage="input" />
|
||||
<data name="listInfo" type="struct" struct="listInfo" usage="output" />
|
||||
<data name="rcdsToReturn" type="int" length="4" usage="input" init="264" />
|
||||
<data name="startingRcd" type="int" length="4" usage="input" />
|
||||
<data name="errorCode" type="int" length="4" usage="input" init="0" />
|
||||
</program>
|
||||
|
||||
<!-- Program QGYCLST closes the list, freeing resources on the server -->
|
||||
<program name="qgyclst" path="/QSYS.lib/QGY.lib/QGYCLST.pgm" >
|
||||
<data name="requestHandle" type="byte" length="4" usage="input" />
|
||||
<data name="errorCode" type="int" length="4" usage="input" init="0" />
|
||||
</program>
|
||||
</pcml>
|
|
@ -0,0 +1,151 @@
|
|||
<pcml version="1.0">
|
||||
|
||||
<!-- PCML source for calling "Open List of ASPs (QYASPOL) API" (QYASPOL) API -->
|
||||
<!-- http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=%2Fapis%2Fqyaspol.htm -->
|
||||
|
||||
0 0 BINARY(4) ASP number
|
||||
4 4 CHAR(4) Disk type
|
||||
8 8 CHAR(4) Disk model
|
||||
12 C CHAR(10) Disk serial number
|
||||
22 16 CHAR(10) Resource name
|
||||
32 20 BINARY(4) Disk unit number
|
||||
36 24 BINARY(4) Disk capacity
|
||||
40 28 BINARY(4) Disk storage available
|
||||
44 2C BINARY(4) Disk storage reserved for system
|
||||
48 30 CHAR(1) Mirrored unit protected
|
||||
49 31 CHAR(1) Mirrored unit reported
|
||||
50 32 CHAR(1) Mirrored unit status
|
||||
51 33 CHAR(1) Reserved
|
||||
52 34 BINARY(4) Unit control
|
||||
56 38 BINARY(4) Blocks transferred to main storage
|
||||
60 3C BINARY(4) Blocks transferred from main storage
|
||||
64 40 BINARY(4) Requests for data transfer to main storage
|
||||
68 44 BINARY(4) Requests for data transfer from main storage
|
||||
72 48 BINARY(4) Permanent blocks transferred from main storage
|
||||
76 4C BINARY(4) Requests for permanent data transfer from main storage
|
||||
80 50 BINARY(4) Sample count
|
||||
84 64 BINARY(4) Not busy count
|
||||
88 68 CHAR(1) Compression status
|
||||
89 69 CHAR(1) Disk protection type
|
||||
90 6A CHAR(1) Compressed unit
|
||||
91 6B CHAR(1) Storage allocation restricted unit
|
||||
92 6C CHAR(1) Availability parity set unit
|
||||
93 6D CHAR(1) Multiple connection unit
|
||||
|
||||
<!-- YASP0300 -->
|
||||
<struct name="yasp0300">
|
||||
<data name="aspNumber" type="int" length="4" />
|
||||
<data name="diskType" type="char" length="4" />
|
||||
<data name="diskModel" type="char" length="4" />
|
||||
<data name="diskSerialNumber" type="char" length="10" />
|
||||
<data name="resourceName" type="char" length="10" />
|
||||
<data name="diskUnitNumber" type="int" length="4" />
|
||||
<data name="diskCapacity" type="int" length="4" />
|
||||
<data name="diskStorageAvailable" type="int" length="4" />
|
||||
<data name="diskStorageReservedForSystem" type="int" length="4" />
|
||||
<data name="mirroredUnitProtected" type="char" length="1" />
|
||||
<data name="mirroredUnitReported" type="char" length="1" />
|
||||
<data name="mirroredUnitStatus" type="char" length="1" />
|
||||
<data name="reserved" type="char" length="1" />
|
||||
<data name="unitControl" type="int" length="4" />
|
||||
<data name="blockTransferredToMainStorage" type="int" length="4" />
|
||||
<data name="blockTransferredFromMainStorage" type="int" length="4" />
|
||||
<data name="requestForDataToMainStorage" type="int" length="4" />
|
||||
<data name="requestForDataForMainStorage" type="int" length="4" />
|
||||
<data name="requestForPermanentFromMainStorage" type="int" length="4" />
|
||||
<data name="sampleCount" type="int" length="4" />
|
||||
<data name="notBusyCount" type="int" length="4" />
|
||||
<data name="compressionStatus" type="char" length="1" />
|
||||
<data name="diskProtectionType" type="char" length="1" />
|
||||
<data name="compressedUnit" type="char" length="1" />
|
||||
<data name="storageAllocationRestrictedUnit" type="char" length="1" />
|
||||
<data name="availabilityParitySetUnit" type="char" length="1" />
|
||||
<data name="multipleConnectionUnit" type="char" length="1" />
|
||||
</struct>
|
||||
|
||||
|
||||
|
||||
0 0 BINARY(4) Total records
|
||||
4 4 BINARY(4) Records returned
|
||||
8 8 CHAR(4) Request handle
|
||||
12 C BINARY(4) Record length
|
||||
16 10 CHAR(1) Information complete indicator
|
||||
17 11 CHAR(13) Date and time created
|
||||
30 1E CHAR(1) List status indicator
|
||||
31 1F CHAR(1) Reserved
|
||||
32 20 BINARY(4) Length of information returned
|
||||
36 24 BINARY(4) First record in receiver variable
|
||||
40 28 CHAR(40) Reserved
|
||||
|
||||
<!-- List information structure (common for "Open List" type APIs) -->
|
||||
<struct name="listInfo">
|
||||
<data name="totalRcds" type="int" length="4" />
|
||||
<data name="rcdsReturned" type="int" length="4" />
|
||||
<data name="rqsHandle" type="byte" length="4" />
|
||||
<data name="rcdLength" type="int" length="4" />
|
||||
<data name="infoComplete" type="char" length="1" />
|
||||
<data name="dateCreated" type="char" length="7" />
|
||||
<data name="timeCreated" type="char" length="6" />
|
||||
<data name="listStatus" type="char" length="1" />
|
||||
<data type="byte" length="1" />
|
||||
<data name="lengthOfInfo" type="int" length="4" />
|
||||
<data name="firstRecord" type="int" length="4" />
|
||||
<data type="byte" length="40" />
|
||||
</struct>
|
||||
|
||||
<struct name="filterInformation" usage="input">
|
||||
<data name="sizeOfFileEntry" type="int" length="4" init="16"/>
|
||||
<data name="filterKey" type="int" length="4" init="1"/>
|
||||
<data name="sizeOfFilterData" type="int" length="4" init="4"/>
|
||||
<data name="filterData" type="int" length="4" init="1"/>
|
||||
</struct>
|
||||
|
||||
<!-- Program QYASPOL and its parameter list-->
|
||||
<program name="qyaspol" path="/QSYS.lib/QGY.lib/QYASPOL.pgm" parseorder="listInfo receiver">
|
||||
<!-- 1 Receiver variable Output Char(*) -->
|
||||
<data name="receiver" type="struct" struct="yasp0300" usage="output" count="listInfo.rcdsReturned" outputsize="receiverLength" />
|
||||
<!-- 2 Length of receiver variable Input Binary(4) -->
|
||||
<data name="receiverLength" type="int" length="4" usage="input" init="94" />
|
||||
<!-- 3 List information Output Char(80) -->
|
||||
<data name="listInfo" type="struct" struct="listInfo" usage="output" />
|
||||
<!-- 4 Number of records to return Input Binary(4) -->
|
||||
<data name="rcdsToReturn" type="int" length="4" usage="input" init="264" />
|
||||
<!-- 5 Number of filters Input Binary(4) -->
|
||||
<data name="numberOfFilters" type="int" length="4" usage="input" init="1" />
|
||||
<!-- 6 Filter information Input Char(*) -->
|
||||
<data name="filterInfo" type="struct" struct="filterInformation" usage="input" />
|
||||
|
||||
<!-- 7 Format name Input Char(8) -->
|
||||
<data name="format" type="char" length="8" usage="input" init="YASP0300" />
|
||||
<!-- 8 Error Code I/O Char(*) -->
|
||||
<data name="errorCode" type="int" length="4" usage="input" init="0" />
|
||||
|
||||
</program>
|
||||
|
||||
|
||||
|
||||
|
||||
1 Receiver variable Output Char(*)
|
||||
2 Length of receiver variable Input Binary(4)
|
||||
3 Request handle Input Char(4)
|
||||
4 List information Output Char(80)
|
||||
5 Number of records to return Input Binary(4)
|
||||
6 Starting record Input Binary(4)
|
||||
7 Error code I/O Char(*)
|
||||
<!-- Program QGYGTLE returned additional "records" from the list created by QYASPOL. -->
|
||||
<program name="qgygtle" path="/QSYS.lib/QGY.lib/QGYGTLE.pgm" parseorder="listInfo receiver">
|
||||
<data name="receiver" type="struct" struct="yasp0300" usage="output" count="listInfo.rcdsReturned" outputsize="receiverLength" />
|
||||
<data name="receiverLength" type="int" length="4" usage="input" init="94" />
|
||||
<data name="requestHandle" type="byte" length="4" usage="input" />
|
||||
<data name="listInfo" type="struct" struct="listInfo" usage="output" />
|
||||
<data name="rcdsToReturn" type="int" length="4" usage="input" init="264" />
|
||||
<data name="startingRcd" type="int" length="4" usage="input" />
|
||||
<data name="errorCode" type="int" length="4" usage="input" init="0" />
|
||||
</program>
|
||||
|
||||
<!-- Program QGYCLST closes the list, freeing resources on the server -->
|
||||
<program name="qgyclst" path="/QSYS.lib/QGY.lib/QGYCLST.pgm" >
|
||||
<data name="requestHandle" type="byte" length="4" usage="input" />
|
||||
<data name="errorCode" type="int" length="4" usage="input" init="0" />
|
||||
</program>
|
||||
</pcml>
|
|
@ -0,0 +1,195 @@
|
|||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Program call example. This program calls the QWCRSSTS server program
|
||||
// to retrieve the status of the system.
|
||||
//
|
||||
// Command syntax:
|
||||
// PCSystemStatusExample system
|
||||
//
|
||||
// This source is an example of IBM Toolbox for Java "ProgramCall".
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
package com.centreon.connector.as400;
|
||||
|
||||
import com.ibm.as400.access.*;
|
||||
|
||||
public class IbmTest extends Object {
|
||||
public static void main(String[] parameters) {
|
||||
System.out.println(" ");
|
||||
|
||||
// if a system was not specified, display help text and exit.
|
||||
|
||||
if (parameters.length >= 3) {
|
||||
|
||||
try {
|
||||
// Create an AS400 object for the server that contains the
|
||||
// program. Assume the parameters are the system name, the login
|
||||
// and the password.
|
||||
|
||||
AS400 as400 = new AS400(parameters[0], parameters[1], parameters[2]);
|
||||
|
||||
// Create the path to the program.
|
||||
|
||||
QSYSObjectPathName programName = new QSYSObjectPathName("QSYS", "QWCRSSTS", "PGM");
|
||||
|
||||
// Create the program call object. Assocate the object with the
|
||||
// AS400 object that represents the server we get status from.
|
||||
|
||||
ProgramCall getSystemStatus = new ProgramCall(as400);
|
||||
|
||||
// Create the program parameter list. This program has five
|
||||
// parameters that will be added to this list.
|
||||
|
||||
ProgramParameter[] parmlist = new ProgramParameter[5];
|
||||
|
||||
// The server program returns data in parameter 1. It is an output
|
||||
// parameter. Allocate 64 bytes for this parameter.
|
||||
|
||||
parmlist[0] = new ProgramParameter(64);
|
||||
|
||||
// Parameter 2 is the buffer size of parm 1. It is a numeric input
|
||||
// parameter. Sets its value to 64, convert it to the server format,
|
||||
// then add the parm to the parm list.
|
||||
|
||||
AS400Bin4 bin4 = new AS400Bin4();
|
||||
Integer iStatusLength = 64;
|
||||
byte[] statusLength = bin4.toBytes(iStatusLength);
|
||||
parmlist[1] = new ProgramParameter(statusLength);
|
||||
|
||||
// Parameter 3 is the status-format parameter. It is a string input
|
||||
// parameter. Set the string value, convert it to the server format,
|
||||
// then add the parameter to the parm list.
|
||||
|
||||
AS400Text text1 = new AS400Text(8, as400);
|
||||
byte[] statusFormat = text1.toBytes("SSTS0200");
|
||||
parmlist[2] = new ProgramParameter(statusFormat);
|
||||
|
||||
// Parameter 4 is the reset-statistics parameter. It is a string input
|
||||
// parameter. Set the string value, convert it to the server format,
|
||||
// then add the parameter to the parm list.
|
||||
|
||||
AS400Text text3 = new AS400Text(10, as400);
|
||||
byte[] resetStats = text3.toBytes("*NO ");
|
||||
parmlist[3] = new ProgramParameter(resetStats);
|
||||
|
||||
// Parameter 5 is the error info parameter. It is an input/output
|
||||
// parameter. Add it to the parm list.
|
||||
|
||||
byte[] errorInfo = new byte[32];
|
||||
parmlist[4] = new ProgramParameter(errorInfo, 0);
|
||||
|
||||
// Set the program to call and the parameter list to the program
|
||||
// call object.
|
||||
|
||||
getSystemStatus.setProgram(programName.getPath(), parmlist);
|
||||
|
||||
// Run the program then sleep. We run the program twice because
|
||||
// the first set of results are inflated. If we discard the first
|
||||
// set of results and run the command again five seconds later the
|
||||
// number will be more accurate.
|
||||
|
||||
getSystemStatus.run();
|
||||
Thread.sleep(5000);
|
||||
|
||||
// Run the program
|
||||
|
||||
if (getSystemStatus.run() != true) {
|
||||
|
||||
// If the program did not run get the list of error messages
|
||||
// from the program object and display the messages. The error
|
||||
// would be something like program-not-found or not-authorized
|
||||
// to the program.
|
||||
|
||||
AS400Message[] msgList = getSystemStatus.getMessageList();
|
||||
|
||||
System.out.println("The program did not run. Server messages:");
|
||||
|
||||
for (int i = 0; i < msgList.length; i++) {
|
||||
System.out.println(msgList[i].getText());
|
||||
}
|
||||
}
|
||||
|
||||
// Else the program did run.
|
||||
|
||||
else {
|
||||
|
||||
// Create a server to Java numeric converter. This converter
|
||||
// will be used in the following section to convert the numeric
|
||||
// output from the server format to Java format.
|
||||
|
||||
AS400Bin4 as400Int = new AS400Bin4();
|
||||
|
||||
// Get the results of the program. Output data is in
|
||||
// a byte array in the first parameter.
|
||||
|
||||
byte[] as400Data = parmlist[0].getOutputData();
|
||||
|
||||
// CPU utilization is a numeric field starting at byte
|
||||
// 32 of the output buffer. Convert this number from the
|
||||
// server format to Java format and output the number.
|
||||
|
||||
Integer cpuUtil = (Integer) as400Int.toObject(as400Data, 32);
|
||||
cpuUtil = cpuUtil.intValue() / 10;
|
||||
System.out.print("CPU Utilization: ");
|
||||
System.out.print(cpuUtil);
|
||||
System.out.println("%");
|
||||
|
||||
// DASD utilization is a numeric field starting at byte
|
||||
// 52 of the output buffer. Convert this number from the
|
||||
// server format to Java format and output the number.
|
||||
|
||||
Integer dasdUtil = (Integer) as400Int.toObject(as400Data, 52);
|
||||
dasdUtil = dasdUtil.intValue() / 10000;
|
||||
System.out.print("Dasd Utilization: ");
|
||||
System.out.print(dasdUtil);
|
||||
System.out.println("%");
|
||||
|
||||
// Number of jobs is a numeric field starting at byte
|
||||
// 36 of the output buffer. Convert this number from the
|
||||
// server format to Java format and output the number.
|
||||
|
||||
Integer nj = (Integer) as400Int.toObject(as400Data, 36);
|
||||
System.out.print("Active jobs: ");
|
||||
System.out.println(nj);
|
||||
|
||||
}
|
||||
|
||||
// This program is done running program so disconnect from
|
||||
// the command server on the server. Program call and command
|
||||
// call use the same server on the server.
|
||||
|
||||
as400.disconnectService(AS400.COMMAND);
|
||||
} catch (Exception e) {
|
||||
// If any of the above operations failed say the program failed
|
||||
// and output the exception.
|
||||
|
||||
System.out.println("Program call failed");
|
||||
System.out.println(e);
|
||||
}
|
||||
}
|
||||
|
||||
// Display help text when parameters are incorrect.
|
||||
|
||||
else {
|
||||
System.out.println("");
|
||||
System.out.println("");
|
||||
System.out.println("");
|
||||
System.out.println("Parameters are not correct. Command syntax is:");
|
||||
System.out.println("");
|
||||
System.out.println(" PCSystemStatusExample myServer myLogin myPassword");
|
||||
System.out.println("");
|
||||
System.out.println("Where");
|
||||
System.out.println("");
|
||||
System.out.println(" myServer = get status of this server ");
|
||||
System.out.println("");
|
||||
System.out.println("For example:");
|
||||
System.out.println("");
|
||||
System.out.println(" PCSystemStatusExample mySystem myUser myUserPwd");
|
||||
System.out.println("");
|
||||
System.out.println("");
|
||||
}
|
||||
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
// package com.centreon.connector.as400.check.handler.impl;
|
||||
//
|
||||
// import static org.junit.Assert.*;
|
||||
//
|
||||
// import org.junit.After;
|
||||
// import org.junit.AfterClass;
|
||||
// import org.junit.Before;
|
||||
// import org.junit.BeforeClass;
|
||||
// import org.junit.Test;
|
||||
//
|
||||
// public class JobHandlerTest {
|
||||
//
|
||||
// @BeforeClass
|
||||
// public static void setUpBeforeClass() throws Exception {
|
||||
// }
|
||||
//
|
||||
// @AfterClass
|
||||
// public static void tearDownAfterClass() throws Exception {
|
||||
// }
|
||||
//
|
||||
// @Before
|
||||
// public void setUp() throws Exception {
|
||||
// }
|
||||
//
|
||||
// @After
|
||||
// public void tearDown() throws Exception {
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void test() {
|
||||
// fail("Not yet implemented");
|
||||
// }
|
||||
//
|
||||
// }
|
|
@ -0,0 +1,60 @@
|
|||
package com.centreon.connector.as400.check.handler.impl;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.PrintStream;
|
||||
import java.util.Arrays;
|
||||
import java.util.Vector;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.ibm.as400.access.AS400;
|
||||
import com.ibm.as400.access.ProgramCall;
|
||||
import com.ibm.as400.access.ProgramParameter;
|
||||
import com.ibm.as400.access.SystemStatus;
|
||||
import com.centreon.connector.as400.Conf;
|
||||
import com.centreon.connector.as400.dispatcher.check.ResponseData;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.stubbing.Answer;
|
||||
|
||||
public class SystemHandlerTest {
|
||||
|
||||
private AtomicInteger runs = new AtomicInteger(0);
|
||||
|
||||
@Test
|
||||
public void dumpAll_should_print_measures() throws Exception {
|
||||
ByteArrayOutputStream outContent = new ByteArrayOutputStream();
|
||||
PrintStream originalOut = System.out;
|
||||
System.setOut(new PrintStream(outContent));
|
||||
try {
|
||||
SystemStatus as400 = mock(SystemStatus.class);
|
||||
when(as400.getSystemPools()).thenReturn(new Vector<Object>().elements());
|
||||
SystemHandler sh = new SystemHandler(null, null, null, as400);
|
||||
sh.dumpSystem();
|
||||
} finally {
|
||||
System.setOut(originalOut);
|
||||
}
|
||||
assertEquals(DUMP_OUTPUT_EXPECTED, outContent.toString());
|
||||
}
|
||||
|
||||
private final String DUMP_OUTPUT_EXPECTED = "ActiveJobsInSystem : 0\nActiveThreadsInSystem : 0\n"
|
||||
+ "BatchJobsEndedWithPrinterOutputWaitingToPrint : 0\nBatchJobsEnding : 0\nBatchJobsHeldOnJobQueue : 0\n"
|
||||
+ "BatchJobsHeldWhileRunning : 0\nBatchJobsOnAHeldJobQueue : 0\nBatchJobsOnUnassignedJobQueue : 0\nBatchJobsRunning : 0\n"
|
||||
+ "BatchJobsWaitingForMessage : 0\nBatchJobsWaitingToRunOrAlreadyScheduled : 0\nCurrentProcessingCapacity : 0.0\n"
|
||||
+ "CurrentUnprotectedStorageUsed : 0\nDateAndTimeStatusGathered : null\nElapsedTime : 0\nJobsInSystem : 0\nMainStorageSize : 0\n"
|
||||
+ "MaximumJobsInSystem : 0\nMaximumUnprotectedStorageUsed : 0\nNumberOfPartitions : 0\nNumberOfProcessors : 0\nPartitionIdentifier : 0\n"
|
||||
+ "PercentCurrentInteractivePerformance : 0.0\nPercentDBCapability : 0.0\nPercentPermanent256MBSegmentsUsed : 0.0\n"
|
||||
+ "PercentPermanent4GBSegmentsUsed : 0.0\nPercentPermanentAddresses : 0.0\nPercentProcessingUnitUsed : 0.0\n"
|
||||
+ "PercentSharedProcessorPoolUsed : 0.0\nPercentSystemASPUsed : 0.0\nPercentTemporary256MBSegmentsUsed : 0.0\n"
|
||||
+ "PercentTemporary4GBSegmentsUsed : 0.0\nPercentTemporaryAddresses : 0.0\nPercentUncappedCPUCapacityUsed : 0.0\n"
|
||||
+ "PoolsNumber : 0\nProcessorSharingAttribute : 0\nRestrictedStateFlag : false\nSystem : null\nSystemASP : 0 Mbytes\n"
|
||||
+ "SystemName : null\nTotalAuxiliaryStorage : 0\nUsersCurrentSignedOn : 0\nUsersSignedOffWithPrinterOutputWaitingToPrint : 0\n"
|
||||
+ "UsersSuspendedByGroupJobs : 0\nUsersSuspendedBySystemRequest : 0\nUsersTemporarilySignedOff : 0\n";
|
||||
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
// package com.centreon.connector.as400.check.handler.msgqueue;
|
||||
//
|
||||
// import org.junit.After;
|
||||
// import org.junit.AfterClass;
|
||||
// import org.junit.Before;
|
||||
// import org.junit.BeforeClass;
|
||||
// import org.junit.Test;
|
||||
// import org.mockito.Mockito;
|
||||
//
|
||||
// import com.ibm.as400.access.QueuedMessage;
|
||||
//
|
||||
// public class CachedMessageQueueHandlerTest {
|
||||
//
|
||||
// @BeforeClass
|
||||
// public static void setUpBeforeClass() throws Exception {
|
||||
// }
|
||||
//
|
||||
// @AfterClass
|
||||
// public static void tearDownAfterClass() throws Exception {
|
||||
// }
|
||||
//
|
||||
// @Before
|
||||
// public void setUp() throws Exception {
|
||||
// }
|
||||
//
|
||||
// @After
|
||||
// public void tearDown() throws Exception {
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void test() {
|
||||
// new CachedMessageQueueHandler("localhost", "toto", "tutu");
|
||||
//
|
||||
// Mockito.mock(QueuedMessage.class);
|
||||
// }
|
||||
//
|
||||
// }
|
|
@ -0,0 +1,61 @@
|
|||
//package com.centreon.connector.as400.check.handler.msgqueue;
|
||||
//
|
||||
//import java.sql.Date;
|
||||
//import java.sql.SQLException;
|
||||
//import java.util.Calendar;
|
||||
//
|
||||
//import org.junit.After;
|
||||
//import org.junit.AfterClass;
|
||||
//import org.junit.Before;
|
||||
//import org.junit.BeforeClass;
|
||||
//import org.junit.Test;
|
||||
//import org.mockito.Mockito;
|
||||
//
|
||||
//import com.ibm.as400.access.QueuedMessage;
|
||||
//
|
||||
//public class LocalDbTest {
|
||||
//
|
||||
// @BeforeClass
|
||||
// public static void setUpBeforeClass() throws Exception {
|
||||
// }
|
||||
//
|
||||
// @AfterClass
|
||||
// public static void tearDownAfterClass() throws Exception {
|
||||
// }
|
||||
//
|
||||
// @Before
|
||||
// public void setUp() throws Exception {
|
||||
// }
|
||||
//
|
||||
// @After
|
||||
// public void tearDown() throws Exception {
|
||||
// }
|
||||
//
|
||||
// private QueuedMessage createMockedObject(final String msgId, final int severity, final String text, final int type, final String user, final Date date,
|
||||
// final Date createDate) {
|
||||
//
|
||||
// final QueuedMessage msg = Mockito.mock(QueuedMessage.class);
|
||||
// Mockito.when(msg.getID()).thenReturn(msgId);
|
||||
// Mockito.when(msg.getSeverity()).thenReturn(severity);
|
||||
// Mockito.when(msg.getText()).thenReturn(text);
|
||||
// Mockito.when(msg.getType()).thenReturn(type);
|
||||
// Mockito.when(msg.getUser()).thenReturn(user);
|
||||
// Mockito.when(msg.getDate()).thenReturn(new Calendar.Builder().setDate(1, 1, 1).build());
|
||||
// Mockito.when(msg.getCreateDate()).thenReturn(createDate);
|
||||
//
|
||||
// return msg;
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void testAddEntry() throws SQLException {
|
||||
// final LocalDb db = new LocalDb("/tmp/test123");
|
||||
// final QueuedMessage msg = this.createMockedObject("123", 5, "This is an output", 2, "user", new Date(0), new Date(0));
|
||||
// db.addEntry(msg);
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void testGetQueuedMessage() {
|
||||
// // Assert.fail("Not yet implemented");
|
||||
// }
|
||||
//
|
||||
//}
|
|
@ -0,0 +1,53 @@
|
|||
// package com.centreon.connector.as400.client;
|
||||
//
|
||||
// import java.io.IOException;
|
||||
//
|
||||
// import org.junit.After;
|
||||
// import org.junit.AfterClass;
|
||||
// import org.junit.Before;
|
||||
// import org.junit.BeforeClass;
|
||||
// import org.junit.Test;
|
||||
// import org.mockito.Mockito;
|
||||
//
|
||||
// import com.ibm.as400.access.AS400SecurityException;
|
||||
// import com.centreon.connector.as400.client.impl.CommandLineClient;
|
||||
// import com.centreon.connector.as400.daemon.DelayedConnectionException;
|
||||
// import com.centreon.connector.as400.dispatcher.check.CheckDispatcher;
|
||||
// import com.centreon.connector.as400.dispatcher.check.CheckHandlerRunnable;
|
||||
//
|
||||
// public class TestClient {
|
||||
// @BeforeClass
|
||||
// public static void setUpBeforeClass() throws Exception {
|
||||
// }
|
||||
//
|
||||
// @AfterClass
|
||||
// public static void tearDownAfterClass() throws Exception {
|
||||
// }
|
||||
//
|
||||
// @Before
|
||||
// public void setUp() throws Exception {
|
||||
//
|
||||
// }
|
||||
//
|
||||
// @After
|
||||
// public void tearDown() throws Exception {
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void testCommandLine() throws AS400SecurityException, IOException,
|
||||
// DelayedConnectionException, Exception {
|
||||
// final String args[] = { "-I", "-H", "localhost", "--login", "test",
|
||||
// "--password", "test", "-C", "cpu", "-A", "80,90" };
|
||||
// final IClient client = new CommandLineClient(args);
|
||||
// // ClientDispatcherImpl.getInstance().dispatch(client);
|
||||
//
|
||||
// final CheckDispatcher dispatcher = Mockito.mock(CheckDispatcher.class);
|
||||
//
|
||||
// final CheckHandlerRunnable runnable = new CheckHandlerRunnable(client,
|
||||
// dispatcher);
|
||||
// runnable.run();
|
||||
// // final CheckDispatcher checkDispatcher = new
|
||||
// // CheckDispatcher("localhost", "test", "test");
|
||||
// // checkDispatcher.dispatch(client);
|
||||
// }
|
||||
// }
|
|
@ -0,0 +1,144 @@
|
|||
package com.centreon.connector.as400.dispatcher.check;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.stubbing.Answer;
|
||||
|
||||
import com.centreon.connector.as400.check.handler.ICommandHandler;
|
||||
import com.centreon.connector.as400.check.handler.IDiskHandler;
|
||||
import com.centreon.connector.as400.check.handler.IJobHandler;
|
||||
import com.centreon.connector.as400.check.handler.IJobQueueHandler;
|
||||
import com.centreon.connector.as400.check.handler.IMessageQueueHandler;
|
||||
import com.centreon.connector.as400.check.handler.ISubSystemHandler;
|
||||
import com.centreon.connector.as400.check.handler.ISystemHandler;
|
||||
|
||||
public class TestCheckHandlerRunnable extends CheckHandlerRunnable {
|
||||
|
||||
public TestCheckHandlerRunnable() {
|
||||
super(null, null);
|
||||
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
public static void setUpBeforeClass() throws Exception {
|
||||
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void tearDownAfterClass() throws Exception {
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
new ResponseData(ResponseData.statusOk, "OK");
|
||||
|
||||
final ISubSystemHandler subSystemHandler = Mockito.mock(ISubSystemHandler.class, new Answer<ResponseData>() {
|
||||
@Override
|
||||
public ResponseData answer(final InvocationOnMock invocation) throws Throwable {
|
||||
return new ResponseData(ResponseData.statusOk, "OK");
|
||||
}
|
||||
});
|
||||
final ISystemHandler systemHandler = Mockito.mock(ISystemHandler.class, new Answer<ResponseData>() {
|
||||
@Override
|
||||
public ResponseData answer(final InvocationOnMock invocation) throws Throwable {
|
||||
return new ResponseData(ResponseData.statusOk, "OK");
|
||||
}
|
||||
});
|
||||
final IJobHandler jobHandler = Mockito.mock(IJobHandler.class, new Answer<ResponseData>() {
|
||||
@Override
|
||||
public ResponseData answer(final InvocationOnMock invocation) throws Throwable {
|
||||
return new ResponseData(ResponseData.statusOk, "OK");
|
||||
}
|
||||
});
|
||||
final IDiskHandler diskHandler = Mockito.mock(IDiskHandler.class, new Answer<ResponseData>() {
|
||||
@Override
|
||||
public ResponseData answer(final InvocationOnMock invocation) throws Throwable {
|
||||
return new ResponseData(ResponseData.statusOk, "OK");
|
||||
}
|
||||
});
|
||||
final ICommandHandler commandHandler = Mockito.mock(ICommandHandler.class, new Answer<ResponseData>() {
|
||||
@Override
|
||||
public ResponseData answer(final InvocationOnMock invocation) throws Throwable {
|
||||
return new ResponseData(ResponseData.statusOk, "OK");
|
||||
}
|
||||
});
|
||||
final IMessageQueueHandler messageQueueHandler = Mockito.mock(IMessageQueueHandler.class,
|
||||
new Answer<ResponseData>() {
|
||||
@Override
|
||||
public ResponseData answer(final InvocationOnMock invocation) throws Throwable {
|
||||
return new ResponseData(ResponseData.statusOk, "OK");
|
||||
}
|
||||
});
|
||||
final IJobQueueHandler jobQueueHandler = Mockito.mock(IJobQueueHandler.class, new Answer<ResponseData>() {
|
||||
@Override
|
||||
public ResponseData answer(final InvocationOnMock invocation) throws Throwable {
|
||||
return new ResponseData(ResponseData.statusOk, "OK");
|
||||
}
|
||||
});
|
||||
|
||||
this.checkDispatcher = Mockito.mock(CheckDispatcher.class);
|
||||
|
||||
Mockito.when(this.checkDispatcher.getJobHandler()).thenReturn(jobHandler);
|
||||
Mockito.when(this.checkDispatcher.getCommandHandler()).thenReturn(commandHandler);
|
||||
Mockito.when(this.checkDispatcher.getSubSystemHandler()).thenReturn(subSystemHandler);
|
||||
Mockito.when(this.checkDispatcher.getDiskHandler()).thenReturn(diskHandler);
|
||||
Mockito.when(this.checkDispatcher.getSystemHandler()).thenReturn(systemHandler);
|
||||
Mockito.when(this.checkDispatcher.getMessageQueueHandler()).thenReturn(messageQueueHandler);
|
||||
Mockito.when(this.checkDispatcher.getJobQueueHandler()).thenReturn(jobQueueHandler);
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
}
|
||||
|
||||
private void testCommand(final String command, final int exceptedStatus) {
|
||||
final ResponseData data = this.handleAs400Args(command);
|
||||
Assert.assertEquals(data.getMessage(), exceptedStatus, data.getCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testListDisks() throws NumberFormatException, Exception {
|
||||
this.testCommand("listDisks", ResponseData.statusError);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testListSubsystems() throws NumberFormatException, Exception {
|
||||
this.testCommand("listSubsystems", ResponseData.statusOk);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testListJobs() throws NumberFormatException, Exception {
|
||||
this.testCommand("listJobs", ResponseData.statusOk);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetErrorMessageQueue() throws NumberFormatException, Exception {
|
||||
this.testCommand("getErrorMessageQueue", ResponseData.statusError);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPageFault() throws NumberFormatException, Exception {
|
||||
this.testCommand("pageFault", ResponseData.statusOk);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetJobQueues() throws NumberFormatException, Exception {
|
||||
this.testCommand("getJobQueues", ResponseData.statusError);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExecuteCommand() throws NumberFormatException, Exception {
|
||||
this.testCommand("executeCommand", ResponseData.statusError);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUnknown() throws NumberFormatException, Exception {
|
||||
this.testCommand("blabla", ResponseData.statusError);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
daemonListenerHost=localhost
|
||||
|
||||
#as400 login timeout for nagios check (ms)
|
||||
as400LoginTimeout=10000
|
||||
|
||||
#as400 read timeout for nagios check (ms)
|
||||
as400ReadTimeout=300000
|
||||
|
||||
#Time before cleaning an unused as400 resource (ms)
|
||||
as400ResourceDuration=7200000
|
||||
|
||||
#time before killing a dead as400 connection (s)
|
||||
as400SoLinger=1
|
||||
|
||||
#Duration of the job & (ms)
|
||||
cacheTimeout=60000
|
||||
|
||||
daemonNoRequestTimeout=5000
|
||||
|
||||
daemonRequestParseTimeout=5000
|
||||
|
||||
#time before killing a dead as400 connection (s)
|
||||
daemonSoLinger=1
|
||||
|
||||
#Time before discaring a check in queue (ms)
|
||||
workerQueueTimeout=360000
|
||||
|
||||
# active debug
|
||||
debug=false
|
||||
|
||||
# active exception
|
||||
exception=false
|
||||
|
||||
# active trace (in /tmp/trace.log)
|
||||
trace=false
|
||||
|
||||
# MessageQueueDB Base path
|
||||
pathMsgQDB=/tmp/
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Configuration>
|
||||
|
||||
<Appenders>
|
||||
<Console name="console" target="System.err">
|
||||
<PatternLayout pattern="[%-20d{dd/MM/yyyy HH:mm:ss}] [%-6p] %m %n"/>
|
||||
</Console>
|
||||
</Appenders>
|
||||
|
||||
<Loggers>
|
||||
<Logger name="org.apache.log4j.xml" level="info"/>
|
||||
<Root level="error">
|
||||
<AppenderRef ref="console"/>
|
||||
</Root>
|
||||
</Loggers>
|
||||
|
||||
</Configuration>
|
|
@ -0,0 +1,68 @@
|
|||
name: "centreon-plugin-Operatingsystems-AS400-daemon"
|
||||
arch: "${ARCH}"
|
||||
platform: "linux"
|
||||
version_schema: "none"
|
||||
version: "2.0.2"
|
||||
release: "${RELEASE}${DIST}"
|
||||
section: "default"
|
||||
priority: "optional"
|
||||
maintainer: "Centreon <contact@centreon.com>"
|
||||
description: |
|
||||
Centreon Connector Server for AS400.
|
||||
vendor: "Centreon"
|
||||
homepage: "https://www.centreon.com"
|
||||
license: "Apache-2.0"
|
||||
|
||||
contents:
|
||||
- src: "../connector.as400/target/centreon-as400-2.0.2-jar-with-dependencies.jar" # VARIABLE VERSION REQUIRED HERE
|
||||
dst: "/usr/share/centreon-as400/bin/centreon-as400-2.0.2-jar-with-dependencies.jar" # VARIABLE VERSION REQUIRED HERE
|
||||
file_info:
|
||||
mode: 0755
|
||||
owner: "centreon-as400"
|
||||
group: "centreon-as400"
|
||||
|
||||
- src: "../connector.as400.install/init-script/centreon-as400.service"
|
||||
dst: "/lib/systemd/system/centreon-as400.service"
|
||||
file_info:
|
||||
mode: 0644
|
||||
|
||||
- src: "../connector.as400.install/init-script/centreon-as400-sysconfig"
|
||||
dst: "/etc/sysconfig/centreon-as400-sysconfig"
|
||||
file_info:
|
||||
mode: 0644
|
||||
|
||||
- src: "../connector.as400.install/etc/config.properties"
|
||||
dst: "/etc/centreon-as400/config.properties"
|
||||
file_info:
|
||||
mode: 0644
|
||||
|
||||
- src: "../connector.as400.install/etc/log4j2.xml"
|
||||
dst: "/etc/centreon-as400/log4j2.xml"
|
||||
file_info:
|
||||
mode: 0644
|
||||
|
||||
- dst: "/var/log/centreon-as400"
|
||||
type: dir
|
||||
file_info:
|
||||
mode: 0755
|
||||
owner: centreon-as400
|
||||
group: centreon-as400
|
||||
|
||||
scripts:
|
||||
preinstall: ./scripts/centreon-as400-daemon-preinstall.sh
|
||||
postinstall: ./scripts/centreon-as400-daemon-postinstall.sh
|
||||
preremove: ./scripts/centreon-as400-daemon-preremove.sh
|
||||
|
||||
overrides:
|
||||
rpm:
|
||||
depends:
|
||||
- java-1.8.0-openjdk
|
||||
deb:
|
||||
depends:
|
||||
- default-jre
|
||||
|
||||
rpm:
|
||||
summary: Centreon AS 400 Plugin daemon
|
||||
signature:
|
||||
key_file: ${RPM_SIGNING_KEY_FILE}
|
||||
key_id: ${RPM_SIGNING_KEY_ID}
|
|
@ -0,0 +1,5 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Start as400-daemon function
|
||||
|
||||
# Handle actions
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
|
||||
echo "Creating centreon-as400 user ..."
|
||||
useradd -m -r centreon-as400 2> /dev/null ||:
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Stop as400-daemon
|
||||
systemctl stop centreon-as400
|
Loading…
Reference in New Issue