commit f68423b40ecb5076990739f09f87ec62f7fd17ae Author: Rinjae Date: Fri Sep 5 18:54:18 2025 +0900 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57410a4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,231 @@ + +# Package Files # +*.war + +# Eclipse # +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +.classpath +.project + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# CDT- autotools +.autotools + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +# Annotation Processing +.apt_generated/ +.apt_generated_test/ + +# Scala IDE specific (Scala & Java development for Eclipse) +.cache-main +.scala_dependencies +.worksheet + +# Uncomment this line if you wish to ignore the project description file. +# Typically, this file would be tracked if it contains build/dependency configurations: +#.project +### Intellij ### +.idea +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +.idea/**/sonarlint/ + +# SonarQube Plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator/ + +### Java ### +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### Gradle ### +.gradle +build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties + +### Gradle Patch ### +**/build/ + +# End of https://www.gitignore.io/api/java,macos,gradle,intellij +/EAISIMWeb/ +/gradle.properties diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..f784445 --- /dev/null +++ b/build.gradle @@ -0,0 +1,108 @@ +plugins { + id 'java-library' + id 'maven-publish' + id 'eclipse-wtp' + id 'idea' +} +group 'com.eactive' +version '4.5.1-SNAPSHOT' + +def springVersion = "5.3.27" + +def nexusUrl = "https://nexus.eactive.synology.me:8090" + + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(8) + } +} + +compileJava { + options.encoding = 'UTF-8' +} + +jar { + exclude '**/persistence.xml' +} + +tasks.withType(JavaCompile) { + options.encoding = 'UTF-8' +} + + +dependencies { + //implementation project(':elink-online-core') + //implementation project(':elink-online-transformer') + //implementation project(':elink-online-common') + api project(':elink-online-common') + + compileOnly fileTree(dir: 'libs', include: ['*.jar']) + + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' +} + +test { + useJUnitPlatform() +} + +publishing { + repositories { + maven { + name = 'eactiveRepository' + def releasesRepoUrl = "${nexusUrl}/repository/maven-releases/" + def snapshotsRepoUrl = "${nexusUrl}/repository/maven-snapshots/" + url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl + credentials(PasswordCredentials) + } + } + + publications { + mavenJava(MavenPublication) { + from components.java + pom { + description = "eLink EMS Client module" + licenses { + license { + name = "Commercial License" + url = "http://eactive.co.kr" + } + } + } + } + } +} + + +task sourcesJar(type: Jar, dependsOn: classes) { + archiveClassifier = 'sources' + from sourceSets.main.allSource +} + +artifacts { + archives sourcesJar +} + +configurations.all { + resolutionStrategy { + // 동적 버전 탐색을 10분 캐시 + cacheDynamicVersionsFor 10, 'minutes' + // 변하는 모듈(Changing Module)을 캐시하지 않음 + cacheChangingModulesFor 0, 'seconds' + } +} + +task settingEclipseEncoding { + if (project.file('.settings').exists()) { + File f = file('.settings/org.eclipse.core.resources.prefs') + f.write('eclipse.preferences.version=1\n') + f.append('encoding/=utf-8') + } +} + +//eclipseJdt.finalizedBy settingEclipseEncoding + +eclipse { + synchronizationTasks settingEclipseEncoding +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..41d9927 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..54228ea --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +networkTimeout=10000 diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..1b6c787 --- /dev/null +++ b/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# 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 +# +# https://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. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/libs/mina-core-1.0.10-custom-1.0-custom.jar b/libs/mina-core-1.0.10-custom-1.0-custom.jar new file mode 100644 index 0000000..20274fa Binary files /dev/null and b/libs/mina-core-1.0.10-custom-1.0-custom.jar differ diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..958caa6 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,11 @@ +rootProject.name = 'elink-online-emsclient' + +include 'elink-online-core-jpa' +include 'elink-online-core' +include 'elink-online-transformer' +include 'elink-online-common' + +project (':elink-online-core-jpa').projectDir = new File(settingsDir, "../elink-online-core-jpa") +project (':elink-online-core').projectDir = new File(settingsDir, "../elink-online-core") +project (':elink-online-transformer').projectDir = new File(settingsDir, "../elink-online-transformer") +project (':elink-online-common').projectDir = new File(settingsDir, "../elink-online-common") \ No newline at end of file diff --git a/src/main/java/META-INF/MANIFEST.MF b/src/main/java/META-INF/MANIFEST.MF new file mode 100644 index 0000000..254272e --- /dev/null +++ b/src/main/java/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/src/main/java/com/eactive/eai/rms/client/SimpleSessionRecycler.java b/src/main/java/com/eactive/eai/rms/client/SimpleSessionRecycler.java new file mode 100644 index 0000000..048baa1 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/SimpleSessionRecycler.java @@ -0,0 +1,90 @@ +package com.eactive.eai.rms.client; + +import java.net.SocketAddress; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.mina.common.IoSession; +import org.apache.mina.common.IoSessionRecycler; + +/** + * The Class SimpleSessionRecycler. + * + * + * + * @author : $Author: 윤창용 $ + * @version : $Revision: 1.2 $ + */ +public class SimpleSessionRecycler implements IoSessionRecycler { + + /** The recycle map. */ + Map recycleMap = new HashMap(); + + /* + * (non-Javadoc) + * + * @see org.apache.mina.common.IoSessionRecycler#remove(org.apache.mina.common.IoSession) + */ + public void remove(IoSession iosession) { + recycleMap.remove(iosession); + } + + /* + * (non-Javadoc) + * + * @see org.apache.mina.common.IoSessionRecycler#recycle(java.net.SocketAddress, + * java.net.SocketAddress) + */ + public IoSession recycle(SocketAddress localAddress, + SocketAddress remoteAddress) { + return (IoSession) recycleMap.get(generateKey(localAddress, + remoteAddress)); + } + + /* + * (non-Javadoc) + * + * @see org.apache.mina.common.IoSessionRecycler#put(org.apache.mina.common.IoSession) + */ + public void put(IoSession iosession) { + Object key = generateKey(iosession); + if (!recycleMap.containsKey(key)) { + recycleMap.put(key, iosession); + } + } + + /** + * Generate key. + * + * @param iosession the iosession + * + * @return the object + */ + private Object generateKey(IoSession iosession) { + return generateKey(iosession.getLocalAddress(), iosession + .getRemoteAddress()); + } + + /** + * Generate key. + * + * @param localAddress the local address + * @param remoteAddress the remote address + * + * @return the object + */ + private Object generateKey(SocketAddress localAddress, + SocketAddress remoteAddress) { + List key = new ArrayList(2); + key.add(remoteAddress); + key.add(localAddress); + return key; + } +} \ No newline at end of file diff --git a/src/main/java/com/eactive/eai/rms/client/SocketClient.java b/src/main/java/com/eactive/eai/rms/client/SocketClient.java new file mode 100644 index 0000000..49ce690 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/SocketClient.java @@ -0,0 +1,30 @@ +package com.eactive.eai.rms.client; + +import com.eactive.eai.rms.onl.vo.MonitorDataVo; + +/** + * The Interface SocketClient. + *
    + *
  • 1. Function :SocketClient 인터페이스
  • + *
  • 2. Summary :
  • + *
  • 3. Notification :
  • + *
+ * + * @author : $Author: 박기섭 $ + * @version : $Revision: 1.3 $ + */ +public interface SocketClient { + + /** + * Send. + * + * @param serializable the serializable + */ + public void send(MonitorDataVo serializable); + + /** + * Destroy. + */ + public void destroy(); + +} diff --git a/src/main/java/com/eactive/eai/rms/client/SocketClientUdpImpl.java b/src/main/java/com/eactive/eai/rms/client/SocketClientUdpImpl.java new file mode 100644 index 0000000..b68234c --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/SocketClientUdpImpl.java @@ -0,0 +1,180 @@ +package com.eactive.eai.rms.client; + +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.io.ObjectStreamClass; +import java.io.OutputStream; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.DatagramChannel; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; + +import org.springframework.beans.factory.InitializingBean; + +import com.eactive.eai.rms.client.common.AbstractSocketClient; +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.onl.vo.MonitorDataVo; + +/** + * The Class SocketClientUdpImpl. + *
    + *
  • 1. Function :
  • + *
  • 2. Summary :
  • + *
  • 3. Notification :
  • + *
+ * + * @author : $Author: 윤창용 $ + * @version : $Revision: 1.12 $ + */ +public class SocketClientUdpImpl extends AbstractSocketClient implements + InitializingBean { + + /** F/W logger. */ + private static com.eactive.eai.common.util.Logger logger = com.eactive.eai.common.util.Logger.getLogger(com.eactive.eai.common.util.Logger.LOGGER_CLIENT); + + + private Set dChannels = new HashSet(); + + + /* + * (non-Javadoc) + * + * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() + */ + public synchronized void afterPropertiesSet() throws Exception { + if( logger.isDebugEnabled() ) { + logger.debug("RMS_DEBUG:start afterPropertiesSet()" ); + } + connect(); + + if( logger.isDebugEnabled() ) { + logger.debug("RMS_DEBUG:end afterPropertiesSet()" ); + } + } + + private void connect() throws Exception { + logger.info("SocketClientUdpImpl] connection start"); + destroy(); + + String ipString = rmsProperties.getStringProperty(RmsProperties.RMS_SERVER_IP_KEY); + int port = rmsProperties.getIntProperty(RmsProperties.RMS_SERVER_PORT_KEY); + if (ipString != null) { + String[] ips = ipString.split(","); + + if (ips != null && ips.length > 0) { + for (int i = 0; i < ips.length; i++) { + DatagramChannel ch = null; + try{ + ch = DatagramChannel.open(); + InetSocketAddress ad = new InetSocketAddress(ips[i], port); + ch.connect(ad); + logger.info("SocketClientUdpImpl] upd address hostname="+ad.getHostName()+", port="+ad.getPort()); + }catch(Exception e){ + if (ch!=null) try{ch.disconnect();}catch(Exception e1){} + logger.error("SocketClientUdpImpl] udp connection error "+e.getMessage(),e); + continue; + } + this.dChannels.add(ch); + } + } + } + logger.info("SocketClientUdpImpl] connection end"); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.SocketClient#send(com.eactive.eai.rms.vo.MonitorDataVo) + */ + public void send(final MonitorDataVo vo) { + + // 현재 900k 이지만 테스트 수행수 적정 사이즈로 조정한다. + ByteBuffer buffer = ByteBuffer.allocate(1024*10); + buffer.position(4); + try { + try { + ObjectOutputStream out = new ObjectOutputStream(asOutputStream(buffer)) { + protected void writeClassDescriptor(ObjectStreamClass desc) + throws IOException { + String className = desc.getName(); + if (primitiveTypeNames.contains(className)) { + write(0); + super.writeClassDescriptor(desc); + } else { + write(1); + writeUTF(desc.getName()); + } + } + }; + out.writeObject(vo); + out.flush(); + } catch (IOException e) { + throw e; + } + + int size = buffer.position() - 4; + buffer.position(0); + buffer.putInt(size); + buffer.position(4+size); + + buffer.flip(); + for (DatagramChannel ch : dChannels) { + try{ + if (ch.isConnected()){ + buffer.position(0); + int written = ch.write(buffer); + logger.debug("written="+written); + } + }catch(Exception e){ + logger.error("RMS_ERROR : channel write error remote address[" +ch.getRemoteAddress()+"]" ,e); + }catch(Throwable t){ + logger.error("RMS_ERROR : channel write error remote address[" +ch.getRemoteAddress()+"]" ,t); + } + } + + } catch (Exception e) { + // 현재 AIX 의 udp_send buffer size 가 1M 로 설정되어 있음. ( 2009.02.23 ) + logger.error("RMS_ERROR : UDP 버퍼 사이즈 에러 buffer.limit()=" + buffer.limit() ,e); + } + + } + + public OutputStream asOutputStream(final ByteBuffer buffer) { + return new OutputStream() { + public void write(byte[] b, int off, int len) { + buffer.put(b, off, len); + } + + public void write(int b) { + buffer.put((byte) b); + } + }; + } + + public void destroy() { + for (DatagramChannel ch : dChannels) { + if (ch != null) { + try { + ch.disconnect(); + } catch(Exception ex) { + logger.error("udp destory error="+ex.getMessage(),ex); + } + } + } + dChannels.removeAll(new HashSet()); + } + + private static final Set primitiveTypeNames = new HashSet(); + + static { + primitiveTypeNames.add("void"); + primitiveTypeNames.add("boolean"); + primitiveTypeNames.add("byte"); + primitiveTypeNames.add("char"); + primitiveTypeNames.add("short"); + primitiveTypeNames.add("int"); + primitiveTypeNames.add("long"); + primitiveTypeNames.add("float"); + primitiveTypeNames.add("double"); + } +} \ No newline at end of file diff --git a/src/main/java/com/eactive/eai/rms/client/UdpClientSessionHandler.java b/src/main/java/com/eactive/eai/rms/client/UdpClientSessionHandler.java new file mode 100644 index 0000000..d55011a --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/UdpClientSessionHandler.java @@ -0,0 +1,71 @@ +package com.eactive.eai.rms.client; + +import java.util.List; + +import org.apache.mina.common.IoSession; +import org.apache.mina.handler.demux.DemuxingIoHandler; +import org.apache.mina.handler.demux.MessageHandler; +import org.apache.mina.util.SessionLog; + +import org.springframework.beans.factory.InitializingBean; + +import com.eactive.eai.rms.client.handler.IMessageHandler; + +/** + * The Class UdpClientSessionHandler. + *
    + *
  • 1. Function :EAI Framework으로 부터 송신하는 UDP/IP의 SessionHandler입니다.
  • + *
  • 2. Summary :
  • + *
  • 3. Notification :
  • + *
+ * + * @author : $Author: 박기섭 $ + * @version : $Revision: 1.6 $ + */ +public class UdpClientSessionHandler extends DemuxingIoHandler implements + InitializingBean { + + public UdpClientSessionHandler(List handlers) { + for (IMessageHandler handler : handlers) { + addMessageHandler(handler.targetClass(), (MessageHandler) handler); + } + } + + /* (non-Javadoc) + * @see org.apache.mina.common.IoHandlerAdapter#sessionOpened(org.apache.mina.common.IoSession) + */ + @Override + public void sessionOpened(IoSession session) { + } + + /* (non-Javadoc) + * @see org.apache.mina.common.IoHandlerAdapter#messageSent(org.apache.mina.common.IoSession, java.lang.Object) + */ + @Override + public void messageSent(IoSession session, Object message) throws Exception { + if (SessionLog.isDebugEnabled(session)) { + SessionLog.debug(session, "message : " + message + "\n" + session); + } + } + + /* (non-Javadoc) + * @see org.apache.mina.common.IoHandlerAdapter#exceptionCaught(org.apache.mina.common.IoSession, java.lang.Throwable) + */ + @Override + public void exceptionCaught(IoSession session, Throwable cause) { + if (SessionLog.isDebugEnabled(session)) { + SessionLog.debug(session, "exceptionCaught", cause); + } + } + + /* (non-Javadoc) + * @see org.apache.mina.common.IoHandlerAdapter#sessionClosed(org.apache.mina.common.IoSession) + */ + @Override + public void sessionClosed(IoSession session) throws Exception { + } + + public void afterPropertiesSet() throws Exception { + } + +} \ No newline at end of file diff --git a/src/main/java/com/eactive/eai/rms/client/agent/AbstractScheduledAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/AbstractScheduledAgent.java new file mode 100644 index 0000000..14ed179 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/AbstractScheduledAgent.java @@ -0,0 +1,32 @@ +package com.eactive.eai.rms.client.agent; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +/** + * The Interface AbstractScheduledAgent. + * + * + *
    + *
  • 1. Function : 지정된 시간, 주기로 실행 되는 모든 작업에 대한 상위 인터페이스 입니다.
  • + *
  • 2. Summary :
  • + *
  • 3. Notification :
  • + *
+ * + * @author : $Author: 윤창용 $ + * @version : $Revision: 1.2 $ + */ +public abstract class AbstractScheduledAgent implements Runnable, + ApplicationContextAware { + /** F/W logger. */ + protected static com.eactive.eai.common.util.Logger logger = com.eactive.eai.common.util.Logger.getLogger(com.eactive.eai.common.util.Logger.LOGGER_CLIENT); + + ApplicationContext applicationContext; + + public void setApplicationContext(ApplicationContext applicationContext) + throws BeansException { + this.applicationContext = applicationContext; + + } +} diff --git a/src/main/java/com/eactive/eai/rms/client/agent/AdaptersAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/AdaptersAgent.java new file mode 100644 index 0000000..a800316 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/AdaptersAgent.java @@ -0,0 +1,381 @@ +/** + * + */ +package com.eactive.eai.rms.client.agent; + +import java.util.Arrays; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Iterator; + +import com.eactive.eai.adapter.AdapterGroupVO; +import com.eactive.eai.adapter.AdapterManager; +import com.eactive.eai.adapter.AdapterVO; +import com.eactive.eai.common.server.EAIServerManager; +import com.eactive.eai.rms.client.SocketClient; +import com.eactive.eai.rms.client.dao.AgentAdapterDAO; +import com.eactive.eai.rms.onl.vo.AdaptersVO; + +/** + * @author cyyun + * + */ +public class AdaptersAgent extends AbstractScheduledAgent { + + private SocketClient socketClient; + private final int maxBufferSize = 1024*3; //어뎁터 모니터링 maxBufferSize 이상이면 모니터링 하지 않음 UDP Buffer 문제 + private AgentAdapterDAO agentAdapterDao; + + /* + * (non-Javadoc) + * + * @see java.lang.Runnable#run() + */ + public void run() { + AdaptersVO adaptersVO = (AdaptersVO) applicationContext.getBean("adaptersVO"); + initAdapter( adaptersVO ); + checkAdapter( adaptersVO ); + + socketClient.send(adaptersVO); + + logger.debug("SEND AdaptersAgent : " + adaptersVO ); + } + + public void setSocketClient(SocketClient socketClient) { + this.socketClient = socketClient; + } + public void setAgentAdapterDao(AgentAdapterDAO agentAdapterDao){ + this.agentAdapterDao = agentAdapterDao; + } + + public AdaptersVO getAdapterInfo() { + AdaptersVO adapter = new AdaptersVO(); + + initAdapter(adapter); + checkAdapter(adapter); + + return adapter; + } + + + @SuppressWarnings("unchecked") + public void initAdapter(AdaptersVO adapter) { + // get Adapter manager + AdapterManager manager = AdapterManager.getInstance(); + + // get Adapter group list + HashMap voMap = manager.getAllAdapterGroupVO(); + + Iterator it = voMap.keySet().iterator(); + + String[] groupNames = new String[voMap.size()]; + + for (int i = 0; it.hasNext(); i++) { + groupNames[i] = (String) it.next(); + } + + Arrays.sort(groupNames); + + //송신하는 서버의 정보 + EAIServerManager serManager = EAIServerManager.getInstance(); + String localServName = serManager.getLocalServerName(); + adapter.setDisconAdaptersGroup(localServName); + + //------------------------------------------ + // 어뎁터 검색 조건에 의해 모니터링 제외 대상을 산정 - 2012.06.14 Edited by Chaesh + //------------------------------------------ + HashMap monitorDisableMap = new HashMap(); + try { + monitorDisableMap = agentAdapterDao.getMonitorUseNoAdapterList(); + } + catch(Exception ex) { + logger.error("adapterMonitorPage.jsp - getMonitorUseAdapterList AdapterGroup Select Error. Skip "); + } + //------------------------------------------ + // 시간 조건에 의해 모니터링 제외 대상을 산정 - 2012.06.14 Edited by Chaesh + //------------------------------------------ + HashMap monitorTimeConditionMap = new HashMap(); + try { + monitorTimeConditionMap = agentAdapterDao.getMonitorTimeConditionAdapterList(); + } + catch(Exception ex) { + logger.error("adapterMonitorPage.jsp - getMonitorUseAdapterList AdapterGroup Select Error. Skip "); + } + //------------------------------------------ + + Calendar cal = Calendar.getInstance(); + int weekCount = cal.get(Calendar.DAY_OF_WEEK); + + // 20190214 dhlee + // BugFix : 11시 1분의 경우 : 111 -> 1101 +// String timeCtnt = String.valueOf(cal.get(Calendar.HOUR_OF_DAY)) + String.valueOf(cal.get(Calendar.MINUTE)); + + String timeCtnt = String.format("%02d",cal.get(Calendar.HOUR_OF_DAY)) + + String.format("%02d", cal.get(Calendar.MINUTE)); + + for (int i = 0; i < groupNames.length; i++) { + + // get Adapter group value + AdapterGroupVO gvo = manager.getAdapterGroupVO(groupNames[i]); + Iterator it2 = null; + + //------------------------------------------ + // 모니터링 제외 N 어댑터 SKIP. - 2012.06.14 + //------------------------------------------ + if(monitorDisableMap !=null && monitorDisableMap.size() > 0) { + if(monitorDisableMap.get(groupNames[i]) != null) { + continue; + } + } + //------------------------------------------ + // 모니터링 시간 조건 체크 - 2012.06.14 + //------------------------------------------ + if(monitorTimeConditionMap !=null && monitorTimeConditionMap.size() > 0) { + String conditionString = (String) monitorTimeConditionMap.get(groupNames[i]); + if( conditionString != null) { + try { + String[] ctntTemp = conditionString.split(","); + if ( ctntTemp[0].equals("Y") ) { + if ( ctntTemp[2].compareTo(timeCtnt) > 0 || ctntTemp[3].compareTo(timeCtnt) < 0) { + continue; + } + if ( ctntTemp[1].equals("WEEKDAY") ) { + switch ( weekCount ) { + case 1 : + case 7 : + continue; + default : + ; + } + } + } + } catch (Exception e){ + logger.error("Monitoring codition code parse Error - Plz check the rule.",e); + } + } + } + //------------------------------------------ + + if (gvo == null) + continue; + + // get Adapter list + it2 = gvo.getAdapters(); + + for (int j = 0; it2.hasNext(); j++) { + + // get Adapter value + AdapterVO vo = (AdapterVO) it2.next(); + + if (vo == null) + continue; + + // total + adapter.total[0]++; + if (vo.isStarted()) + adapter.total[1]++; + else + adapter.total[2]++; + + if (("SNA").equals(gvo.getType())) { + adapter.sna[0]++; + if (vo.isStatus()) + adapter.sna[1]++; + else + adapter.sna[2]++; + } else if (("SOC").equals(gvo.getType())) { + adapter.socket[0]++; + if (vo.isStatus()) + adapter.socket[1]++; + else + adapter.socket[2]++; + } else if (("NET").equals(gvo.getType())) { + adapter.socket2[0]++; + + if (vo.isStatus()) + adapter.socket2[1]++; + else { + adapter.socket2[2]++; + //Status 가 false 상태은 어뎁터는 , 로 엮어서 RMS에 송신 + if ( adapter.getDisconAdaptersGroup().length() < maxBufferSize ) + adapter.setDisconAdaptersGroup(adapter.getDisconAdaptersGroup() + "," + vo.getAdapterGroupName()); + } + } else if (("WTC").equals(gvo.getType())) { + adapter.tuxedo[0]++; + if (vo.isStatus()) + adapter.tuxedo[1]++; + else + adapter.tuxedo[2]++; + } else if (("IMQ").equals(gvo.getType())) { + adapter.mq[0]++; + if (vo.isStatus()) + adapter.mq[1]++; + else + adapter.mq[2]++; + } else if (("HTT").equals(gvo.getType()) || ("RST").equals(gvo.getType())) { + adapter.http[0]++; + if (vo.isStatus()) + adapter.http[1]++; + else + adapter.http[2]++; + } else if (("EJB").equals(gvo.getType())) { + adapter.ejb[0]++; + if (vo.isStatus()) + adapter.ejb[1]++; + else + adapter.ejb[2]++; + } + + } // end of for(j) + + } // end of for(i) + } + + public void checkAdapter(AdaptersVO adapter) { + + if ((adapter.sna[0] == 0) || (adapter.sna[1] == 0)) + adapter.sna[3] = 0; + else if ((adapter.sna[2] == 0)) + adapter.sna[3] = 2; + else if ((adapter.sna[2] > 0)) + adapter.sna[3] = 1; + + // SOCKET + if ((adapter.socket[0] == 0) || (adapter.socket[1] == 0)) + adapter.socket[3] = 0; + else if ((adapter.socket[2] == 0)) + adapter.socket[3] = 2; + else if ((adapter.socket[2] > 0)) + adapter.socket[3] = 1; + + // SOCKET2 + if ((adapter.socket2[0] == 0) || (adapter.socket2[1] == 0)) + adapter.socket2[3] = 0; + else if ((adapter.socket2[2] == 0)) + adapter.socket2[3] = 2; + else if ((adapter.socket2[2] > 0)) + adapter.socket2[3] = 1; + + // TUXEDO + if ((adapter.tuxedo[0] == 0) || (adapter.tuxedo[1] == 0)) + adapter.tuxedo[3] = 0; + else if ((adapter.tuxedo[2] == 0)) + adapter.tuxedo[3] = 2; + else if ((adapter.tuxedo[2] > 0)) + adapter.tuxedo[3] = 1; + + // MQseries + if ((adapter.mq[0] == 0) || (adapter.mq[1] == 0)) + adapter.mq[3] = 0; + else if ((adapter.mq[2] == 0)) + adapter.mq[3] = 2; + else if ((adapter.mq[2] > 0)) + adapter.mq[3] = 1; + + // HTTP + if ((adapter.http[0] == 0) || (adapter.http[1] == 0)) + adapter.http[3] = 0; + else if ((adapter.http[2] == 0)) + adapter.http[3] = 2; + else if ((adapter.http[2] > 0)) + adapter.http[3] = 1; + + // EJB + if ((adapter.ejb[0] == 0) || (adapter.ejb[1] == 0)) + adapter.ejb[3] = 0; + else if ((adapter.ejb[2] == 0)) + adapter.ejb[3] = 2; + else if ((adapter.ejb[2] > 0)) + adapter.ejb[3] = 1; + + // TOTAL + // 1. 에러가 포함되었으면 => 에러 + // 2. 부분정상 이 포함되었으면 => 부분정상 + // 3. 전체 정상 이면 => 전체정상 + if (adapter.sna[3] == 0 || adapter.socket[3] == 0 + || adapter.socket2[3] == 0 || adapter.tuxedo[3] == 0 + || adapter.mq[3] == 0 || adapter.http[3] == 0 + || adapter.ejb[3] == 0) { + adapter.total[3] = 0; + } else if (adapter.sna[3] == 1 || adapter.socket[3] == 1 + || adapter.socket2[3] == 1 || adapter.tuxedo[3] == 1 + || adapter.mq[3] == 1 || adapter.http[3] == 1 + || adapter.ejb[3] == 1) { + adapter.total[3] = 1; + } else { + adapter.total[3] = 2; + } + + //-------------------------------------- + // 등록된 어댑터가 없는 경우 3으로 설정 + //-------------------------------------- + if(adapter.sna [0] == 0 ) adapter.sna[3] = 3 ; + if(adapter.socket [0] == 0 ) adapter.socket[3] = 3 ; + if(adapter.socket2 [0] == 0 ) adapter.socket2[3] = 3 ; + if(adapter.mq [0] == 0 ) adapter.mq[3] = 3 ; + if(adapter.http [0] == 0 ) adapter.http[3] = 3 ; + if(adapter.ejb [0] == 0 ) adapter.ejb[3] = 3 ; + if(adapter.tuxedo [0] == 0 ) adapter.tuxedo[3] = 3 ; + //-------------------------------------- + } + + + + +// private HashMap getDisabledAdapterList() throws Exception { +// Connection conn = null; +// Statement stmt = null; +// ResultSet rs = null; +// HashMap disabledMap = new HashMap(); +// +// StringBuffer sb_sql = new StringBuffer(); +// +// sb_sql.append(" select AdptrBzwkGroupName, EAISevrDstcd \n"); +// sb_sql.append(" from "+ Keys.TABLE_OWNER + "TSEAIAD01 \n"); +// sb_sql.append(" where EAISevrDstcd IN ( '6', '7', '8', '9' ) \n"); +// +// try { +// conn = getConnection(); +// stmt = conn.createStatement(); +// stmt.execute(sb_sql.toString()); +// rs = stmt.getResultSet(); +// +// +// while(rs.next()) { +// disabledMap.put(rs.getString(1),rs.getString(2)); +// } +// +// return disabledMap; +// } +// catch(Exception e) { +// logger.error(e); +// throw e; +// } +// finally { +// try { +// if(rs != null) rs.close(); +// if(stmt != null) stmt.close(); +// if(conn != null) conn.close(); +// } +// catch (SQLException sqle) { +// logger.error("SQLException was thrown: " + sqle.getMessage(),sqle); +// } +// } +// } + + + + +// public static void main(String[] args) { +// Calendar cal = Calendar.getInstance(); +// int weekCount = cal.get(Calendar.DAY_OF_WEEK); +// String timeCtnt = String.format("%02d",cal.get(Calendar.HOUR_OF_DAY)) +// + String.format("%02d", cal.get(Calendar.MINUTE)); +// +// String timeCtnt2 = String.valueOf(cal.get(Calendar.HOUR_OF_DAY)) + String.valueOf(cal.get(Calendar.MINUTE)); +// +// System.out.println(weekCount); +// System.out.println(timeCtnt); +// System.out.println(timeCtnt2); +// } +} diff --git a/src/main/java/com/eactive/eai/rms/client/agent/AdaptersStatusAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/AdaptersStatusAgent.java new file mode 100644 index 0000000..f900b90 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/AdaptersStatusAgent.java @@ -0,0 +1,51 @@ +package com.eactive.eai.rms.client.agent; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; + +import com.eactive.eai.adapter.AdapterGroupVO; +import com.eactive.eai.adapter.AdapterManager; +import com.eactive.eai.rms.client.SocketClient; +import com.eactive.eai.rms.onl.vo.AdaptersStatusVO; + +public class AdaptersStatusAgent extends AbstractScheduledAgent { + + private SocketClient socketClient; + + public void run() { + AdaptersStatusVO adaptersStatusVO = (AdaptersStatusVO) applicationContext.getBean("adaptersStatusVO"); + setAdapters(adaptersStatusVO); + socketClient.send(adaptersStatusVO); + } + + public void setSocketClient(SocketClient socketClient) { + this.socketClient = socketClient; + } + + public AdaptersStatusVO getAdapterStatusInfo() { + AdaptersStatusVO adaptersStatusVO = new AdaptersStatusVO(); + setAdapters(adaptersStatusVO); + return adaptersStatusVO; + } + + public void setAdapters(AdaptersStatusVO adapterStatus) { + AdapterManager manager = AdapterManager.getInstance(); + HashMap voMap = manager.getAllAdapterGroupVO(); + + Iterator it = voMap.keySet().iterator(); + + String[] groupNames = new String[voMap.size()]; + + for (int i = 0; it.hasNext(); i++) { + groupNames[i] = it.next(); + } + + Arrays.sort(groupNames); + + for (int i = 0; i < groupNames.length; i++) { + AdapterGroupVO gvo = manager.getAdapterGroupVO(groupNames[i]); + adapterStatus.setAdapter(groupNames[i], gvo.isAlive()); + } + } +} diff --git a/src/main/java/com/eactive/eai/rms/client/agent/EaiEngineStatusAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/EaiEngineStatusAgent.java new file mode 100644 index 0000000..138fa87 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/EaiEngineStatusAgent.java @@ -0,0 +1,67 @@ +package com.eactive.eai.rms.client.agent; + +import org.apache.commons.lang3.StringUtils; + +import com.eactive.eai.rms.client.SocketClient; +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.client.service.EaiEngineStatusService; +import com.eactive.eai.rms.client.service.HostStatusService; +import com.eactive.eai.rms.onl.vo.EAIEngineStatusVo; + +/** + * The Class EaiEngineStatusAgent. + *
    + *
  • 1. Function : Eai Engine의 상태정보를 수집 하는 agent
  • + *
  • 2. Summary :
  • + *
  • 3. Notification :
  • + *
+ * + * @author : $Author: 박기섭 $ + * @version : $Revision: 1.2 $ + */ +public class EaiEngineStatusAgent extends AbstractScheduledAgent { + + private EaiEngineStatusService eaiEngineSingleStatusService; + private SocketClient socketClient; + private HostStatusService hostStatusService; + private RmsProperties rmsProperties; + + /* (non-Javadoc) + * @see java.lang.Runnable#run() + */ + public void run() { + try { + + EAIEngineStatusVo vo = eaiEngineSingleStatusService.getEAIEngineStatus(); + + String path = rmsProperties.getStringProperty(RmsProperties.JMS_DISK_SPACE_PATH); + + int percentage = hostStatusService.getDiskPercentage(path); + + vo.setJmsFileStoreUseAge(percentage); + + socketClient.send(vo); + logger.debug("SEND EaiEngineStatusAgent : " + vo ); + } catch (Exception e) { + logger.error(e.getMessage(),e); + } + } + + public void setEaiEngineSingleStatusService( + EaiEngineStatusService eaiEngineSingleStatusService) { + this.eaiEngineSingleStatusService = eaiEngineSingleStatusService; + } + + public void setSocketClient(SocketClient socketClient) { + this.socketClient = socketClient; + } + + public void setHostStatusService(HostStatusService hostStatusService) { + this.hostStatusService = hostStatusService; + } + + public void setRmsProperties(RmsProperties rmsProperties) { + this.rmsProperties = rmsProperties; + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/agent/HostStatusAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/HostStatusAgent.java new file mode 100644 index 0000000..edfe350 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/HostStatusAgent.java @@ -0,0 +1,47 @@ +package com.eactive.eai.rms.client.agent; + +import org.apache.commons.lang3.StringUtils; + +import com.eactive.eai.rms.client.SocketClient; +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.client.service.HostStatusService; +import com.eactive.eai.rms.onl.vo.HostStatusVo; + +public class HostStatusAgent extends AbstractScheduledAgent { + + private HostStatusService hostStatusService; + private RmsProperties rmsProperties; + private SocketClient socketClient; + + public void run() { + + try { + + String path = rmsProperties.getStringProperty(RmsProperties.DISK_SPACE_PATH, "/fseai"); + + HostStatusVo hostStatusVo = (HostStatusVo) applicationContext.getBean("hostStatusVo"); + + hostStatusVo.setCpu(hostStatusService.getCpuPercentage()); + hostStatusVo.setMemory(hostStatusService.getMemoryPercentage()); + hostStatusVo.setDisk(hostStatusService.getDiskPercentage(path)); + + socketClient.send(hostStatusVo); + logger.debug("SEND HostStatusAgent : " + hostStatusVo ); + } catch (Exception e) { + logger.warn(this, e); + } + + } + + public void setHostStatusService(HostStatusService hostStatusService) { + this.hostStatusService = hostStatusService; + } + + public void setRmsProperties(RmsProperties rmsProperties) { + this.rmsProperties = rmsProperties; + } + + public void setSocketClient(SocketClient socketClient) { + this.socketClient = socketClient; + } +} diff --git a/src/main/java/com/eactive/eai/rms/client/agent/ItsmMonitorAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/ItsmMonitorAgent.java new file mode 100644 index 0000000..dcf56da --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/ItsmMonitorAgent.java @@ -0,0 +1,103 @@ +package com.eactive.eai.rms.client.agent; + +import com.eactive.eai.rms.client.SocketClient; +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.client.service.HostStatusService; +import com.eactive.eai.rms.onl.vo.HostStatusVo; +import com.eactive.eai.rms.onl.vo.ItsmVo; + +public class ItsmMonitorAgent extends AbstractScheduledAgent { + + private HostStatusService hostStatusService; + private RmsProperties rmsProperties; + private SocketClient socketClient; + + private HostStatusVo hostStatusVo; + + public void run() { + // ITSM 에 전송하기 위해 추가로 수집해야 할 리소스 + // Network I/O, Disk swap + +// ItsmVo itsmVo = (ItsmVo) applicationContext.getBean("itsmVo"); +// +// try { +// String cmd = rmsProperties.getStringProperty( +// RmsProperties.ITSM_NET_CMD, "/fsapp/eai/rms_util/nettot"); +// String tmp[] = hostStatusService.getInOutBps(cmd).split(","); +// if (logger.isDebugEnabled()) { +// if (tmp == null || "".equals(tmp)) { +// logger.debug("hostStatusService.getInOutBps() returned null"); +// } else { +// for (int i = 0; i < tmp.length; i++) { +// logger.debug(tmp[i]); +// } +// } +// } +// +// if (tmp.length >= 2) { +// itsmVo.setIn(tmp[0]); +// itsmVo.setOut(tmp[1]); +// } +// +// cmd = rmsProperties.getStringProperty(RmsProperties.ITSM_DISK_CMD, +// "/fsapp/eai/rms_util/disktot"); +// String tmp2 = hostStatusService.getSwapUsage(cmd); +// if (logger.isDebugEnabled()) { +// if (tmp2 == null || "".equals(tmp2)) { +// logger.debug("hostStatusService.getSwapSize() returned null"); +// } else { +// logger.debug(cmd + " : result=" + tmp2); +// } +// } +// +// if (tmp2 != null && !tmp2.equals("")) { +// itsmVo.setSwap(tmp2); // 실제는 디스크 SWAP 사용율 이다. ( usage % ) +// } +// +// itsmVo.setTime(null); // use default +// +// itsmVo.setCpu("" + hostStatusVo.getCpu()); +// itsmVo.setDisk("" + hostStatusVo.getDisk()); +// itsmVo.setMemory("" + hostStatusVo.getMemory()); +// +// socketClient.send(itsmVo); +// logger.debug("SEND ItsmMonitorAgent : " + itsmVo ); +// } catch (Exception e) { +// //e.printStackTrace(); +// logger.error("RMS : (rms_client) Exception !!!",e); +// } +// +// if (logger.isDebugEnabled()) { +// logger.debug(itsmVo.toString()); +// } + } + + /** + * @param hostStatusService the hostStatusService to set + */ + public void setHostStatusService(HostStatusService hostStatusService) { + this.hostStatusService = hostStatusService; + } + + /** + * @param rmsProperties the rmsProperties to set + */ + public void setRmsProperties(RmsProperties rmsProperties) { + this.rmsProperties = rmsProperties; + } + + /** + * @param socketClient the socketClient to set + */ + public void setSocketClient(SocketClient socketClient) { + this.socketClient = socketClient; + } + + /** + * @param hostStatusVo the hostStatusVo to set + */ + public void setHostStatusVo(HostStatusVo hostStatusVo) { + this.hostStatusVo = hostStatusVo; + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/agent/JmsFileStoreAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/JmsFileStoreAgent.java new file mode 100644 index 0000000..4ad51f1 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/JmsFileStoreAgent.java @@ -0,0 +1,67 @@ +package com.eactive.eai.rms.client.agent; + +import org.apache.commons.lang3.StringUtils; + +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.client.service.HostStatusService; +import com.eactive.eai.rms.onl.vo.EAIEngineStatusVo; + +/** + * The Class JmsFileStoreAgent. + *
    + *
  • 1. Function :
  • + *
  • 2. Summary :
  • + *
  • 3. Notification :
  • + *
+ * + * @author : $Author: + * @version : $Revision: 1.4 $ + */ +public class JmsFileStoreAgent extends AbstractScheduledAgent { + + /** The host status service. */ + private HostStatusService hostStatusService; + + /** The rms properties. */ + private RmsProperties rmsProperties; + + /* (non-Javadoc) + * @see java.lang.Runnable#run() + */ + public void run() { + try {String osName = System.getProperty("os.name", ""); + if(StringUtils.contains(osName.toLowerCase(), "win")) { + logger.debug("OS "+osName+ " is skip to check status"); + return; + } + EAIEngineStatusVo vo = (EAIEngineStatusVo) applicationContext.getBean("eaiEngineStatusVo"); + + String path = rmsProperties.getStringProperty(RmsProperties.JMS_DISK_SPACE_PATH); + + int percentage = hostStatusService.getDiskPercentage(path); + + vo.setJmsFileStoreUseAge(percentage); + } catch (Exception e) { + logger.warn(e.getMessage()); + } + } + + /** + * Sets the host status service. + * + * @param hostStatusService the new host status service + */ + public void setHostStatusService(HostStatusService hostStatusService) { + this.hostStatusService = hostStatusService; + } + + /** + * Sets the rms properties. + * + * @param rmsProperties the new rms properties + */ + public void setRmsProperties(RmsProperties rmsProperties) { + this.rmsProperties = rmsProperties; + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/agent/JmsQueueAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/JmsQueueAgent.java new file mode 100644 index 0000000..a1952c6 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/JmsQueueAgent.java @@ -0,0 +1,85 @@ +package com.eactive.eai.rms.client.agent; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Properties; + +import com.eactive.eai.common.util.ContainerUtil; +import com.eactive.eai.env.ElinkConfig; +import com.eactive.eai.rms.client.SocketClient; +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.client.service.JMXMonitoring; +import com.eactive.eai.rms.client.service.JMXMonitoringFactory; +//import com.eactive.eai.rms.client.service.SingleQueueMonitoring; +//import com.eactive.eai.rms.client.service.SingleServerMonitoring; +import com.eactive.eai.rms.onl.vo.JmsMonitorVo; + +public class JmsQueueAgent extends AbstractScheduledAgent { + + /** The socket client. */ + private SocketClient socketClient = null; + + /** The RMS Properties */ + private RmsProperties rmsProperties; + + private Properties adminClientProperties; + + public void setAdminClientProperties(Properties adminClientProperties) { + this.adminClientProperties = adminClientProperties; + } + + @SuppressWarnings("unchecked") + public void run() { + logger.debug("JmsQueueAgent "); + JmsMonitorVo vo = null ; + try { + vo = (JmsMonitorVo) applicationContext.getBean("jmsMonitorVo"); + if( vo == null ) { + logger.error("JmsQueueAgent - Can't get bean => jmsMonitorVo"); + return ; + } + + HashMap map = getLocalQueueInfo(); + if( map != null && !map.isEmpty() ) { + Iterator it = map.keySet().iterator(); + while( it.hasNext() ) { + String name = (String)it.next(); + String info[] = (String[])map.get(name); + + if(logger.isDebug()) logger.debug("JmsQueueAgent - Queue Name => "+name); + + vo.setUdpQueueName( name ); + vo.setUdpInfo( info ); + + socketClient.send(vo); + logger.debug("SEND JmsQueueAgent : " + vo ); + } + } + } catch ( Exception e ) { + logger.error(e.getMessage()); + } + } + + public HashMap getLocalQueueInfo() throws Exception{ + + String instName = rmsProperties.getStringProperty(RmsProperties.EAI_SERVER_INSTANCE_NAME); + JMXMonitoring monitoring = JMXMonitoringFactory.createQueueMonitoring(ContainerUtil.get()); + if (monitoring == null) return new HashMap(); + monitoring.init(this.adminClientProperties); + return (HashMap)monitoring.getState(instName); + + } + + public static void main(String[] args) throws Exception { + JmsQueueAgent s = new JmsQueueAgent(); + s.run(); + } + + public void setSocketClient(SocketClient socketClient) { + this.socketClient = socketClient; + } + + public void setRmsProperties(RmsProperties rmsProperties) { + this.rmsProperties = rmsProperties; + } +} \ No newline at end of file diff --git a/src/main/java/com/eactive/eai/rms/client/agent/SmsAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/SmsAgent.java new file mode 100644 index 0000000..2541c50 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/SmsAgent.java @@ -0,0 +1,176 @@ +package com.eactive.eai.rms.client.agent; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.nio.channels.FileChannel; +import java.nio.charset.Charset; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.LinkedList; + +import com.eactive.eai.rms.client.SocketClient; +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.onl.vo.SmsVO; + +import org.apache.mina.common.ByteBuffer; + +/** + * The Class SmsAgent. + *
    + *
  • 1. Function : SMS내용을 정해진 주기 마다 RMS 서버로 전송 합니다.
  • + *
  • 2. Summary :
  • + *
  • 3. Notification :
  • + *
+ * + * @author : $Author: 윤창용 $ + * @version : $Revision: 1.8 $ + */ +public class SmsAgent extends AbstractScheduledAgent { + + private SocketClient socketClient = null; + private RmsProperties rmsProperties; + /** + * sms log data format + * 월일 시간[건수]인스턴스 메시지 + * 1103 13:56:58.715[1]mcc11 HTTP호출에러|MUTMIAS00000170S1 + */ + public void run() { + File logFile = null; + RandomAccessFile raf = null; + FileChannel fileChannel = null; + ByteBuffer buffer = null; + SmsVO smsVO = null; + try { + int maxLine = rmsProperties.getIntProperty( + RmsProperties.SMS_AGENT_MAXLINE, 1); + + String DEFAULT_LOG_PATH = rmsProperties.getStringProperty( + RmsProperties.DEFAULT_LOG_PATH, "/fslog/eai/"); + String instanceName = rmsProperties + .getStringProperty(RmsProperties.EAI_SERVER_INSTANCE_NAME); + String SMS_LOG_FILE = rmsProperties.getStringProperty(RmsProperties.SMS_LOG_FILE, "sms.log"); + String SMS_LOG_FILE_ENCODING = rmsProperties.getStringProperty(RmsProperties.SMS_LOG_FILE_ENCODE, "UTF-8"); + + int bufferSize = maxLine * 100; + + // 마지막 5라인만 보낸다. + logFile = new File(DEFAULT_LOG_PATH + instanceName + "/" + + SMS_LOG_FILE); + raf = new RandomAccessFile(logFile, "r"); + fileChannel = raf.getChannel(); + buffer = ByteBuffer.allocate(bufferSize); + + if (raf.length() <= bufferSize) { + // bufferSize 바이트 보다 작으면 + fileChannel.read(buffer.buf()); + } else { + // bufferSize 바이트 보다 크면 뒤에서 부터 bufferSize 바이트만 읽는다. + fileChannel.read(buffer.buf(), raf.length() - bufferSize); + buffer.flip(); + String searchString = System.getProperty("line.separator"); + int position = findStringPosition(buffer, searchString, SMS_LOG_FILE_ENCODING); + if (position != -1) { + buffer.position(position + searchString.length() ); + buffer.compact(); + } + } + + buffer.flip(); + + //String text = buffer.getString(Charset.defaultCharset().newDecoder()); + String text = buffer.getString(Charset.forName(SMS_LOG_FILE_ENCODING).newDecoder()); + + String[] texts = text.split(System.lineSeparator()); + + smsVO = (SmsVO) applicationContext.getBean("smsVo"); + LinkedList list = new LinkedList(); + + int currentLine = 0; + for (int i = texts.length - 1; i >= 0 && currentLine < maxLine; i--) { + currentLine++; + if (logger.isDebugEnabled()) { + logger.debug(texts[i]); + } + + if (texts[i] != null && !texts[i].startsWith("[")) { + list.addLast(texts[i]); + } + } + + smsVO.setMessage(list); + + socketClient.send(smsVO); + logger.debug("SEND SmsAgent : " + smsVO ); + + } catch (FileNotFoundException fe) { + sendFileNotFoundMessage(logFile); + } catch (Exception e) { + logger.error("SMS 메세지를 수집 하는 중 에러가 발생 하였습니다. ", e); + } finally { + if (buffer != null) { + buffer.release(); + } + + if (fileChannel != null) { + try { + fileChannel.close(); + } catch (IOException e) { + } + } + + if (raf != null) { + try { + raf.close(); + } catch (IOException e) { + } + } + } + } + + private void sendFileNotFoundMessage(File logFile) { + try { + // 0702 00:00:08.371 + SmsVO smsVO = (SmsVO) applicationContext.getBean("smsVo"); + SimpleDateFormat format = new SimpleDateFormat("MMdd HH:mm:ss.SSS"); + ArrayList list = new ArrayList(); + list.add(format.format(new Date()) + "SMS 로그 파일을 찾을 수 없습니다 : " + + logFile.getPath()); + smsVO.setMessage(list); + socketClient.send(smsVO); + } catch (Exception e) { + //e.printStackTrace(); + } + } + + public static void main(String[] args) throws Exception { + SmsAgent s = new SmsAgent(); + s.run(); + } + + public void setSocketClient(SocketClient socketClient) { + this.socketClient = socketClient; + } + + public void setRmsProperties(RmsProperties rmsProperties) { + this.rmsProperties = rmsProperties; + } + private int findStringPosition(ByteBuffer buffer, String searchString, String encoding) { + byte[] searchBytes = searchString.getBytes(Charset.forName(encoding)); + for (int i = 0; i < buffer.remaining(); i++) { + boolean found = true; + for (int j = 0; j < searchBytes.length; j++) { + if (buffer.get(i + j) != searchBytes[j]) { + found = false; + break; + } + } + if (found) { + return i; + } + } + return -1; + } +} diff --git a/src/main/java/com/eactive/eai/rms/client/agent/TransactionTrackingAgent.java b/src/main/java/com/eactive/eai/rms/client/agent/TransactionTrackingAgent.java new file mode 100644 index 0000000..71c2950 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/agent/TransactionTrackingAgent.java @@ -0,0 +1,116 @@ +package com.eactive.eai.rms.client.agent; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.TimeZone; + +import com.eactive.eai.common.monitor.EAIServiceMonitor; +import com.eactive.eai.common.monitor.MonitorVO; +import com.eactive.eai.rms.client.SocketClient; +import com.eactive.eai.rms.onl.vo.TransactionSendVo; + +/** + * The Class TransactionTrackingAgent. + *
    + *
  • 1. Function :
  • + *
  • 2. Summary :
  • + *
  • 3. Notification :
  • + *
+ * + * @author : $Author: amjang $ + * @version : $Revision: 1.4 $ + */ +public class TransactionTrackingAgent extends AbstractScheduledAgent { + + /** The socket client. */ + private SocketClient socketClient; + + /* (non-Javadoc) + * @see java.lang.Runnable#run() + */ + public void run() { + EAIServiceMonitor monitor = EAIServiceMonitor.getInstance(); + sendTransactionOriginData( monitor ); + } + + /** + * + * @param monitor F/W 의 모니터링 정보 + */ + private void sendTransactionOriginData( EAIServiceMonitor monitor ) { + try { + // 2010.01.25 YUN - + // 만일 오늘 날짜와 모니터링 날짜가 다르면 (거래건수 초기화 수행중 ) + // 데이터를 전송하지 않는다. + // 주의 : Framework.jar 파일의 버전에 추가된 함수를 사용하므로, 함께 배포되어야 한다. + DateFormat df = new SimpleDateFormat("yyyyMMdd"); + TimeZone tz = TimeZone.getTimeZone("Asia/Seoul"); + df.setTimeZone(tz); + + String today = df.format(new Date()); + String monDate = monitor.getMonitorDate(); + if( ! today.equals(monDate) ) { + logger.debug("DEBUG_sendTransactionOriginData_today | monDate : " + today + "|" + monDate); + return ; + } + + TransactionSendVo sendVo = (TransactionSendVo) applicationContext.getBean("transactionSendVo"); + + String allBwkClsKey[] = monitor.getAllBwkClsKey(); + if(allBwkClsKey == null) { + logger.debug("DEBUG_sendTransactionOriginData_allBwkClsKey_isNull"); + return; // 2011.02.27 가비지에 의한 에러처리 + } + for (int bwkClsCount = 0; bwkClsCount < allBwkClsKey.length; bwkClsCount++) { + // 서비스 코드별 vo 맵 + HashMap voByBwk = monitor.getBwkCls(allBwkClsKey[bwkClsCount]); + if(voByBwk == null) logger.debug("DEBUG_sendTransactionOriginData_voByBwk_isNull"); + if (voByBwk != null) { + for( MonitorVO vo : voByBwk.values() ) { + if(vo == null) { + logger.debug("DEBUG_sendTransactionOriginData_MonitorVO_isNull"); + continue; // 2011.02.27 가비지에 의한 에러처리 + } + + sendVo.setCmd("DATA"); + sendVo.setKey1(allBwkClsKey[bwkClsCount]); + sendVo.setKey2(vo.getEaiServiceCode()); + sendVo.setVo( vo ); + socketClient.send( sendVo ); + + if( logger.isDebugEnabled() ) { + logger.debug( "RMS SEND NEW TRANSACTION(" + sendVo.getCmd() + ":key1=" + sendVo.getKey1() + ", key2=" + sendVo.getKey2()); + } + } + } + } + + // 분할된 데이터 전송이 끝났음을 RMS 서버에 알린다. + if( logger.isDebugEnabled() ) { + logger.debug( "RMS SEND NEW TRANSACTION(END)" ); + } + + // cmd 객체에 모니터링 날짜를 담아서 보낸다. + sendVo.setKey1(monDate); + sendVo.setCmd("END"); + socketClient.send( sendVo ); + + logger.debug("SEND TransactionTrackingAgent : " + sendVo ); + } catch (Exception e) { + logger.error("DEBUG_sendTransactionOriginData_Exception",e); + //e.printStackTrace(); + } + } + + /** + * Sets the socket client. + * + * @param socketClient the new socket client + */ + public void setSocketClient(SocketClient socketClient) { + this.socketClient = socketClient; + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/common/AbstractSocketClient.java b/src/main/java/com/eactive/eai/rms/client/common/AbstractSocketClient.java new file mode 100644 index 0000000..ab41d67 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/common/AbstractSocketClient.java @@ -0,0 +1,95 @@ +package com.eactive.eai.rms.client.common; + +import com.eactive.eai.rms.client.SocketClient; +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.onl.vo.MonitorDataVo; + +import org.apache.mina.common.IoConnector; +import org.apache.mina.common.IoConnectorConfig; +import org.apache.mina.common.IoHandler; +import org.apache.mina.common.IoSession; +import org.apache.mina.common.ThreadModel; +import org.apache.mina.filter.codec.ProtocolCodecFactory; + +/** + * The Class AbstractSocketClient. + *
    + *
  • 1. Function :
  • + *
  • 2. Summary :
  • + *
  • 3. Notification :
  • + *
+ * + * @author : $Author: + * @version : $Revision: 1.2 $ + */ +public abstract class AbstractSocketClient implements SocketClient { + + /** The Constant connector. */ + protected IoConnector connector; + + /** The datagram connector config. */ + protected IoConnectorConfig connectorConfig; + + /** The protocol codec factory. */ + protected ProtocolCodecFactory protocolCodecFactory; + + /** The handler. */ + protected IoHandler handler; + + /** The session. */ + protected IoSession session; + + /** The monitoring context. */ + protected RmsProperties rmsProperties; + + /** The thread model. */ + protected ThreadModel threadModel; + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.SocketClient#send(com.eactive.eai.rms.vo.MonitorDataVo) + */ + public abstract void send(MonitorDataVo serializable); + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.SocketClient#destroy() + */ + public abstract void destroy(); + + /** + * Sets the protocol codec factory. + * + * @param protocolCodecFactory the new protocol codec factory + */ + public void setProtocolCodecFactory( + ProtocolCodecFactory protocolCodecFactory) { + this.protocolCodecFactory = protocolCodecFactory; + } + + /** + * Sets the handler. + * + * @param handler the new handler + */ + public void setHandler(IoHandler handler) { + this.handler = handler; + } + + /** + * Sets the rms properties. + * + * @param rmsProperties the new rms properties + */ + public void setRmsProperties(RmsProperties rmsProperties) { + this.rmsProperties = rmsProperties; + } + + /** + * Sets the thread model. + * + * @param threadModel the new thread model + */ + public void setThreadModel(ThreadModel threadModel) { + this.threadModel = threadModel; + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/context/MonitoringContextFactory.java b/src/main/java/com/eactive/eai/rms/client/context/MonitoringContextFactory.java new file mode 100644 index 0000000..8027207 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/context/MonitoringContextFactory.java @@ -0,0 +1,40 @@ +package com.eactive.eai.rms.client.context; + +import com.eactive.eai.common.server.Keys; + +public class MonitoringContextFactory { + + public MonitoringContextFactory() { + } + + public void create() { + String logPathType = System.getProperty(Keys.SERVER_KEY).substring(0,5)+"G"; + System.setProperty("logPathType", logPathType); + RmsContext.getInstance(); + } + + public void create(String[] config) { + String logPathType = System.getProperty(Keys.SERVER_KEY).substring(0,5)+"G"; + System.setProperty("logPathType", logPathType); + RmsContext.getInstance(config); + } + + public void stop() { + RmsContext.getInstance().close();; + } + +// public static void main(String[] args) { +// try { +// Class clazz = Class.forName("com.eactive.eai.rms.client.context.MonitoringContextFactory"); +// +// Object factory = clazz.newInstance(); +// Method method = clazz.getMethod("create"); +// method.invoke(factory); +// +// System.out.println("RMS CLIENT 가 실행 되었습니다. !!!!!"); +// } catch (Throwable e) { +// System.out.println("모니터링 에이전트가 실행 되지 않았습니다.!!!! "); +// //e.printStackTrace(); +// } +// } +} diff --git a/src/main/java/com/eactive/eai/rms/client/context/RmsContext.java b/src/main/java/com/eactive/eai/rms/client/context/RmsContext.java new file mode 100644 index 0000000..ac566bb --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/context/RmsContext.java @@ -0,0 +1,79 @@ +package com.eactive.eai.rms.client.context; + +import org.springframework.beans.BeansException; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +/** + * The Class RmsContext. + *
    + *
  • 1. Function :스프링의 {@link org.springframework.context.support.ClassPathXmlApplicationContext}의 확장 클래스 입니다.
  • + *
  • 2. Summary :
  • + *
  • 3. Notification :
  • + *
+ * + * @see org.springframework.context.support.ClassPathXmlApplicationContext + * @author : $Author: 박기섭 $ + * @version : $Revision: 1.6 $ + */ +public class RmsContext extends ClassPathXmlApplicationContext { + + /** The Constant CONFIGLOCATIONS. */ + private static final String[] CONFIGLOCATIONS = { "com/eactive/eai/rms/client/context/applicationContext-agent.xml" }; + + /** + * The Constructor. + * + * @throws BeansException the beans exception + */ + private RmsContext() throws BeansException { + this(CONFIGLOCATIONS); + } + + /** + * Instantiates a new agent context. + * + * @param configlocations the configlocations + * + * @throws BeansException the beans exception + */ + private RmsContext(String[] configlocations) throws BeansException { + super(configlocations); + } + + /** The ctx. */ + private static RmsContext ctx = null; + + /** + * Gets the single instance of RmsContext. + * + * @return single instance of RmsContext + */ + public static RmsContext getInstance() { + if (ctx == null) { + synchronized (RmsContext.class) { + if (ctx == null) { + ctx = new RmsContext(); + } + } + } + return ctx; + } + + /** + * Gets the single instance of RmsContext. + * + * @param configlocations the configlocations + * + * @return single instance of RmsContext + */ + public static RmsContext getInstance(String[] configlocations) { + if (ctx == null) { + synchronized (RmsContext.class) { + if (ctx == null) { + ctx = new RmsContext(configlocations); + } + } + } + return ctx; + } +} diff --git a/src/main/java/com/eactive/eai/rms/client/context/RmsEnvProperties.java b/src/main/java/com/eactive/eai/rms/client/context/RmsEnvProperties.java new file mode 100644 index 0000000..9f9aff4 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/context/RmsEnvProperties.java @@ -0,0 +1,47 @@ +package com.eactive.eai.rms.client.context; + +import java.net.InetAddress; +import java.util.Properties; + +public class RmsEnvProperties { + + /** The properties. */ + private Properties properties; + + public void init() throws Exception { + InetAddress inetAddress = InetAddress.getLocalHost(); + String serverIp = inetAddress.getHostAddress(); + this.properties = new Properties(); + this.properties.setProperty(RmsProperties.LOCAL_HOST_IP, serverIp); + if (Boolean.getBoolean("rms.standalone")){ + this.properties.setProperty(RmsProperties.LOCAL_HOST_NAME, System.getProperty("rms.hostname")); + }else{ + this.properties.setProperty(RmsProperties.LOCAL_HOST_NAME, inetAddress.getHostName()); + } + this.properties.setProperty("standalone", String.valueOf(Boolean.getBoolean("rms.standalone"))); + this.properties.putAll(System.getProperties()); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getProperties() + */ + public Properties getProperties() { + return properties; + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#refresh() + */ + public void refresh() throws Exception { + init(); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#setProperties(java.util.Properties) + */ + public void setProperties(Properties properties) { + this.properties = properties; + } + + +} diff --git a/src/main/java/com/eactive/eai/rms/client/context/RmsProperties.java b/src/main/java/com/eactive/eai/rms/client/context/RmsProperties.java new file mode 100644 index 0000000..9838def --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/context/RmsProperties.java @@ -0,0 +1,173 @@ +package com.eactive.eai.rms.client.context; + +import java.util.Properties; + +import com.eactive.eai.common.server.Keys; +import com.eactive.eai.rms.client.dao.RmsPropertiesDAO; + +public interface RmsProperties { + + /** The Constant LOCAL_MBEAN_SERVER_ID. */ + public static final String LOCAL_MBEAN_SERVER_ID = "LOCAL_MBEAN_SERVER_ID"; + + /** The Constant LOCAL_MBEAN_SERVER_PASSWORD. */ + public static final String LOCAL_MBEAN_SERVER_PASSWORD = "LOCAL_MBEAN_SERVER_PASSWORD"; + + /** The Constant LOCAL_MBEAN_SERVER_PORT. */ + public static final String LOCAL_MBEAN_SERVER_PORT = "LOCAL_MBEAN_SERVER_PORT"; + + /** The Constant LOCAL_MBEAN_SERVER_PORT. */ + public static final String LOCAL_MBEAN_SERVER_IP = "LOCAL_MBEAN_SERVER_IP"; + + /** The Constant LOCAL_HOST_NAME. */ + public static final String LOCAL_HOST_NAME = "LOCAL_HOST_NAME"; + + /** The Constant LOCAL_HOST_IP. */ + public static final String LOCAL_HOST_IP = "LOCAL_HOST_IP"; + + /** The Constant SUBJECT_LOGIN. */ + public static final String SUBJECT_LOGIN = "SUBJECT_LOGIN"; + + /** The Constant JMS_DISK_SPACE_PATH. */ + public static final String JMS_DISK_SPACE_PATH = "JMS_DISK_SPACE_PATH"; + + /** The Constant RMS_SERVER_IP_KEY. RMS UDP SERVER의 접속 아이피 */ + public static final String RMS_SERVER_IP_KEY = "SERVER_IP"; + + /** The Constant RMS_SERVER_PORT_KEY. RMS UDP SERVER의 접속 포트 */ + public static final String RMS_SERVER_PORT_KEY = "SERVER_PORT"; + + /** The Constant EAI_SERVER_INSTANCE_NAME. */ + public static final String EAI_SERVER_INSTANCE_NAME = Keys.SERVER_KEY; + + /** The Constant DISK_SPACE_PATH. */ + public static final String DISK_SPACE_PATH = "DISK_SPACE_PATH"; + + /** The Constant SMS_AGENT_MAXLINE. */ + public static final String SMS_AGENT_MAXLINE = "SMS_AGENT_MAXLINE"; + + /** The Constant DEFAULT_LOG_PATH. */ + public static final String DEFAULT_LOG_PATH = "DEFAULT_LOG_PATH"; + + /** The Constant SMS_LOG_FILE. */ + public static final String SMS_LOG_FILE = "SMS_LOG_FILE"; + + public static final String SMS_LOG_FILE_ENCODE = "SMS_LOG_FILE_ENCODE"; + + /** The Constant ITSM_DISK_CMD. */ + public static final String ITSM_DISK_CMD = "ITSM_DISK_CMD"; + + /** The Constant ITSM_NET_CMD. */ + public static final String ITSM_NET_CMD = "ITSM_NET_CMD"; + + /** + * Inits the. + * + * @throws Exception the exception + */ + public abstract void init() throws Exception; + + /** + * Gets the properties. + * + * @return the properties + */ + public abstract Properties getProperties(); + + /** + * Refresh. + * + * @throws Exception the exception + */ + public abstract void refresh() throws Exception; + + /** + * Sets the properties. + * + * @param properties the new properties + */ + public abstract void setProperties(Properties properties); + + /** + * Sets the rts context dao. + * + * @param rmsPropertiesDAO the new rts context dao + */ + public abstract void setRmsPropertiesDao(RmsPropertiesDAO rmsPropertiesDAO); + + /** + * Gets the string property. + * + * @param propertyName the property name + * + * @return String + */ + public abstract String getStringProperty(String propertyName); + + /** + * Gets the string property. + * + * @param propertyName the property name + * @param defaultString the default string + * + * @return the string property + */ + public abstract String getStringProperty(String propertyName, String defaultString); + + /** + * Gets the int property. + * + * @param propertyName the property name + * + * @return int + */ + public abstract int getIntProperty(String propertyName); + + /** + * Gets the int property. + * + * @param propertyName the property name + * @param defaultInt the default int + * + * @return the int property + */ + public abstract int getIntProperty(String propertyName, int defaultInt); + + /** + * Gets the long property. + * + * @param propertyName the property name + * + * @return int + */ + public abstract long getLongProperty(String propertyName); + + /** + * Gets the long property. + * + * @param propertyName the property name + * @param defaultLong the default long + * + * @return the long property + */ + public abstract long getLongProperty(String propertyName, long defaultLong); + + /** + * Gets the boolean property. + * + * @param propertyName the property name + * + * @return boolean + */ + public abstract boolean getBooleanProperty(String propertyName); + + /** + * Gets the boolean property. + * + * @param propertyName the property name + * @param defaultBoolean the default boolean + * + * @return the boolean property + */ + public abstract boolean getBooleanProperty(String propertyName, boolean defaultBoolean); +} diff --git a/src/main/java/com/eactive/eai/rms/client/context/RmsPropertiesImpl.java b/src/main/java/com/eactive/eai/rms/client/context/RmsPropertiesImpl.java new file mode 100644 index 0000000..62a1085 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/context/RmsPropertiesImpl.java @@ -0,0 +1,225 @@ +package com.eactive.eai.rms.client.context; + +import java.net.InetAddress; +import java.util.Iterator; +import java.util.Properties; + +import com.eactive.eai.common.server.Keys; +import com.eactive.eai.rms.client.dao.RmsPropertiesDAO; +import com.eactive.eai.rms.client.util.ContainerUtil; + +/** + * The Class RmsPropertiesImpl. + *
    + *
  • 1. Function :모니터링시 필요한 정보를 로딩 한때 이 클래스를 사용 합니다.
  • + *
  • 2. Summary :Monitoring 프로퍼티 그룹과 Monitoring{IP} 형태의 프로퍼티 그룹의 모든 프로퍼티 + * 그리고 {@link System#getProperties()} 에 존재하는 모든 프로퍼티를 로딩 합니다.
  • + *
  • 3. Notification :
  • + *
+ * + * @see com.eactive.eai.rms.client.dao.RmsPropertiesDAO#getProperties(String) + * @author : $Author: 윤창용 $ + * @version : $Revision: 1.10 $ + */ +public class RmsPropertiesImpl implements RmsProperties { + + /** F/W logger. */ + private static com.eactive.eai.common.util.Logger logger = com.eactive.eai.common.util.Logger.getLogger(com.eactive.eai.common.util.Logger.LOGGER_CLIENT); + + + /** The rms properties dao. */ + private RmsPropertiesDAO rmsPropertiesDAO; + + /** The properties. */ + private Properties properties; + + /** The server ip. */ + private String serverIp; + + /* + * (non-Javadoc) + * + * @see com.eactive.eai.rms.client.context.Test#init() + */ + public void init() throws Exception { + InetAddress inetAddress = InetAddress.getLocalHost(); + serverIp = inetAddress.getHostAddress(); + this.properties = rmsPropertiesDAO.getProperties(); + this.properties.setProperty(LOCAL_HOST_IP, serverIp); + if (Boolean.getBoolean("rms.standalone")){ + this.properties.setProperty(LOCAL_HOST_NAME, System.getProperty("rms.hostname")); + }else{ + this.properties.setProperty(LOCAL_HOST_NAME, inetAddress.getHostName()); + } + this.properties.setProperty("standalone", String.valueOf(Boolean.getBoolean("rms.standalone"))); + this.properties.putAll(System.getProperties()); + this.setLocalMbeanPort(this.properties, System.getProperty(Keys.SERVER_KEY)); + + if (logger.isInfoEnabled()) { + printProperties(); + } + } + + private void setLocalMbeanPort(Properties props, String eaiInstName) { + if (props.getProperty(LOCAL_MBEAN_SERVER_PORT) == null) { + + String port = rmsPropertiesDAO.getLocalMBeanServerPort(); + props.setProperty(LOCAL_MBEAN_SERVER_PORT, port); + } + } + + /** + * Adds the agent infomation for print. + * + * @param sb the sb + * @param text the text + */ + private void addAgentInfomationForPrint(StringBuilder sb, String text) { + sb.append("# ").append(text).append("\n"); + } + + /** + * Adds the agent infomation for print. + * + * @param sb the sb + * @param id the id + * @param value the value + */ + private void addAgentInfomationForPrint(StringBuilder sb, String id, + String value) { + sb.append("# ").append(id).append("\t: ").append(value).append("\n"); + } + + /** + * Adds the line for print. + * + * @param sb the sb + */ + private void addLineForPrint(StringBuilder sb) { + sb.append("###################################").append( + "############################################").append("\n"); + } + + /** + * Prints the system properties. + */ + @SuppressWarnings("unchecked") + private void printProperties() { + + String javaVersion = System.getProperty("java.version"); + String javaVender = System.getProperty("java.vendor"); + String was = ContainerUtil.getString(); + + if (logger.isInfoEnabled()) { + StringBuilder sb = new StringBuilder(1024); + addLineForPrint(sb.append("\n")); + addAgentInfomationForPrint(sb, "MONITORING AGENT_INFOMATION"); + addAgentInfomationForPrint(sb, "VERSION", ""); + addAgentInfomationForPrint(sb, "WAS", was); + addAgentInfomationForPrint(sb, "JDK VENDER", javaVender); + addAgentInfomationForPrint(sb, "JDK VERSION", javaVersion); + addAgentInfomationForPrint(sb, "SERVER IP", serverIp); + addLineForPrint(sb); + logger.info(sb.toString()); + } + + for (Iterator it = properties.keySet().iterator(); it.hasNext();) { + String key = (String) it.next(); + logger.info(key + "=" + properties.getProperty(key)); + } + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getProperties() + */ + public Properties getProperties() { + return properties; + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#refresh() + */ + public void refresh() throws Exception { + init(); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#setProperties(java.util.Properties) + */ + public void setProperties(Properties properties) { + this.properties = properties; + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#setRmsPropertiesDao(com.eactive.eai.rms.client.dao.RmsPropertiesDAO) + */ + public void setRmsPropertiesDao(RmsPropertiesDAO rmsPropertiesDAO) { + this.rmsPropertiesDAO = rmsPropertiesDAO; + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getStringProperty(java.lang.String) + */ + public String getStringProperty(String propertyName) { + return properties.getProperty(propertyName); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getStringProperty(java.lang.String, java.lang.String) + */ + public String getStringProperty(String propertyName, String defaultString) { + String value = getStringProperty(propertyName); + return value != null ? value : defaultString; + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getIntProperty(java.lang.String) + */ + public int getIntProperty(String propertyName) { + String prop = properties.getProperty(propertyName); + return prop == null ? 0 : new Integer(prop.trim()).intValue(); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getIntProperty(java.lang.String, int) + */ + public int getIntProperty(String propertyName, int defaultInt) { + String prop = properties.getProperty(propertyName); + return prop == null ? defaultInt : new Integer(prop.trim()).intValue(); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getLongProperty(java.lang.String) + */ + public long getLongProperty(String propertyName) { + String prop = properties.getProperty(propertyName); + return prop == null ? 0 : new Long(prop.trim()).longValue(); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getLongProperty(java.lang.String, long) + */ + public long getLongProperty(String propertyName, long defaultLong) { + String prop = properties.getProperty(propertyName); + return prop == null ? defaultLong : new Long(prop.trim()).longValue(); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getBooleanProperty(java.lang.String) + */ + public boolean getBooleanProperty(String propertyName) { + String prop = properties.getProperty(propertyName); + return prop == null ? false : new Boolean(prop.trim()).booleanValue(); + } + + /* (non-Javadoc) + * @see com.eactive.eai.rms.client.context.RmsProperties#getBooleanProperty(java.lang.String, boolean) + */ + public boolean getBooleanProperty(String propertyName, + boolean defaultBoolean) { + String prop = properties.getProperty(propertyName); + return prop == null ? defaultBoolean : new Boolean(prop.trim()) + .booleanValue(); + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/context/StandAlone.java b/src/main/java/com/eactive/eai/rms/client/context/StandAlone.java new file mode 100644 index 0000000..4b40a49 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/context/StandAlone.java @@ -0,0 +1,17 @@ +package com.eactive.eai.rms.client.context; + +public class StandAlone { + + private static final String config = "com/eactive/eai/rms/client/context/applicationContext-agent-standalone.xml"; + + public static void main(String[] args) throws Exception { + System.setProperty("inst.Name","EAIDSG_i11"); + System.setProperty("eai.tableowner","INST2"); + System.setProperty("rms.standalone","true"); + System.setProperty("rms.hostname","ieadad01"); + + RmsContext.getInstance(new String[] { config }); +// System.out.println("RMS CLIENT START !!!"); + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/dao/AgentAdapterDAO.java b/src/main/java/com/eactive/eai/rms/client/dao/AgentAdapterDAO.java new file mode 100644 index 0000000..578dd39 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/dao/AgentAdapterDAO.java @@ -0,0 +1,114 @@ +package com.eactive.eai.rms.client.dao; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.springframework.jdbc.core.support.JdbcDaoSupport; + +import com.eactive.eai.common.dao.Keys; +import com.eactive.eai.rms.client.context.RmsProperties; + +/** + *
+ * 1. 기능 : 모니터링 관리 화면의 프로퍼티 관리 화면에서 입력한 내용들을 로딩 합니다. 
+ * 2. 처리 개요 : RMS_PROPS 프로퍼티 그룹과 RMS_PROPS{INSTANCE_NAME} 형태의 프로퍼티 그룹의 모든 프로퍼티를 로딩 합니다. 
+ *     -
+ * 3. 주의사항 : 
+ * 
+ * @author : + * @version : $Revision: 1.10 $ + * @since : rts 1.0 + */ +public class AgentAdapterDAO extends JdbcDaoSupport { + + /** F/W logger. */ + private static com.eactive.eai.common.util.Logger logger = com.eactive.eai.common.util.Logger.getLogger(com.eactive.eai.common.util.Logger.LOGGER_CLIENT); + + + private String tableOwner = null; + private boolean standalone = false; + private String instanceName = null; + + public AgentAdapterDAO() { + tableOwner = System.getProperty("eai.tableowner"); + standalone = Boolean.getBoolean("rms.standalone"); + + if (standalone) { + try { + instanceName = InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + //e.printStackTrace(); + } + } else { + instanceName = System + .getProperty(RmsProperties.EAI_SERVER_INSTANCE_NAME); + } + + if (logger.isDebugEnabled()) { + logger.debug("CURRENT RMS INSTANCE NAME : " + instanceName); + } + } + + public HashMap getMonitorUseNoAdapterList() throws Exception { + HashMap monitorDisableMap = new HashMap(); + + StringBuffer query = new StringBuffer(); + + query.append(" select AdptrBzwkGroupName, MoniUseYn \n"); + query.append(" from "+ tableOwner + ".TSEAIAD01 \n"); + query.append(" where MoniUseYn = 'N' \n"); + + try { + List adapterList = this.getJdbcTemplate().queryForList(query.toString()); + + if (adapterList != null) { + for (Iterator it = adapterList.iterator(); it.hasNext();) { + Map tmp = (Map) it.next(); + String name = (String) tmp.get("AdptrBzwkGroupName"); + String val = (String) tmp.get("MoniUseYn"); + monitorDisableMap.put(name,val); + } + } + return monitorDisableMap; + } + catch(Exception e) { + logger.error(e.toString(),e); + //e.printStackTrace(); + throw e; + } + } + public HashMap getMonitorTimeConditionAdapterList() throws Exception { + HashMap monitorDisableMap = new HashMap(); + + StringBuffer query = new StringBuffer(); + + query.append(" select AdptrBzwkGroupName, MoniCndnCtnt \n"); + query.append(" from "+ tableOwner + ".TSEAIAD01 \n"); + query.append(" where MoniUseYn = 'Y' and MoniCndnCtnt != '' and MoniCndnCtnt != 'N,EVERY,0000,2359'\n"); + + try { + List adapterList = this.getJdbcTemplate().queryForList(query.toString()); + + if (adapterList != null) { + for (Iterator it = adapterList.iterator(); it.hasNext();) { + Map tmp = (Map) it.next(); + String name = (String) tmp.get("AdptrBzwkGroupName"); + String val = (String) tmp.get("MoniUseYn"); + monitorDisableMap.put(name,val); + } + } + return monitorDisableMap; + } + catch(Exception e) { + logger.error(e.toString(),e); + //e.printStackTrace(); + throw e; + } + } + + +} diff --git a/src/main/java/com/eactive/eai/rms/client/dao/RmsPropertiesDAO.java b/src/main/java/com/eactive/eai/rms/client/dao/RmsPropertiesDAO.java new file mode 100644 index 0000000..0780cf5 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/dao/RmsPropertiesDAO.java @@ -0,0 +1,22 @@ +package com.eactive.eai.rms.client.dao; + +import java.util.Properties; + +/** + * The Interface RmsPropertiesDAO. + *
    + *
  • 1. Function :모니터링 관리 화면의 프로퍼티 관리 화면에서 입력한 내용들을 로딩 합니다.
  • + *
  • 2. Summary :Monitoring 프로퍼티 그룹과 Monitoring{IP} 형태의 프로퍼티 그룹의 모든 프로퍼티를 로딩 합니다.
  • + *
  • 3. Notification :
  • + *
+ * + * @author : $Author: 박기섭 $ + * @version : $Revision: 1.4 $ + */ +public interface RmsPropertiesDAO { + + public Properties getProperties(); + + public String getLocalMBeanServerPort(); + +} diff --git a/src/main/java/com/eactive/eai/rms/client/dao/RmsPropertiesDAOImpl.java b/src/main/java/com/eactive/eai/rms/client/dao/RmsPropertiesDAOImpl.java new file mode 100644 index 0000000..1303882 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/dao/RmsPropertiesDAOImpl.java @@ -0,0 +1,115 @@ +package com.eactive.eai.rms.client.dao; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.support.JdbcDaoSupport; + +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.client.util.QueryBuffer; + +/** + *
+ * 1. 기능 : 모니터링 관리 화면의 프로퍼티 관리 화면에서 입력한 내용들을 로딩 합니다. 
+ * 2. 처리 개요 : RMS_PROPS 프로퍼티 그룹과 RMS_PROPS{INSTANCE_NAME} 형태의 프로퍼티 그룹의 모든 프로퍼티를 로딩 합니다. 
+ *     -
+ * 3. 주의사항 : 
+ * 
+ * @author : 박기섭 + * @version : $Revision: 1.10 $ + * @since : rts 1.0 + */ +public class RmsPropertiesDAOImpl extends JdbcDaoSupport implements + RmsPropertiesDAO { + + /** F/W logger. */ + private static com.eactive.eai.common.util.Logger logger = com.eactive.eai.common.util.Logger.getLogger(com.eactive.eai.common.util.Logger.LOGGER_CLIENT); + + + private String tableOwner = null; + private boolean standalone = false; + private String instanceName = null; + + public RmsPropertiesDAOImpl() { + tableOwner = System.getProperty("eai.tableowner"); + standalone = Boolean.getBoolean("rms.standalone"); + + if (standalone) { + try { + instanceName = InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + //e.printStackTrace(); + } + } else { + instanceName = System + .getProperty(RmsProperties.EAI_SERVER_INSTANCE_NAME); + } + + if (logger.isDebugEnabled()) { + logger.debug("CURRENT RMS INSTANCE NAME : " + instanceName); + } + } + + @SuppressWarnings("unchecked") + public Properties getProperties() { + final Properties properties = new Properties(); + QueryBuffer query = new QueryBuffer(); + + try { + query.append(" SELECT Prpty2Val "); + query.append(" , PrptyName "); + query.append(" FROM " + tableOwner + ".TSEAICM03 "); + query.append(" WHERE PrptyGroupName='RMS_PROPS' "); + + List commonPropertiesList = this.getJdbcTemplate().queryForList( + query.toString()); + + if (commonPropertiesList != null) { + for (Iterator it = commonPropertiesList.iterator(); it + .hasNext();) { + Map tmp = (Map) it.next(); + String name = (String) tmp.get("PrptyName"); + String val = (String) tmp.get("Prpty2Val"); + properties.setProperty(name, val); + } + } + + query.delete(0, query.length()); + + query.append(" SELECT PrptyName "); + query.append(" , Prpty2Val "); + query.append(" FROM " + tableOwner + ".TSEAICM03 "); + query.append(" WHERE PrptyGroupName='RMS_PROPS{"+ instanceName + "}'"); + + List propertiesList = this.getJdbcTemplate().queryForList( + query.toString()); + + if (propertiesList != null) { + for (Iterator it = propertiesList.iterator(); it.hasNext();) { + Map tmp = (Map) it.next(); + String name = (String) tmp.get("PrptyName"); + String val = (String) tmp.get("Prpty2Val"); + properties.setProperty(name, val); + } + } + } catch (DataAccessException e) { + logger.error(e.toString()); + } + return properties; + } + + public String getLocalMBeanServerPort() { + QueryBuffer buffer = new QueryBuffer(); + buffer.append(" SELECT SevrLsnPortName "); + buffer.append(" FROM " + tableOwner + ".TSEAISY02 "); + buffer.append(" WHERE EAISevrInstncName = ? "); + + return (String) this.getJdbcTemplate().queryForObject( + buffer.toString(), new Object[] { instanceName }, String.class); + } +} diff --git a/src/main/java/com/eactive/eai/rms/client/handler/IMessageHandler.java b/src/main/java/com/eactive/eai/rms/client/handler/IMessageHandler.java new file mode 100644 index 0000000..d1290c5 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/handler/IMessageHandler.java @@ -0,0 +1,32 @@ +package com.eactive.eai.rms.client.handler; + +import org.apache.mina.handler.demux.MessageHandler; + +/** + *
    + *
  • 1. Function : IMessageHandler는 socket으로 부터 수신 받은 + * 객체에 대한 Handler의 인터페이스 입니다.
  • + *
  • 2. Summary :a) 객체가 수신 되었을 때 인터페이스를 구현한 객체가 처리할 + * {@link IMessageHandler#targetClass()}를 구현 한다.
    + * b) /WEB-INF/applicationContext-udp.xml 의 "protocolHandler" ({@link UdpServerSessionHandler}}) + * 에 등록 한다.
    + * c) 객체를 처리 할 로직이 들어가는 {@link MessageHandler#messageReceived(org.apache.mina.common.IoSession, Object)} + * 메서드를 을 구현 한다. + *
  • + *
  • 3. Notification :
  • + *
+ * + * @author $Author: 박기섭 $ + * @version $Revision: 1.4 $ + */ +public interface IMessageHandler extends + MessageHandler { + + /** + * 처리 대상이 되는 클래스를 리턴. + * + * @return Class + */ + public Class targetClass(); + +} diff --git a/src/main/java/com/eactive/eai/rms/client/handler/LogConfigurationCommandHandler.java b/src/main/java/com/eactive/eai/rms/client/handler/LogConfigurationCommandHandler.java new file mode 100644 index 0000000..6ba55e7 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/handler/LogConfigurationCommandHandler.java @@ -0,0 +1,54 @@ +package com.eactive.eai.rms.client.handler;//package com.eactive.eai.rms.client.handler; +// +//import com.eactive.eai.rms.onl.vo.LogConfigurationCommand; +// +//import kr.co.kpl.org.apache.log4j.Logger; +//import org.apache.mina.common.IoSession; +// +//public class LogConfigurationCommandHandler implements IMessageHandler { +// +// private static final Logger logger = Logger.getLogger(LogConfigurationCommandHandler.class); +// +// public Class targetClass() { +// return LogConfigurationCommand.class; +// } +// +// public void messageReceived(IoSession session, Object message) +// throws Exception { +// +// LogConfigurationCommand command = (LogConfigurationCommand) message; +// +// LogConfigurer configurer = new LogConfigurer(); +// +// try { +// switch (command.getCommand()) { +// case LogConfigurationCommand.VIEW_COMMAND: +// command.setCategoryMap(configurer.view()); +// break; +// case LogConfigurationCommand.EDIT_COMMAND: +// configurer.edit(command.getLogCategorys(), +// command.getLogCategoryLevels(), +// command.getLogDetailCategorys(), +// command.getLogDetailCategoryLevels(), +// command.getForeceLevel(), command.getForceDetailLevel()); +// break; +// case LogConfigurationCommand.DETAIL_COMMAND: +// command.setCategoryMap(configurer.detail(command.getLogCategory())); +// break; +// case LogConfigurationCommand.NEW_LOGGER_COMMAND: +// configurer.newLogger(command.getLogCategory()); +// break; +// case 0: +// break; +// } +// +// command.setCommand(LogConfigurationCommand.PROCESS_OK_COMMAND); +// } catch (Exception e) { +// logger.error(this, e); +// } +// +// session.write(command); +// +// } +// +//} diff --git a/src/main/java/com/eactive/eai/rms/client/handler/LogConfigurer.java b/src/main/java/com/eactive/eai/rms/client/handler/LogConfigurer.java new file mode 100644 index 0000000..b6d2666 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/handler/LogConfigurer.java @@ -0,0 +1,130 @@ +package com.eactive.eai.rms.client.handler;//package com.eactive.eai.rms.client.handler; +// +//import java.util.Enumeration; +//import java.util.Map; +//import java.util.SortedMap; +//import java.util.TreeMap; +// +//import kr.co.kpl.org.apache.log4j.Category; +//import kr.co.kpl.org.apache.log4j.Level; +//import kr.co.kpl.org.apache.log4j.Logger; +// +//public class LogConfigurer { +// +// @SuppressWarnings("unchecked") +// public Map view() { +// Enumeration e = Logger.getRootLogger() +// .getLoggerRepository() +// .getCurrentLoggers(); +// +// SortedMap categorys = new TreeMap(); +// +// for (; e.hasMoreElements();) { +// Logger x = (Logger) e.nextElement(); +// Category parent = x.getParent(); +// String parentName = parent.getName(); +// Level parentLevel = parent.getLevel(); +// +// if (parentLevel == null) { +// parentLevel = Level.ERROR; +// } +// +// categorys.put(parentName, parentLevel.toInt()); +// } +// return categorys; +// } +// +// public void edit(String[] category, String[] categoryLevel, +// String[] detailCategory, String[] detailCategoryLevel, +// String foreceLevel, String forceDetailLevel) { +// +// if (category != null) { +// for (int i = 0; i < category.length; i++) { +// parentUpdate(category[i], categoryLevel[i], foreceLevel); +// } +// } +// +// if (detailCategory != null) { +// for (int i = 0; i < detailCategory.length; i++) { +// categoryUpdate(detailCategory[i], detailCategoryLevel[i], +// forceDetailLevel); +// } +// } +// +// } +// +// @SuppressWarnings("unchecked") +// private void parentUpdate(String category, String level, String foreceLevel) { +// +// if (foreceLevel != null && !foreceLevel.trim().equals("")) { +// level = foreceLevel; +// } +// +// Enumeration e = Logger.getRootLogger() +// .getLoggerRepository() +// .getCurrentLoggers(); +// +// for (; e.hasMoreElements();) { +// Logger logger = (Logger) e.nextElement(); +// Category parent = logger.getParent(); +// if (parent.getName() != null && parent.getName().equals(category)) { +// parent.setLevel(Level.toLevel(level)); +// } +// } +// } +// +// @SuppressWarnings("unchecked") +// private void categoryUpdate(String category, String level, String forceLevel) { +// +// if (forceLevel != null && !forceLevel.trim().equals("")) { +// level = forceLevel; +// } +// +// Enumeration e = Logger.getRootLogger() +// .getLoggerRepository() +// .getCurrentLoggers(); +// +// for (; e.hasMoreElements();) { +// Logger logger = (Logger) e.nextElement(); +// String p = logger.getName(); +// if (p != null && p.equals(category)) { +// logger.setLevel(Level.toLevel(level)); +// } +// } +// } +// +// @SuppressWarnings("unchecked") +// public Map detail(String parent) { +// +// if (parent == null) { +// return new TreeMap(); +// } +// +// Enumeration e = Logger.getRootLogger() +// .getLoggerRepository() +// .getCurrentLoggers(); +// +// SortedMap details = new TreeMap(); +// for (; e.hasMoreElements();) { +// Logger logger = (Logger) e.nextElement(); +// String loggerName = logger.getName(); +// +// if (loggerName != null && loggerName.startsWith(parent) +// && !loggerName.equals(parent)) { +// if (logger.getEffectiveLevel() != null) { +// details.put(loggerName, new Integer( +// logger.getEffectiveLevel().toInt())); +// } +// } +// } +// return details; +// } +// +// public void newLogger(String newLogger) { +// Logger logger = Logger.getLogger(newLogger); +// Logger.getLogger(newLogger + ".createdlogger"); +// logger.setLevel(Level.ERROR); +// logger.debug("ignored"); +// } +// +//} diff --git a/src/main/java/com/eactive/eai/rms/client/handler/RefreshCommandHandler.java b/src/main/java/com/eactive/eai/rms/client/handler/RefreshCommandHandler.java new file mode 100644 index 0000000..4631d73 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/handler/RefreshCommandHandler.java @@ -0,0 +1,31 @@ +package com.eactive.eai.rms.client.handler;//package com.eactive.eai.rms.client.handler; +// +//import org.apache.mina.common.IoSession; +// +//import org.springframework.context.ApplicationContext; +//import org.springframework.context.ApplicationContextAware; +//import org.springframework.context.support.ClassPathXmlApplicationContext; +// +//import com.eactive.eai.rms.onl.vo.RefreshCommand; +// +//public class RefreshCommandHandler implements IMessageHandler, +// ApplicationContextAware { +// +// private ApplicationContext applicationContext; +// +// public void setApplicationContext(ApplicationContext applicationContext) { +// this.applicationContext = applicationContext; +// } +// +// public Class targetClass() { +// return RefreshCommand.class; +// } +// +// public void messageReceived(IoSession session, Object message) +// throws Exception { +// +// ClassPathXmlApplicationContext applicationContext = (ClassPathXmlApplicationContext) this.applicationContext; +// applicationContext.refresh(); +// +// } +//} diff --git a/src/main/java/com/eactive/eai/rms/client/service/EaiEngineStatusService.java b/src/main/java/com/eactive/eai/rms/client/service/EaiEngineStatusService.java new file mode 100644 index 0000000..b42c4c1 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/service/EaiEngineStatusService.java @@ -0,0 +1,127 @@ +package com.eactive.eai.rms.client.service; + +import java.util.Properties; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +import com.eactive.eai.common.util.ContainerUtil; +import com.eactive.eai.rms.client.context.RmsProperties; +import com.eactive.eai.rms.onl.vo.EAIEngineStatusVo; + +/** + *
+ * 1. 기능 : EAI Engine의 상태를 조회 합니다. 
+ * 2. 처리 개요 :
+ * -
+ * 3. 주의사항 :
+ * 
+ * + * @author : 박기섭 + * @version : $Revision: 1.9 $ + * @since : rts 1.0 + */ +public class EaiEngineStatusService implements ApplicationContextAware { + + /** F/W logger. */ + private static com.eactive.eai.common.util.Logger logger = com.eactive.eai.common.util.Logger.getLogger(com.eactive.eai.common.util.Logger.LOGGER_CLIENT); + + + /** The application context. */ + private ApplicationContext applicationContext; + + private RmsProperties rmsProperties; + + private Properties adminClientProperties; + + public void setAdminClientProperties(Properties adminClientProperties) { + this.adminClientProperties = adminClientProperties; + } + + public void setProperties(RmsProperties rmsProperties) { + this.rmsProperties = rmsProperties; + } + + /** + * Instantiates a new eai engine status service. + */ + public EaiEngineStatusService() { + super(); + } + + /** + * Gets the eAI engine status. + * + * @return the eAI engine status + * + * @throws Exception the exception + */ + public EAIEngineStatusVo getEAIEngineStatus() throws Exception { + + EAIEngineStatusVo eaiEngineStatusVo = (EAIEngineStatusVo) applicationContext.getBean("eaiEngineStatusVo"); + try { + setServerStatus(eaiEngineStatusVo); + this.setJVMRuntimeStatus(eaiEngineStatusVo); + + } catch (Exception e) { + logger.warn(e.getMessage(), e); + } + return eaiEngineStatusVo; + } + + /** + * Sets the server status. + * + * @param status the status + * @param serverMBean the server m bean + * @param serverName the server name + */ + private void setServerStatus(EAIEngineStatusVo status) { + + String instName = rmsProperties.getStringProperty(RmsProperties.EAI_SERVER_INSTANCE_NAME); + status.setServerName(instName); + + int state = 0; + try { + JMXMonitoring monitoring = JMXMonitoringFactory.createServerMonitoring(ContainerUtil.get()); + //JMX가 없을경우 무조건 정상 + if (monitoring == null) { + status.setServerState(Integer.toString(2)); + return; + } + monitoring.init(this.adminClientProperties); + state = (int)monitoring.getState(instName); + status.setServerState(Integer.toString(state)); + } catch (Exception e) { + status.setServerState(Integer.toString(state)); + } + + } + + /** + * Sets the jvm runtime status. + * + * @param status the status + * @param serverRuntimeMBean the server runtime m bean + */ + private void setJVMRuntimeStatus(EAIEngineStatusVo status) { + Runtime runtime = Runtime.getRuntime(); + + status.setHeapFreeCurrent(runtime.freeMemory()); + status.setHeapSizeCurrent(runtime.totalMemory()); + status.setHeapSizeMax(runtime.maxMemory()); + + long precent = (((status.getHeapSizeMax() - status.getHeapSizeCurrent()) + status.getHeapFreeCurrent()) * 100) + / status.getHeapSizeMax(); + + status.setHeapFreePercent(new Long(precent).intValue()); + } + + /* (non-Javadoc) + * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext) + */ + public void setApplicationContext(ApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/service/HostStatusService.java b/src/main/java/com/eactive/eai/rms/client/service/HostStatusService.java new file mode 100644 index 0000000..f4fab88 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/service/HostStatusService.java @@ -0,0 +1,217 @@ +package com.eactive.eai.rms.client.service; + +import org.springframework.beans.factory.InitializingBean; + +import com.eactive.eai.rms.client.util.CommandParser; +import com.eactive.eai.rms.client.util.CommandUtils; +import com.eactive.eai.rms.client.util.WindowsSystemMon; + +/** + * The Class HostStatusService. + *
    + *
  • 1. Function :
  • + *
  • 2. Summary :
  • + *
  • 3. Notification :
  • + *
+ * + *
 
+ * 
+ * + * + * + * @author : $Author: 박기섭 $ + * @version : $Revision: 1.7 $ + */ +public class HostStatusService implements InitializingBean { + + /** F/W logger. */ + private static com.eactive.eai.common.util.Logger logger = com.eactive.eai.common.util.Logger.getLogger(com.eactive.eai.common.util.Logger.LOGGER_CLIENT); + + static final boolean IS_WINDOWS = System.getProperty("os.name").toLowerCase().startsWith("windows") ? true : false; + + private int TOTAL_MEMORY = 0; + + /** + * Gets the cpu percentage. + * + * @return the cpu percentage + */ + public int getCpuPercentage() { + + int result = 0; + try { + if (IS_WINDOWS){ + return WindowsSystemMon.getCpuPercentage(); + } + + String[] command = { "/bin/sh", "-c", "vmstat 1 2 | awk 'BEGIN{n=0;}{if(++n==4) { printf((100-$15));}}'" }; + + CommandParser parser = new CommandParser() { + public Object parse(String string) { + int result = 0; + try { + result = Integer.parseInt(string.trim()); + } catch (Exception e) { + } + return result; + } + }; + + result = (Integer) CommandUtils.processExec(command, parser); + } catch (Exception e) { + logger.warn(e.getMessage()); + } + + return result; + } + + /** + * Gets the disk percentage. + * + * @param path the path + * + * @return the disk percentage + */ + public int getDiskPercentage(String path) { + int result = 0; + try { + if (IS_WINDOWS){ + return WindowsSystemMon.getDiskPercentage(); + } + + String command[] = new String[] { + "/bin/sh", + "-c", + "df -k " + path + " | awk 'BEGIN{n=0;}{if(++n==2) { printf($5);}}'" }; + + CommandParser parser = new CommandParser() { + + public Object parse(String string) { + int result = 0; + int psercentIndex = 0; + try { + psercentIndex = string.indexOf("%"); + result = Integer.parseInt(string.substring(0, psercentIndex)); + } catch (Exception e) { + } + return result; + } + }; + + result = (Integer) CommandUtils.processExec(command, parser); + } catch (Exception e) { + logger.warn(e.getMessage()); + } + return result; + } + + /** + * Gets the memory percentage. + * + * @return the memory percentage + */ + public int getMemoryPercentage() { + int result = 0; + + try { + if (IS_WINDOWS){ + return WindowsSystemMon.getMemoryPercentage(); + } + + String[] command = { "/bin/sh", "-c", "cat /proc/meminfo | egrep 'MemFree:|SwapFree' | awk 'BEGIN{t=0;}{t+=$2;}END {print t;}'" }; + + CommandParser parser = new CommandParser() { + public Object parse(String string) { + int result = 0; + try { + result = Integer.parseInt(string.trim()) / 1024; + } catch (Exception e) { + } + return result; + } + }; + + int freeMB = (Integer) CommandUtils.processExec(command, parser); + result = (TOTAL_MEMORY - freeMB) * 100 / TOTAL_MEMORY; + } catch (Exception e) { + logger.warn(e.getMessage()); + } + + if (logger.isDebugEnabled()) { + logger.debug("getMemoryPercentage RESULT : " + result); + } + + return result; + } + + /** + * 시스템의 전체 메모리 값을 구한다. + * + * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() + */ + public void afterPropertiesSet() throws Exception { + if (IS_WINDOWS){ + return ; + } + try { + /* + * 시스템의 전체 메모리 값을 구한다. + */ + /** + [elink@dmccap01 ~]$ cat /proc/meminfo | grep MemTotal + MemTotal: 28597244 kB + */ + String[] commandRealMemory = { "/bin/sh", "-c", "cat /proc/meminfo | grep MemTotal | awk '{printf($2)}'" }; + + + CommandParser realParser = new CommandParser() { + public Object parse(String string) { + int realMemoryMB = 0; + try { + realMemoryMB = Integer.parseInt(string) / 1024; + } catch (Exception e) { + logger.warn(this, e); + } + return realMemoryMB; + } + }; + + String[] commandPage = { "/bin/sh", "-c", "cat /proc/meminfo | grep SwapTotal | awk '{printf($2)}' " }; + CommandParser pageParser = new CommandParser() { + + public Object parse(String string) { + int pageMB = 0; + try { + pageMB = Integer.parseInt(string) / 1024; + } catch (Exception e) { + logger.warn(this, e); + } + return pageMB; + } + }; + + Integer realMemoryMB = (Integer) CommandUtils.processExec( + commandRealMemory, realParser); + + Integer pageMB = (Integer) CommandUtils.processExec(commandPage, + pageParser); + + this.TOTAL_MEMORY = realMemoryMB + pageMB; + + if (logger.isDebugEnabled()) { + logger.debug("TOTAL MEMORY : " + TOTAL_MEMORY); + } + } catch (Exception e) { + logger.warn(e.getMessage()); + } + } + + public static void main(String[] args) throws Exception { + HostStatusService service = new HostStatusService(); + service.afterPropertiesSet(); + System.out.println("CPU : " + service.getCpuPercentage()); + System.out.println("MEMORY : " + service.getMemoryPercentage()); + System.out.println("DISK(/log) : " + service.getDiskPercentage("/log")); + + } +} diff --git a/src/main/java/com/eactive/eai/rms/client/service/JMXMonitoring.java b/src/main/java/com/eactive/eai/rms/client/service/JMXMonitoring.java new file mode 100644 index 0000000..5030347 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/service/JMXMonitoring.java @@ -0,0 +1,9 @@ +package com.eactive.eai.rms.client.service; + +import java.util.Properties; + +public interface JMXMonitoring +{ + public void init (Properties properties) throws Exception; + public Object getState(String instance) throws Exception; +} diff --git a/src/main/java/com/eactive/eai/rms/client/service/JMXMonitoringFactory.java b/src/main/java/com/eactive/eai/rms/client/service/JMXMonitoringFactory.java new file mode 100644 index 0000000..fb1acbf --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/service/JMXMonitoringFactory.java @@ -0,0 +1,35 @@ +package com.eactive.eai.rms.client.service; + +import com.eactive.eai.common.util.ContainerUtil; +import com.eactive.eai.env.ElinkConfig; +import com.eactive.eai.rms.client.service.activemq.SingleQueueMonitoringForActiveMq; +import com.eactive.eai.rms.client.service.weblogic.SingleQueueMonitoringForWebLogic; +import com.eactive.eai.rms.client.service.weblogic.SingleServerMonitoringForWebLogic; +import com.eactive.eai.rms.client.service.websphere.SingleQueueMonitoringForWebSphere; +import com.eactive.eai.rms.client.service.websphere.SingleServerMonitoringForWebSphere; + +public class JMXMonitoringFactory +{ + private JMXMonitoringFactory() { + } + + public static JMXMonitoring createServerMonitoring(int type) throws Exception { + if (ContainerUtil.WEBLOGIC == type ){ + return SingleServerMonitoringForWebLogic.getInstance(); + }else if (ContainerUtil.WEBSPHERE == type ){ + return SingleServerMonitoringForWebSphere.getInstance(); + } + return null; + } + public static JMXMonitoring createQueueMonitoring(int type) throws Exception { + if(ElinkConfig.isUseInternalQueue()) { + return SingleQueueMonitoringForActiveMq.getInstance(); + } + if (ContainerUtil.WEBLOGIC == type ){ + return SingleQueueMonitoringForWebLogic.getInstance(); + }else if (ContainerUtil.WEBSPHERE == type ){ + return SingleQueueMonitoringForWebSphere.getInstance(); + } + return null; + } +} diff --git a/src/main/java/com/eactive/eai/rms/client/service/activemq/SingleQueueMonitoringForActiveMq.java b/src/main/java/com/eactive/eai/rms/client/service/activemq/SingleQueueMonitoringForActiveMq.java new file mode 100644 index 0000000..c950817 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/service/activemq/SingleQueueMonitoringForActiveMq.java @@ -0,0 +1,82 @@ +package com.eactive.eai.rms.client.service.activemq; + +import java.util.LinkedHashMap; +import java.util.Properties; + +import javax.management.ObjectName; + +import org.apache.activemq.broker.BrokerService; +import org.apache.activemq.broker.jmx.BrokerViewMBean; +import org.apache.activemq.broker.jmx.QueueViewMBean; + +import com.eactive.eai.rms.client.service.JMXMonitoring; + +public class SingleQueueMonitoringForActiveMq implements JMXMonitoring { + + private static SingleQueueMonitoringForActiveMq monitoring; + + public static SingleQueueMonitoringForActiveMq getInstance() { + if (monitoring == null) { + synchronized (SingleQueueMonitoringForActiveMq.class) { + if (monitoring == null) { + monitoring = new SingleQueueMonitoringForActiveMq(); + } + } + } + return monitoring; + } + + @Override + public void init(Properties properties) throws Exception { + + } + + @Override + public Object getState(String instName) throws Exception { + LinkedHashMap result = new LinkedHashMap(); + BrokerService brokerService = new BrokerService(); + brokerService.getManagementContext().setCreateConnector(false); + ObjectName brokerViewMBean = null; + try { + brokerViewMBean = new ObjectName("org.apache.activemq:type=Broker,brokerName=localhost"); + BrokerViewMBean borkerProxy = (BrokerViewMBean) brokerService.getManagementContext() + .newProxyInstance(brokerViewMBean, BrokerViewMBean.class, true); + ObjectName[] queues = borkerProxy.getQueues(); + for (ObjectName queue : queues) { + QueueViewMBean proxy = (QueueViewMBean) brokerService.getManagementContext().newProxyInstance(queue, + QueueViewMBean.class, true); + String queueName = proxy.getName(); + long l = proxy.getQueueSize(); + result.put(queueName, getCount(queueName, l)); + } + } catch (java.lang.reflect.UndeclaredThrowableException i) { + ; + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + private String[] getCount(String queueName, long depth) throws Exception { + String[] info = new String[9]; + info[0] = queueName; + info[1] = "queue";// jmsDestinationRuntimes[j].getDestinationType(); + info[2] = "0";// jmsDestinationRuntimes[j].getConsumersCurrentCount(); + info[3] = "0";// jmsDestinationRuntimes[j].getConsumersHighCount(); + info[4] = "0";// jmsDestinationRuntimes[j].getConsumersTotalCount(); + info[5] = Long.toString(depth); + info[6] = "0";// jmsDestinationRuntimes[j].getMessagesHighCount(); + info[7] = "0";// jmsDestinationRuntimes[j].getMessagesPendingCount(); + info[8] = "0";// jmsDestinationRuntimes[j].getMessagesReceivedCount(); + return info; + } + + public static void main(String[] args) throws Exception { + SingleQueueMonitoringForActiveMq monitoring = new SingleQueueMonitoringForActiveMq(); + Properties properties = new Properties(); + + monitoring.init(properties); + System.out.println(monitoring.getState("")); + } + +} \ No newline at end of file diff --git a/src/main/java/com/eactive/eai/rms/client/service/weblogic/SingleQueueMonitoringForWebLogic.java b/src/main/java/com/eactive/eai/rms/client/service/weblogic/SingleQueueMonitoringForWebLogic.java new file mode 100644 index 0000000..579b4bb --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/service/weblogic/SingleQueueMonitoringForWebLogic.java @@ -0,0 +1,128 @@ +package com.eactive.eai.rms.client.service.weblogic; + +import java.util.HashMap; +import java.util.Hashtable; +import java.util.LinkedHashMap; +import java.util.Properties; + +import javax.management.MBeanServerConnection; +import javax.management.ObjectName; +import javax.management.remote.JMXConnector; +import javax.management.remote.JMXConnectorFactory; +import javax.management.remote.JMXServiceURL; +import javax.naming.Context; + +import com.eactive.eai.rms.client.service.JMXMonitoring; + +public class SingleQueueMonitoringForWebLogic implements JMXMonitoring { +// private static MBeanServerConnection connection; +// private static JMXConnector connector; + private String hostname ; + private String portString ; + private String username ; + private String password ; + + + private static SingleQueueMonitoringForWebLogic monitoring; + + public static SingleQueueMonitoringForWebLogic getInstance(){ + if(monitoring == null) { + synchronized(SingleQueueMonitoringForWebLogic.class) { + if(monitoring == null) { + monitoring = new SingleQueueMonitoringForWebLogic(); + } + } + } + return monitoring; + } + + @Override + public void init(Properties properties) throws Exception { + hostname = properties.getProperty("LOCAL_MBEAN_SERVER_IP"); + portString = properties.getProperty("LOCAL_MBEAN_SERVER_PORT"); + username = properties.getProperty("LOCAL_MBEAN_SERVER_ID"); + password = properties.getProperty("LOCAL_MBEAN_SERVER_PASSWORD"); + + } + + @Override + public Object getState(String instName) throws Exception { + LinkedHashMap result = new LinkedHashMap(); + JMXConnector connector = null; + MBeanServerConnection connection =null; + + try { + String protocol ="t3"; + Integer portInteger = Integer.valueOf(portString); + int port = portInteger.intValue(); + String jndiroot = "/jndi/"; + String mserver = "weblogic.management.mbeanservers.domainruntime"; + JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname, port, jndiroot + mserver); + Hashtable h = new Hashtable(); + h.put(Context.SECURITY_PRINCIPAL, username); + h.put(Context.SECURITY_CREDENTIALS, password); + h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "weblogic.management.remote"); + connector = JMXConnectorFactory.connect(serviceURL,h); + connection = connector.getMBeanServerConnection(); + + ObjectName serviceRuntime = new ObjectName("com.bea:Name=RuntimeService,Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean,Location="+instName); + ObjectName serverRuntime = (ObjectName)connection.getAttribute(serviceRuntime, "ServerRuntime") ; + ObjectName jmsRuntime = (ObjectName)connection.getAttribute(serverRuntime, "JMSRuntime") ; + ObjectName[] jmsServers = (ObjectName[])connection.getAttribute(jmsRuntime, "JMSServers") ; + + HashMap queue = new HashMap(); + + for(ObjectName jmsServer : jmsServers){ + String name = jmsServer.getKeyProperty("Name"); + if (name == null) continue; + + if(name.startsWith("JMSServer")){ + ObjectName[] destinations = (ObjectName[])connection.getAttribute(jmsServer, "Destinations"); + for(ObjectName destination : destinations){ + String queueName = destination.getKeyProperty("Name"); + if (queueName.contains("!")){ + queueName = queueName.substring(queueName.indexOf("!")+1); + } + if (queueName.contains("Topic")) continue; + + Long queueDepth = (Long) connection.getAttribute(destination, "MessagesCurrentCount"); + queue.put(queueName, queueDepth); + // System.out.println("Queue : " + queueName +" Depth : " + queueDepth); + } + } + } + for(String queueName : queue.keySet()){ + result.put(queueName, getCount(queueName, queue.get(queueName) )); + } + }finally{ + if (connector != null){try{connector.close();}catch(Exception e){}} + } + return result; + } + private String[] getCount(String queueName, long depth) throws Exception{ + String[] info = new String[9]; + info[0] = queueName; + info[1] = "queue";//jmsDestinationRuntimes[j].getDestinationType(); + info[2] = "0";//jmsDestinationRuntimes[j].getConsumersCurrentCount(); + info[3] = "0";//jmsDestinationRuntimes[j].getConsumersHighCount(); + info[4] = "0";//jmsDestinationRuntimes[j].getConsumersTotalCount(); + info[5] = Long.toString(depth); + info[6] = "0";//jmsDestinationRuntimes[j].getMessagesHighCount(); + info[7] = "0";//jmsDestinationRuntimes[j].getMessagesPendingCount(); + info[8] = "0";//jmsDestinationRuntimes[j].getMessagesReceivedCount(); + return info; + } + public static void main(String[] args)throws Exception{ + SingleQueueMonitoringForWebLogic monitoring = new SingleQueueMonitoringForWebLogic(); + Properties properties = new Properties(); + properties.put("LOCAL_MBEAN_SERVER_IP", "172.16.131.11"); + properties.put("LOCAL_MBEAN_SERVER_PORT", "30100"); + properties.put("LOCAL_MBEAN_SERVER_ID", "epostadm"); + properties.put("LOCAL_MBEAN_SERVER_PASSWORD", "welcome1!"); + + monitoring.init(properties); + System.out.println(monitoring.getState("mccSvr11")); + } + + +} diff --git a/src/main/java/com/eactive/eai/rms/client/service/weblogic/SingleServerMonitoringForWebLogic.java b/src/main/java/com/eactive/eai/rms/client/service/weblogic/SingleServerMonitoringForWebLogic.java new file mode 100644 index 0000000..5238ead --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/service/weblogic/SingleServerMonitoringForWebLogic.java @@ -0,0 +1,91 @@ +package com.eactive.eai.rms.client.service.weblogic; + +import java.util.Hashtable; +import java.util.Properties; + +import javax.management.MBeanServerConnection; +import javax.management.ObjectName; +import javax.management.remote.JMXConnector; +import javax.management.remote.JMXConnectorFactory; +import javax.management.remote.JMXServiceURL; +import javax.naming.Context; + +import com.eactive.eai.rms.client.service.JMXMonitoring; + +public class SingleServerMonitoringForWebLogic implements JMXMonitoring { +// private static MBeanServerConnection connection; +// private static JMXConnector connector; + private String hostname ; + private String portString ; + private String username ; + private String password ; + + private static SingleServerMonitoringForWebLogic monitoring; + + public static SingleServerMonitoringForWebLogic getInstance(){ + if(monitoring == null) { + synchronized(SingleServerMonitoringForWebLogic.class) { + if(monitoring == null) { + monitoring = new SingleServerMonitoringForWebLogic(); + } + } + } + return monitoring; + } + + @Override + public void init(Properties properties) throws Exception { + hostname = properties.getProperty("LOCAL_MBEAN_SERVER_IP"); + portString = properties.getProperty("LOCAL_MBEAN_SERVER_PORT"); + username = properties.getProperty("LOCAL_MBEAN_SERVER_ID"); + password = properties.getProperty("LOCAL_MBEAN_SERVER_PASSWORD"); + } + + @Override + public Object getState(String instName) throws Exception { + JMXConnector connector = null; + MBeanServerConnection connection =null; + + try { + String protocol ="t3"; + Integer portInteger = Integer.valueOf(portString); + int port = portInteger.intValue(); + String jndiroot = "/jndi/"; + String mserver = "weblogic.management.mbeanservers.domainruntime"; + JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname, port, jndiroot + mserver); + Hashtable h = new Hashtable(); + h.put(Context.SECURITY_PRINCIPAL, username); + h.put(Context.SECURITY_CREDENTIALS, password); + h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "weblogic.management.remote"); + connector = JMXConnectorFactory.connect(serviceURL,h); + connection = connector.getMBeanServerConnection(); + + + ObjectName service = new ObjectName("com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean"); + ObjectName[] servers = (ObjectName[])connection.getAttribute(service, "ServerRuntimes"); + for(ObjectName server : servers){ + String name = server.getKeyProperty("Name"); + if (name == null) continue; + if (name.equals(instName)){ + return 2; + } + } + }finally{ + if (connector != null){try{connector.close();}catch(Exception e){}} + } + return 0; + } + public static void main(String[] args)throws Exception{ + SingleServerMonitoringForWebLogic monitoring = new SingleServerMonitoringForWebLogic(); + Properties properties = new Properties(); + properties.put("LOCAL_MBEAN_SERVER_IP", "172.16.131.21"); + properties.put("LOCAL_MBEAN_SERVER_PORT", "30100"); + properties.put("LOCAL_MBEAN_SERVER_ID", "epostadm"); + properties.put("LOCAL_MBEAN_SERVER_PASSWORD", "welcome1!"); + + monitoring.init(properties); + System.out.println(monitoring.getState("mcuSvr11")); + } + + +} diff --git a/src/main/java/com/eactive/eai/rms/client/service/websphere/SingleQueueMonitoringForWebSphere.java b/src/main/java/com/eactive/eai/rms/client/service/websphere/SingleQueueMonitoringForWebSphere.java new file mode 100644 index 0000000..823b98b --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/service/websphere/SingleQueueMonitoringForWebSphere.java @@ -0,0 +1,191 @@ +package com.eactive.eai.rms.client.service.websphere; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Properties; + +import com.eactive.eai.rms.client.service.JMXMonitoring; + +//import java.security.PrivilegedAction; +//import java.util.Collections; +//import java.util.Comparator; +//import java.util.HashMap; +//import java.util.Iterator; +//import java.util.LinkedHashMap; +//import java.util.List; +//import java.util.Properties; +//import java.util.Set; +//import java.util.stream.Collectors; +// +//import javax.management.Attribute; +//import javax.management.AttributeList; +//import javax.management.ObjectName; +//import javax.security.auth.Subject; +//import javax.security.auth.callback.CallbackHandler; +//import javax.security.auth.login.LoginContext; +// +//import com.ibm.websphere.management.AdminClient; +//import com.ibm.websphere.management.AdminClientFactory; +//import com.ibm.websphere.security.auth.WSSubject; +//import com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl; +// +public class SingleQueueMonitoringForWebSphere implements JMXMonitoring{ +// public static AdminClient ac = null; +// +// private static Boolean isSubjectLogin ; +// +// +// private static Properties properties ; + private static SingleQueueMonitoringForWebSphere monitoring; + public static SingleQueueMonitoringForWebSphere getInstance(){ + if(monitoring == null) { + synchronized(SingleQueueMonitoringForWebSphere.class) { + if(monitoring == null) { + monitoring = new SingleQueueMonitoringForWebSphere(); + } + } + } + return monitoring; + } + + private SingleQueueMonitoringForWebSphere() { + } + + public void init(Properties properties) throws Exception { +// if (ac == null) { +// synchronized(SingleQueueMonitoring.class){ +// this.properties = properties; +// Object obj = properties.get("isSubjectLogin"); +// if (obj == null){ +// this.isSubjectLogin = false; +// }else { +// if (obj instanceof String){ +// this.isSubjectLogin = Boolean.parseBoolean((String)obj); +// } +// } +// if (ac== null){ +// ac = AdminClientFactory.createAdminClient(properties); +// } +// } +// } + } +// private static Object doAsAdmin(PrivilegedAction action) throws Exception { +// return WSSubject.doAs(getLoginSubject(), action); +// } +// +// private static Subject getLoginSubject() throws Exception { +// CallbackHandler callbackHandler = new WSCallbackHandlerImpl(properties.getProperty(AdminClient.USERNAME), null, +// properties.getProperty(AdminClient.PASSWORD)); +// LoginContext loginContext; +// try { +// loginContext = new LoginContext("WSLogin", callbackHandler); +// loginContext.login(); +// } catch (Exception e) { +// throw new RuntimeException(e.getMessage()); +// } +// return loginContext.getSubject(); +// } +// private Set getQueueListObjectNames(String serverName) throws Exception { +// final ObjectName objectName = new ObjectName("WebSphere:type=SIBQueuePoint,process="+serverName+",*"); +//// final QueryExp queryExp = Query.eq(Query.attr("process"), Query.value(serverName)); +// +// PrivilegedAction action = new PrivilegedAction(){ +// @Override +// public Object run() { +// try { +// return ac.queryNames(objectName, null); +// } catch (Exception e) { +// //e.printStackTrace(); +// } +// return null; +// } +// }; +// +// Set objectNameSet = null; +// if(isSubjectLogin){ +// objectNameSet = (Set) doAsAdmin(action); +// }else{ +// objectNameSet = (Set) action.run(); +// } +// +// return objectNameSet; +// } +// private HashMap getCount(ObjectName objectName) throws Exception{ +// String process = objectName.getKeyProperty("process"); +// String name = objectName.getKeyProperty("name").replaceAll("."+process, ""); +// +// HashMap result = new HashMap(); +// PrivilegedAction action = new PrivilegedAction(){ +// @Override +// public Object run() { +// try { +// return ac.getAttributes(objectName, new String[] { "depth" }); +// } catch (Exception e) { +// //e.printStackTrace(); +// } +// return null; +// } +// }; +// +// AttributeList attrList = null; +// if(isSubjectLogin){ +// attrList = (AttributeList) doAsAdmin(action); +// }else{ +// attrList = (AttributeList) action.run(); +// } +// if (attrList == null){ +// return result; +// } +// Iterator it = attrList.iterator(); +// while(it.hasNext()){ +// Attribute a = (Attribute)it.next(); +// if ("depth".equals(a.getName())){ +// if (a.getValue() instanceof Long ){ +// Long l = (Long)a.getValue(); +// String[] info = new String[9]; +// info[0] = name; +// info[1] = "queue";//jmsDestinationRuntimes[j].getDestinationType(); +// info[2] = "0";//jmsDestinationRuntimes[j].getConsumersCurrentCount(); +// info[3] = "0";//jmsDestinationRuntimes[j].getConsumersHighCount(); +// info[4] = "0";//jmsDestinationRuntimes[j].getConsumersTotalCount(); +// info[5] = Long.toString(l); +// info[6] = "0";//jmsDestinationRuntimes[j].getMessagesHighCount(); +// info[7] = "0";//jmsDestinationRuntimes[j].getMessagesPendingCount(); +// info[8] = "0";//jmsDestinationRuntimes[j].getMessagesReceivedCount(); +// result.put(name, info); +// } +// } +// } +// return result; +// } +// + public Object getState(String serverName) throws Exception { + LinkedHashMap result = new LinkedHashMap(); +// Set objectNames = getQueueListObjectNames(serverName); +// if (objectNames == null){ +// return result; +// } +// +// List list = objectNames.stream().collect(Collectors.toList()); +// Collections.sort(list, new Comparator() { +// @Override +// public int compare(ObjectName o1, ObjectName o2) { +// String s1 = (String) o1.getKeyProperty("name"); +// String s2 = (String) o2.getKeyProperty("name"); +// return s1.compareTo(s2); +// } +// }); +// +// for(ObjectName objectName : list){ +// String name = objectName.getKeyProperty("name"); +// if (name.startsWith("_")){ +// continue; +// } +// HashMap m = getCount(objectName); +// result.putAll(m); +// } + return result; + } + + +} diff --git a/src/main/java/com/eactive/eai/rms/client/service/websphere/SingleServerMonitoringForWebSphere.java b/src/main/java/com/eactive/eai/rms/client/service/websphere/SingleServerMonitoringForWebSphere.java new file mode 100644 index 0000000..ce5ad60 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/service/websphere/SingleServerMonitoringForWebSphere.java @@ -0,0 +1,184 @@ +package com.eactive.eai.rms.client.service.websphere; + +//import java.security.PrivilegedAction; +//import java.util.Iterator; +import java.util.Properties; + +import javax.management.ObjectName; + +import com.eactive.eai.rms.client.service.JMXMonitoring; +//import java.util.Set; +// +//import javax.management.Attribute; +//import javax.management.AttributeList; +//import javax.management.ObjectName; +//import javax.management.Query; +//import javax.management.QueryExp; +//import javax.security.auth.Subject; +//import javax.security.auth.callback.CallbackHandler; +//import javax.security.auth.login.LoginContext; +// +//import com.ibm.websphere.management.AdminClient; +//import com.ibm.websphere.management.AdminClientFactory; +//import com.ibm.websphere.security.auth.WSSubject; +//import com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl; +// +public class SingleServerMonitoringForWebSphere implements JMXMonitoring { +// public static AdminClient ac = null; +// +// private static Boolean isSubjectLogin ; +// private static Properties properties ; + + private static SingleServerMonitoringForWebSphere monitoring; + + public static SingleServerMonitoringForWebSphere getInstance(){ + if(monitoring == null) { + synchronized(SingleServerMonitoringForWebSphere.class) { + if(monitoring == null) { + monitoring = new SingleServerMonitoringForWebSphere(); + } + } + } + return monitoring; + } + + public void init(Properties properties) throws Exception { +// if (ac == null) { +// synchronized(SingleServerMonitoring.class){ +// this.properties = properties; +// Object obj = properties.get("isSubjectLogin"); +// if (obj == null){ +// this.isSubjectLogin = false; +// }else { +// if (obj instanceof String){ +// this.isSubjectLogin = Boolean.parseBoolean((String)obj); +// } +// } +// if (ac== null){ +// ac = AdminClientFactory.createAdminClient(properties); +// } +// } +// } + } +// private static Object doAsAdmin(PrivilegedAction action) throws Exception { +// return WSSubject.doAs(getLoginSubject(), action); +// } +// +// private static Subject getLoginSubject() throws Exception { +// CallbackHandler callbackHandler = new WSCallbackHandlerImpl(properties.getProperty(AdminClient.USERNAME), null, +// properties.getProperty(AdminClient.PASSWORD)); +// LoginContext loginContext; +// try { +// loginContext = new LoginContext("WSLogin", callbackHandler); +// loginContext.login(); +// } catch (Exception e) { +// throw new RuntimeException(e.getMessage()); +// } +// return loginContext.getSubject(); +// } +// private ObjectName getServerObjectNames(String serverName) throws Exception { +// final ObjectName objectName = new ObjectName("WebSphere:type=Server,*"); +// final QueryExp queryExp = Query.eq(Query.attr("name"), Query.value(serverName)); +// +// PrivilegedAction action = new PrivilegedAction(){ +// @Override +// public Object run() { +// try { +// return ac.queryNames(objectName, queryExp); +// } catch (Exception e) { +// //e.printStackTrace(); +// } +// return null; +// } +// }; +// +// Set objectNameSet = null; +// if(isSubjectLogin){ +// objectNameSet = (Set) doAsAdmin(action); +// }else{ +// objectNameSet = (Set) action.run(); +// } +// +// if (objectNameSet != null) { +// for(ObjectName o : objectNameSet){ +// return o; +// } +// } +// return null; +// } +// private int getServerStatus(ObjectName objectName) throws Exception{ +// PrivilegedAction action = new PrivilegedAction(){ +// @Override +// public Object run() { +// try { +// return ac.getAttributes(objectName, new String[] { "state" }); +// } catch (Exception e) { +// //e.printStackTrace(); +// } +// return null; +// } +// }; +// +// AttributeList attrList = null; +// if(isSubjectLogin){ +// attrList = (AttributeList) doAsAdmin(action); +// }else{ +// attrList = (AttributeList) action.run(); +// } +// if (attrList == null){ +// return 0; +// } +// Iterator it = attrList.iterator(); +// while(it.hasNext()){ +// Attribute a = (Attribute)it.next(); +// if ("state".equals(a.getName())){ +// if (a.getValue() instanceof String ){ +// if ("STARTED".equals((String)a.getValue())){ +// return 2; +// } +// } +// } +// } +// return 0; +// } +// + public Object getState(String serverName) throws Exception { +// ObjectName objectName = getServerObjectNames(serverName); +// if (objectName == null){ +// return 0; +// } +// try{ +// return getServerStatus(objectName); +// }catch(Exception e){ +// +// } + return 0; + } + +// public static void main(String[] args) throws Exception{ +// String serverIp = "192.168.68.21"; //개발서버-일괄 +// String port = "9809";//RMI // 관리콘솔 -> System administration -> Deployment manager -> Ports -> Bootstrap Address +// String loginId = "wasadm"; // 관리콘솔 로그인 ID +// String password = "system01"; // 콴리콘솔 로그인 PASSWORD +// +// Properties props = new Properties(); +// props.put(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_RMI); +// props.put(AdminClient.CONNECTOR_SECURITY_ENABLED, false); +// props.put(AdminClient.CONNECTOR_HOST, serverIp); +// props.put(AdminClient.CONNECTOR_PORT, port); +// props.put(AdminClient.USERNAME, loginId); +// props.put(AdminClient.PASSWORD, password); +// props.put("isSubjectLogin", false); +// +// SingleServerMonitoring m = new SingleServerMonitoring().getInstance(); +// m.init(props); +// +// System.out.println(m.getState("EAIDS02_i01")); +// +// SingleServerMonitoring m2 = new SingleServerMonitoring().getInstance(); +// m2.init(props); +// System.out.println(m.getState("EAIBS01_i01")); +// +// } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/util/AdminClinetPropertiesFactoryBeanUtil.java b/src/main/java/com/eactive/eai/rms/client/util/AdminClinetPropertiesFactoryBeanUtil.java new file mode 100644 index 0000000..b847081 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/util/AdminClinetPropertiesFactoryBeanUtil.java @@ -0,0 +1,97 @@ +package com.eactive.eai.rms.client.util; + +import java.util.Properties; + +import org.springframework.beans.factory.FactoryBean; +import org.springframework.beans.factory.InitializingBean; + +import com.eactive.eai.rms.client.context.RmsProperties; +//import com.ibm.websphere.management.AdminClient; + + +/** + * The Class MBeanServerFactoryBeanUtil. + *
    + *
  • 1. Function :WebLogic의 MBeanServer를 생성 합니다.
  • + *
  • 2. Summary :
  • + *
  • 3. Notification :
  • + *
+ * + * @author : $Author: amjang $ + * @version : $Revision: 1.3 $ + */ +public class AdminClinetPropertiesFactoryBeanUtil implements FactoryBean, InitializingBean { + + /** F/W logger. */ + private static com.eactive.eai.common.util.Logger logger = com.eactive.eai.common.util.Logger.getLogger(com.eactive.eai.common.util.Logger.LOGGER_CLIENT); + + + /** The monitoring properties. */ + private RmsProperties rmsProperties; + + /** The properties. */ + private Properties properties = null; + + /** + * Sets the monitoring properties. + * + * @param rmsProperties the new monitoring properties + */ + public void setRmsProperties(RmsProperties rmsProperties) { + this.rmsProperties = rmsProperties; + } + + public void afterPropertiesSet() { + init(); + } + + /** + * Inits the. + */ + + private void init() { + try { + String serverIp = rmsProperties.getStringProperty(RmsProperties.LOCAL_MBEAN_SERVER_IP); + String port = rmsProperties.getStringProperty(RmsProperties.LOCAL_MBEAN_SERVER_PORT); + String loginId = rmsProperties.getStringProperty(RmsProperties.LOCAL_MBEAN_SERVER_ID); + String password = rmsProperties.getStringProperty(RmsProperties.LOCAL_MBEAN_SERVER_PASSWORD); + String subjectLogin = rmsProperties.getStringProperty(RmsProperties.SUBJECT_LOGIN); + + Properties props = new Properties(); + if (ContainerUtil.get() == ContainerUtil.WEBSPHERE ){ +// props.put(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_RMI); +// props.put(AdminClient.CONNECTOR_SECURITY_ENABLED, ""+false); +// props.put(AdminClient.CONNECTOR_HOST, serverIp); +// props.put(AdminClient.CONNECTOR_PORT, port); +// props.put(AdminClient.USERNAME, loginId); +// props.put(AdminClient.PASSWORD, password); + props.put("isSubjectLogin", subjectLogin); + + }else if (ContainerUtil.get() == ContainerUtil.WEBLOGIC ){ + props.put(RmsProperties.LOCAL_MBEAN_SERVER_IP, serverIp); + props.put(RmsProperties.LOCAL_MBEAN_SERVER_PORT, port); + props.put(RmsProperties.LOCAL_MBEAN_SERVER_ID, loginId); + props.put(RmsProperties.LOCAL_MBEAN_SERVER_PASSWORD, password); + } + + this.properties = props; + + } catch (Exception e) { + logger.error("Could not make AdminClient Properties : " + e.getMessage(),e); + } + } + + + public Object getObject() { + return this.properties; + } + + public Class getObjectType() { + return Properties.class; + } + + public boolean isSingleton() { + return true; + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/util/CommandParser.java b/src/main/java/com/eactive/eai/rms/client/util/CommandParser.java new file mode 100644 index 0000000..df963ab --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/util/CommandParser.java @@ -0,0 +1,7 @@ +package com.eactive.eai.rms.client.util; + +public interface CommandParser { + + public Object parse(String string); + +} diff --git a/src/main/java/com/eactive/eai/rms/client/util/CommandUtils.java b/src/main/java/com/eactive/eai/rms/client/util/CommandUtils.java new file mode 100644 index 0000000..7714d0d --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/util/CommandUtils.java @@ -0,0 +1,85 @@ +package com.eactive.eai.rms.client.util; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + + +public class CommandUtils { + + /** F/W logger. */ + private static com.eactive.eai.common.util.Logger logger = com.eactive.eai.common.util.Logger.getLogger(com.eactive.eai.common.util.Logger.LOGGER_CLIENT); + + + public static Object processExec(String[] command, CommandParser parser) { + + if (logger.isDebugEnabled()) { + + StringBuilder sb = new StringBuilder("command를 실행 합니다. command : "); + for (int i = 0; i < command.length; i++) { + sb.append(command[i]).append(","); + } + + logger.debug(sb.toString()); + } + + String lineStr = null; + BufferedReader br = null; + Process process = null; + StringBuilder sb = new StringBuilder(); + InputStreamReader inputStreamReader = null; + InputStream inputStream = null; + + Object result = null; + + try { + process = new ProcessBuilder(command).start(); + + inputStream = process.getInputStream(); + inputStreamReader = new InputStreamReader(inputStream); + + br = new BufferedReader(new InputStreamReader( + process.getInputStream())); + + process.waitFor(); + + while ((lineStr = br.readLine()) != null) { + sb.append(lineStr).append("\n"); + } + + result = parser.parse(sb.toString().trim()); + + } catch (Exception e) { + logger.warn("command 실행 도중 에러 발생 : " + e.getMessage()); + } finally { + + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + } + } + if (inputStreamReader != null) { + try { + inputStreamReader.close(); + } catch (IOException e) { + } + } + if (br != null) { + try { + br.close(); + } catch (IOException e) { + } + } + if (process != null) { + try { + process.destroy(); + } catch (Exception e) { + } + } + } + + return result; + } +} diff --git a/src/main/java/com/eactive/eai/rms/client/util/ContainerUtil.java b/src/main/java/com/eactive/eai/rms/client/util/ContainerUtil.java new file mode 100644 index 0000000..cc917b9 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/util/ContainerUtil.java @@ -0,0 +1,127 @@ +package com.eactive.eai.rms.client.util; + +import java.util.HashMap; +import java.util.Map; + +import com.eactive.eai.common.server.Keys; + +/** + * The Class ContainerUtil. + *
    + *
  • 1. Function :현재 기동되는 컨테이너를 식별 합니다.
  • + *
  • 2. Summary :
  • + *
  • 3. Notification :
  • + *
+ * + * @author : $Author: 박기섭 $ + * @version : $Revision: 1.3 $ + */ +public class ContainerUtil { + + /** The Constant UNKNOWN. */ + public static final int UNKNOWN = 0; + + /** The Constant TOMCAT. */ + public static final int TOMCAT = 1; + + /** The Constant RESIN. */ + public static final int RESIN = 2; + + /** The Constant ORION. */ + public static final int ORION = 3; + + /** The Constant OC4J. */ + public static final int OC4J = 3; + + /** The Constant ORACLE_AS. */ + public static final int ORACLE_AS = 3; + + /** The Constant WEBLOGIC. */ + public static final int WEBLOGIC = 4; + + /** The Constant HPAS. */ + public static final int HPAS = 5; + + /** The Constant JRUN. */ + public static final int JRUN = 6; + + /** The Constant WEBSPHERE. */ + public static final int WEBSPHERE = 7; + + /** The Constant JEUS. */ + public static final int JEUS = 8; + + /** The result. */ + private static int result; + + /** The Constant containerString. */ + private static final Map containerString = new HashMap(); + + static { + + initServerString(); + + String weblogic = System.getProperty(Keys.SERVER_KEY); + String tomcat = System.getProperty("server.loader"); + String jeus = System.getProperty("jeus.home"); + + if (tomcat != null && tomcat.startsWith("${catalina.home}")) { + result = TOMCAT; + } else if (weblogic != null && !weblogic.trim().equals("")) { + result = WEBLOGIC; + } else if (jeus != null && !jeus.trim().equals("")) { + result = JEUS; + } else { + result = 0; + } + + } + + /** + * Inits the server string. + */ + private static void initServerString() { + containerString.put(String.valueOf(TOMCAT), "TOMCAT"); + containerString.put(String.valueOf(WEBLOGIC), "WEBLOGIC"); + containerString.put(String.valueOf(JEUS), "JEUS"); + containerString.put(String.valueOf(ORACLE_AS), "ORACLE_AS"); + containerString.put(String.valueOf(WEBSPHERE), "WEBSPHERE"); + containerString.put(String.valueOf(UNKNOWN), "UNKNOWN"); + } + + /** + * Gets the string. + * + * @param container the container + * + * @return the string + */ + public static String getString(int container) { + return (String) containerString.get(String.valueOf(container)); + } + + /** + * Gets the string. + * + * @return the string + */ + public static String getString() { + return getString(get()); + } + + /** + * Gets the Container. + * + * 다음과 같은 형태로 사용 합니다. {@code + * if (ContainerUtil.get() == ContainerUtil.WEBLOGIC) { + * ... + * } + * } + * + * @return int Container + */ + public static int get() { + return result; + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/util/QueryBuffer.java b/src/main/java/com/eactive/eai/rms/client/util/QueryBuffer.java new file mode 100644 index 0000000..85e644a --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/util/QueryBuffer.java @@ -0,0 +1,260 @@ +package com.eactive.eai.rms.client.util; + +/** + * The Class QueryBuffer. + * StringBuilder 이다. Query를 작성시 사용한다. StringBuffer와 같다. append 시 뒤에 \n 를 추가해준다. + *
    + *
  • 1. Function :
  • + *
  • 2. Summary :
  • + *
  • 3. Notification :
  • + *
+ * + * @author : $Author: 박기섭 $ + * @version : $Revision: 1.2 $ + */ +public class QueryBuffer { + + /** The sb buffer. */ + private StringBuilder sbBuffer; + + /** + * Instantiates a new query buffer. + */ + public QueryBuffer() { + sbBuffer = new StringBuilder(2048); + } + + /** + * Instantiates a new query buffer. + * + * @param sQuery the s query + */ + public QueryBuffer(String sQuery) { + sbBuffer = new StringBuilder(2048); + sbBuffer.append(sQuery); + } + + /** + * Instantiates a new query buffer. + * + * @param length the length + */ + public QueryBuffer(int length) { + sbBuffer = new StringBuilder(length); + } + + /** + * 해당 쿼리를 page 가능하게 바꿔준다. + * + * @param currentPage : + * 현재 가져오려는 page + * @param pageSize : + * 한번에 보여지는 page size + * + * @return paging 된 쿼리 + * + * @throws Exception * + */ + public String getPagingQuery(int currentPage, int pageSize) { + + QueryBuffer pagingQuery = new QueryBuffer(); + + if (currentPage == 0) { + currentPage = 1; + } + + if (pageSize == 0) { + pageSize = 30; + } + + /* + * 첫번째 페이지[currentPage:1] firstRow : 1 lastRow : pageSize + * + * 두번째 페이지[currentPage:2] firstRow : pageSize + 1 lastRow : 2 * pageSize + */ + int firstRow = pageSize * (currentPage - 1) + 1; + int lastRow = firstRow + pageSize - 1; + pagingQuery.append("SELECT * "); + pagingQuery.append("FROM ( "); + pagingQuery.append(" SELECT A.*, ROWNUM AS R "); + pagingQuery.append(" FROM ( "); + pagingQuery.append(this); + pagingQuery.append(" ) A "); + pagingQuery.append(" WHERE ROWNUM <= ").append( + String.valueOf(lastRow)); + pagingQuery.append(" ) B "); + pagingQuery.append("WHERE R >= ").append(String.valueOf(firstRow)); + + return pagingQuery.toString(); + } + + /** + * Gets the paging query. + * + * @param currentPage the current page + * + * @return String - 페이징 적용된 쿼리 + */ + public String getPagingQuery(int currentPage) { + return getPagingQuery(currentPage, 30); + } + + /** + * Delete. + * + * @param start the start + * @param end the end + */ + public void delete(int start, int end) { + this.sbBuffer.delete(start, end); + } + + /** + * Length. + * + * @return the int + */ + public int length() { + return this.sbBuffer.length(); + } + + /** + * Append. + * + * @param sQuery the s query + * + * @return the query buffer + */ + public QueryBuffer append(String sQuery) { + sbBuffer.append(" \n").append(sQuery); + return this; + } + + /** + * Append. + * + * @param sQuery the s query + * + * @return the query buffer + */ + public QueryBuffer append(int sQuery) { + sbBuffer.append(sQuery); + return this; + } + + /** + * Append. + * + * @param sQuery the s query + * + * @return the query buffer + */ + public QueryBuffer append(long sQuery) { + sbBuffer.append(sQuery); + return this; + } + + /** + * Append. + * + * @param sQuery the s query + * + * @return the query buffer + */ + public QueryBuffer append(char sQuery) { + sbBuffer.append(sQuery); + return this; + } + + /** + * Append. + * + * @param sQuery the s query + * + * @return the query buffer + */ + public QueryBuffer append(char[] sQuery) { + sbBuffer.append(sQuery); + return this; + } + + /** + * Append. + * + * @param sQuery the s query + * + * @return the query buffer + */ + public QueryBuffer append(double sQuery) { + sbBuffer.append(sQuery); + return this; + } + + /** + * Append. + * + * @param sQuery the s query + * + * @return the query buffer + */ + public QueryBuffer append(boolean sQuery) { + sbBuffer.append(sQuery); + return this; + } + + /** + * Append. + * + * @param sQuery the s query + * + * @return the query buffer + */ + public QueryBuffer append(QueryBuffer sQuery) { + sbBuffer.append(sQuery); + return this; + } + + /** + * Append. + * + * @param sQuery the s query + * + * @return the query buffer + */ + public QueryBuffer append(float sQuery) { + sbBuffer.append(sQuery); + return this; + } + + /** + * Insert. + * + * @param offset the offset + * @param query the query + * + * @return the query buffer + */ + public QueryBuffer insert(int offset, String query) { + sbBuffer.insert(offset, query); + return this; + } + + /** + * Insert. + * + * @param offset the offset + * @param query the query + * + * @return the query buffer + */ + public QueryBuffer insert(int offset, QueryBuffer query) { + sbBuffer.insert(offset, query); + return this; + } + + @Override + public String toString() { + return sbBuffer.toString(); + } + +} diff --git a/src/main/java/com/eactive/eai/rms/client/util/WindowsSystemMon.java b/src/main/java/com/eactive/eai/rms/client/util/WindowsSystemMon.java new file mode 100644 index 0000000..ba5c87a --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/client/util/WindowsSystemMon.java @@ -0,0 +1,90 @@ +package com.eactive.eai.rms.client.util; + +import java.io.File; +import java.lang.management.ManagementFactory; +import java.lang.management.OperatingSystemMXBean; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; + +// use for windows demo +public class WindowsSystemMon { + private static double getBeanMonitoringValue(OperatingSystemMXBean oBean, String methodName) { + double doubleValue = 0; + for (Method method : oBean.getClass().getDeclaredMethods()) { + method.setAccessible(true); + if (method.getName().startsWith(methodName) && Modifier.isPublic(method.getModifiers())) { + Object value; + try { + value = method.invoke(oBean); + if (value != null) { + if (value instanceof Double) + doubleValue = (Double) value; + if (value instanceof Long) + doubleValue = ((Long) value).doubleValue(); + } + break; + } catch (Exception e) { + value = e; + } // try +// System.out.println(method.getName() + " = " + value); + } // if + } // for + return doubleValue; + } + + private static void printSystemUsage() { + OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean(); + System.out.println( + "CPU Usage : " + String.format("%.2f", getBeanMonitoringValue(osBean, "getSystemCpuLoad") * 100)); + System.out.println( + "CPU Usage : " + String.format("%.2f", getBeanMonitoringValue(osBean, "getCpuLoad") * 100)); + System.out.println( + "CPU JVM Usage : " + String.format("%.2f", getBeanMonitoringValue(osBean, "getProcessCpuLoad") * 100)); + System.out.println("Memory Free Space G : " + String.format("%.2f", + getBeanMonitoringValue(osBean, "getFreePhysicalMemorySize") / 1024 / 1024 / 1024)); + System.out.println("Memory Total Space G : " + String.format("%.2f", + getBeanMonitoringValue(osBean, "getTotalPhysicalMemorySize") / 1024 / 1024 / 1024)); + } + + public static int getCpuPercentage() { + try { + OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean(); + int cpu = new Double(getBeanMonitoringValue(osBean, "getSystemCpuLoad") * 100).intValue(); + return cpu; + } + catch(Exception ex) { + return 0; + } + } + + public static int getDiskPercentage(){ + String rootDrive = System.getProperty("user.dir"); + File root = new File(rootDrive); + + double free = (double)root.getFreeSpace(); + double total = (double)root.getTotalSpace(); + double tmp = (free / total) * 100; + return (int)Math.round(tmp); + } + + public static int getMemoryPercentage() { + try { + OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean(); + double total = getBeanMonitoringValue(osBean, "getTotalPhysicalMemorySize"); + double free = getBeanMonitoringValue(osBean, "getFreePhysicalMemorySize"); + int memUsed = new Double((total-free)/total * 100).intValue(); + return memUsed; + } + catch(Exception ex) { + return 0; + } + } + + public static void main(String[] args) { +// printSystemUsage(); + System.out.println("getCpuPercentage = " + getCpuPercentage()); + System.out.println("getMemoryPercentage = " + getMemoryPercentage()); + System.out.println("getDiskPercentage = " + getDiskPercentage()); + } + +} diff --git a/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-datasource-local.xml b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-datasource-local.xml new file mode 100644 index 0000000..7480a4c --- /dev/null +++ b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-datasource-local.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + PROPAGATION_REQUIRED, readOnly + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-datasource.xml b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-datasource.xml new file mode 100644 index 0000000..a58d96d --- /dev/null +++ b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-datasource.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-impl.xml b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-impl.xml new file mode 100644 index 0000000..66976ec --- /dev/null +++ b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-impl.xml @@ -0,0 +1,510 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Job Detail + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + run + + + false + + + + + + 5000 + + + 30000 + + + + + diff --git a/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-jdbc.xml b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-jdbc.xml new file mode 100644 index 0000000..484678e --- /dev/null +++ b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-jdbc.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-schaduler-standalone.xml b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-schaduler-standalone.xml new file mode 100644 index 0000000..ec96650 --- /dev/null +++ b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-schaduler-standalone.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + org.quartz.simpl.RAMJobStore + + 5000 + + org.quartz.simpl.SimpleThreadPool + + 10 + 5 + true + true + + + + + diff --git a/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-schaduler.xml b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-schaduler.xml new file mode 100644 index 0000000..5847e4d --- /dev/null +++ b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-schaduler.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + org.quartz.simpl.RAMJobStore + + 5000 + + org.quartz.simpl.SimpleThreadPool + + 10 + 5 + true + true + + + + + diff --git a/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-standalone.xml b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-standalone.xml new file mode 100644 index 0000000..fd22958 --- /dev/null +++ b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent-standalone.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent.xml b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent.xml new file mode 100644 index 0000000..4031926 --- /dev/null +++ b/src/main/resources/com/eactive/eai/rms/client/context/applicationContext-agent.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/src/main/resources/rms.log4j.properties- b/src/main/resources/rms.log4j.properties- new file mode 100644 index 0000000..e98a4ec --- /dev/null +++ b/src/main/resources/rms.log4j.properties- @@ -0,0 +1,14 @@ +# Set root category priority to DEBUG and its appenders to stdout and R. +log4j.rootCategory=DEBUG, stdout +log4j.logger.com.eactive.eai.rms=DEBUG + +log4j.appender.stdout=kr.co.kpl.org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=kr.co.kpl.org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=[%d{dd MMM yyyy HH\:mm\:ss,SSS}] %5p (%F\:%L) - %m%n + +log4j.appender.file=kr.co.kpl.org.apache.log4j.RollingFileAppender +log4j.appender.file.File=/fslog/eai/${inst.Name}/ems_client-old.log +log4j.appender.file.MaxFileSize=10MB +log4j.appender.file.MaxBackupIndex=0 +log4j.appender.file.layout=kr.co.kpl.org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=[%d{dd MMM yyyy HH\:mm\:ss,SSS}] %5p (%F\:%L) - %m%n \ No newline at end of file