commit 463d11343c2ffce9b27c9291e334ccefd0f5667c Author: ByeonJungHun Date: Thu Jul 25 10:54:05 2024 +0900 최초 업로드 diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..3ab618a --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,33 @@ +stages: + - build + - push + +build: + image: docker:cli + stage: build + services: + - docker:dind + variables: + IMAGE_NAME: $REGISTRT/$APP:$VER + script: + - docker build --pull -t "$IMAGE_NAME" . + except: + variables: + - $CI_COMMIT_MESSAGE =~ /CI 수정/ + - $CI_COMMIT_MESSAGE =~ /최초 업로드/ + +push: + image: docker:cli + stage: push + services: + - docker:dind + variables: + IMAGE_NAME: $REGISTRT/$APP:$VER + before_script: + - docker login -u "$REGSITRY_USER" -p "$REGSITRY_PASSWORD" $REGISTRT + script: + - docker push "$IMAGE_NAME" + except: + variables: + - $CI_COMMIT_MESSAGE =~ /CI 수정/ + - $CI_COMMIT_MESSAGE =~ /최초 업로드/ \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4922a1e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,6 @@ +FROM alpine:3.20.2 + +LABEL version="1.0.17" +LABEL agent_name="java-agent" + +COPY ./java ./mnt/ diff --git a/java/cfg/agent/cfg.reload b/java/cfg/agent/cfg.reload new file mode 100644 index 0000000..e69de29 diff --git a/java/cfg/agent/db.alias b/java/cfg/agent/db.alias new file mode 100644 index 0000000..db25b6e --- /dev/null +++ b/java/cfg/agent/db.alias @@ -0,0 +1 @@ +# ip.port.databasename=alias \ No newline at end of file diff --git a/java/cfg/agent/java.conf b/java/cfg/agent/java.conf new file mode 100644 index 0000000..cc94fd8 --- /dev/null +++ b/java/cfg/agent/java.conf @@ -0,0 +1,412 @@ +#################### Transport Options #################### +# eg) 127.0.0.1:1314 +RECEIVER_ADDR= + +# default 1000ms (Min 500, Max 60000) +RECEIVER_RECONNECT_DELAY_TIME= + + +#################### Runtime Immutable Options #################### +# default 200 +TXN_BUFFER_COUNT= + +# default 256 +MTD_STACK_SIZE= + +# default false +USE_RUNTIME_REDEFINE= + +# default true +USE_RUNTIME_REDEFINE_HTTP_REMOTE= + +# default false +REMOVE_JDBC_ADVICE= + +# default false +REMOVE_JDBC_BIND_ADVICE= + +# default false +DISABLE_SQL_SID= + +# default false +USE_ORACLE_RAC= + +# default false +USE_TIBERO_TAC= + +# default false +DISABLE_CLASS_SOURCE= + +# default false +DISABLE_CLASS_META_CACHING= + + +#################### Runtime Changeable Options #################### +# eg) thread name pattern (startsWith) +EXCLUDE_THREAD= + +# default false +DISABLE_EXCLUDE_THREAD= + +# eg) gif, js, css, xml, jpg, jpeg, png, ico, woff, woff2 +EXCLUDE_SERVICE=gif, js, css, xml, jpg, jpeg, png, ico, woff, woff2 + +# eg) gif, js, css +EXCLUDE_SERVICE_AT_END_TIME= + +# eg) prefix1, prefix2 +EXCLUDE_TXCODE= + +# eg) type.Exception +EXCLUDE_EXCEPTION=weblogic.servlet.jsp.AddToMapException + +# eg) type.Exception +INCLUDE_EXCEPTION= + +# eg) type.Exception +INCLUDE_EXCEPTION_FOR_ALARM= + +# default 0 +TXN_ELAPSE_TIME= + +# ${TXNNAME}:${TXNTIME(ms)},${TXNNAME}:${TXNTIME(ms)} +CURR_TRACE_TXN=*:3000 + +# txn name 0:default, 1:parameter, 2:param_nouri, 3:attribute +TRX_NAME_TYPE= + +# txn key +TRX_NAME_KEY= + +# default false +TRX_NAME_USE_ENCODING= + +# default ISO-8859-1 +TRX_NAME_ENCODING_FROM= + +# default UTF-8 +TRX_NAME_ENCODING_TO= + +# default UTF-8 +REQ_SET_ENCODING_TO= + +# default false +USE_TRX_NAME_WHEN_LEAVE= + +# default false +ENABLE_TRACE_JSP_CLASS= + +# eg) replace number patterns [0-9]+ +REPLACE_URL_PATTERNS= + +# default 0 +TXN_NAME_SET_INDEX= + +# default 0 +TXN_NAME_SET_INDEX2= + +# default 0 +TXN_NAME_APPEND_INDEX= + +# txn login name 0:default, 1:attribute, 2:cookie +TRX_LOGIN_TYPE= + +# txn login key +TRX_LOGIN_KEY= + +# default false +ENABLE_ENCRYPT_LOGIN_NAME= + +# default empty string +TRX_IP_KEY= + +# txn error 0: default, 1: response(500), 2: response(400) +TRX_ERR_TYPE= + +# default empty string +TRX_ERR_STATUS= + +# 0: none(default), 1: error thread dump, 2: all thread dump +TRX_ERR_STATUS_TYPE= + +# default true +DISABLE_WEBID= + +# default false +USE_SESSIONID_FOR_WEBID= + +# default false +ENABLE_WEB_ID_WHEN_NO_USERAGENT= + +# default false +ENABLE_UPDATE_WEBID_COOKIE_TIME= + +# default false +TRACE_THREAD_NAME= + +# default false +DISABLE_ROOT_METHOD= + +# default true +TRACE_DBPOOL_NAME= + +# default false +USE_METHOD_SEQ= + +# default false +METHOD_DEBUG= + +# default 0 +MTD_ELAPSE_TIME= + +# default 2500 +MTD_BUFFER_SIZE= + +# default 100 +MTD_EXCEPTION_BUFFER_SIZE= + +# default 100 +MTD_STACK_BUFFER_SIZE= + +# default 256 +MTD_ERROR_LIMIT= + +# default 100000 +MTD_LIMIT= + +# default false +MTD_PARAM_TRACE= + +# default false +RMI_GET_PARAM= + +# default 0ms +ACTIVE_ELAPSE_TIME= + +# default 200 +ACTIVE_MAX_COUNT= + +# default false +USE_ETOE_ONLY= + +# default true +RT_RMI= + +# default ext +RT_RMI_VENDOR= + +# default 0ms +RT_RMI_ELAPSE_TIME= + +# default 0x00 eg) FILE_OPEN,FILE_CLOSE +RT_FILE= + +# default 0x10 eg) SOCKET_OPEN,SOCKET_CLOSE +RT_SOCKET= + +# default false +USE_MTD_EXT= + +# default false +USE_XRT_HANDLE= + +# default false +USE_INACTIVE_SOCKET_RT= + +# default false +USE_TRACE_COLLECTION_LEAK= + +# default 1000 +TRACE_COLLECTION_SIZE= + +# default 10000 +TRACE_COLLECTION_STACKTRACE_SIZE= + +# default 600000ms(10minutes) +TRACE_COLLECTION_REPORT_PERIOD= + +# default true +TRACE_JDBC= + +# default false +DISABLE_SQL= + +# default false +DISABLE_SQL_BIND= + +# default false +DISABLE_SQL_FETCH= + +# default 20 +LIMIT_SQL= + +# default false +USE_SQL_SEQ= + +# default 0(ms) +SQL_DETAIL_ELAPSE_LIMIT= + +# default 20000 +SQL_CACHE_MAX_COUNT= + +# default false +COMPRESS_SQL= + +# default false +CONVERT_SQL_ASCII_TO_KSC5601= + +# default null +CONVERT_SQL_ASCII_TO= + +# default null +CONVERT_SQL_TEXT_ENCODING_FROM= + +# default null +CONVERT_SQL_TEXT_ENCODING_TO= + +# default 2048, max 8192 +BIND_SIZE= + +# default 1024 +MONGO_BIND_SIZE= + +# default 50ms +BIND_ELAPSE_TIME= + +# default false +ENABLE_ENCRYPT_SQL_BIND= + +# default false +TRACE_FETCH_METHOD= + +# default false +TRACE_MONGO_FETCH= + +# default 0 +THROW_TXN_FETCH_COUNT= + +# default 0 +THROW_SQL_FETCH_COUNT= + +# eg) gif, js, css +THROW_EXCLUDE_SERVICE= + +# default 2000 +CONNECTION_LIMIT= + +# default false +GET_SID_WHEN_STMT= + +# default 600000ms(10minutes) +GET_SID_WHEN_STMT_LIMIT= + +# default false +CHANGE_DB2_SID_QUERY= + +# default false +USE_TRACE_ORACLE= + +# default false +USE_TRACE_ORACLE_CLEAR_PING= + +# default false +USE_TRACE_TIBERO= + +# default true +USE_JMX= + +# default false +TRACE_METHOD_MEMORY= + +# default false +TRACE_METHOD_CPUTIME= + +# default false +TXN_MEMORY= + +# default false +TXN_CPU_TIME= + +# default false +TXN_CPU_CORE= + +# error.jsp +REDIRECT_URL= + +# default empty string +PLC_MESSAGE= + +# default empty string +RUM_MESSAGE= + +# default 3600 +RUM_SCRIPT_INJECTION_CLIENT_RESET_SECOND= + +# default -1 +RUM_SCRIPT_INJECTION_CLIENT_COUNT= + +# default false +USE_TRACE_CLIENT_TIME= + +# default empty string +TRACE_CLIENT_TIME_POSTFIX= + +# eg) 192.168.0.10:8082 +TRACE_CLIENT_TIME_ADDR= + +# default false +RESP_HTML_SCRIPT= + +# default 50ms +RESP_HTML_ELAPSE_TIME= + +# eg) .*\.jsp +RESP_HTML_SCRIPT_TARGET=.*\.jsp + +# default 1,2,3, 1: Environment, 2: InetAddress, 3: Command +HOSTNAME_COLLECT_TYPE_PRIORITY= + +# default 50 +ACTIVE_STACK_MAX_LINE= + +# default 10 +ACTIVE_STACK_INTERVAL_ELAPSE= + +# default 0sec +APP_SLEEP= + +# default true +ENABLE_RELOAD_ADVICE= + +# ${ALERT}:${RESTART}:${LEVEL},${ALERT}:${RESTART}:${LEVEL} +LOG_ALERT=1:java.lang.OutOfMemoryError,2:container {0} booted + +# default false +RESP_HEADER_TID= + +# default false +TRACE_SIMPLE_METHOD= + +# default 60KB +MTD_MAX_SIZE= + +# default false +USE_METHOD_LIST= + +# default false +USE_JAR_LIST= + +# default log eg) log or AbsolutePath +LOG_PATH= + +# default -1 +LOG_MAX_COUNT= + +# default false +EXEM_RUN_ON_CONTAINER= + +# default empty string +EXEM_GROUP_ID= + +# default 0x000000000 eg) RMI,HTML,RESPONSE,CLASS,GC,UDP,TCP,TRACE,DEBUG +DEBUG=0x000000000 diff --git a/java/cfg/file.history b/java/cfg/file.history new file mode 100644 index 0000000..023e0c8 --- /dev/null +++ b/java/cfg/file.history @@ -0,0 +1 @@ +#D:\dump1.txt \ No newline at end of file diff --git a/java/cfg/local.advice b/java/cfg/local.advice new file mode 100644 index 0000000..759f6ec --- /dev/null +++ b/java/cfg/local.advice @@ -0,0 +1,14 @@ + +### 작성방법 +# 패키지 및 클래스 구분자는 slash(/)이며 클래스와 메소드는 dot(.)으로 구분한다. +# 강제포함, 제외, 포함 순으로 높은 우선순위를 갖는다. +# 강제포함은 exclamation mark(!), 제외는 dash(-)를 접두사로 붙여 표기한다. +# 와일드카드 문자(*)를 포함해 startWith, endWith 연산을 수행할 수 있다. +# 로드된 전체 클래스를 대상으로한 설정은 안정성 문제로 인해 동적 적용되지 않는다. + +### 작성예시 +# com/inzent.* +# -com/inzent/igate.* +# !com/inzent/igate/util.* + +!javax/servlet/http/HttpServlet.* diff --git a/java/cfg/param.runtime b/java/cfg/param.runtime new file mode 100644 index 0000000..e69de29 diff --git a/java/cfg/plc.list b/java/cfg/plc.list new file mode 100644 index 0000000..466d714 --- /dev/null +++ b/java/cfg/plc.list @@ -0,0 +1,23 @@ +########################################### PLC 기능 ########################################### + +### 작성방법 +# [숫자] : 제어 기준 수치(기준 트랜잭션수) +# 접두사 ^(caret) : 차단할 트랜잭션명 +# 접두사 .*(dot asterisk) : 와일드 카드 +# 제어 기준은 여러 개를 입력할 수 있으며, 그 기준은 이 파일의 위에서 아래순으로 우선 적용된다. + +### 작성예시 +# [200] +# ^.*/select +# +# [100] +# ^.*oracle/select +# .*postgres/select +# +# [50] +# ^.*postgres/select +# +# 액티브 트랜잭션 수가 200 이상이면 /select로 끝나는 모든 트랜잭션을 차단한다. +# 액티브 트랜잭션 수가 100 이상이면 oracle/select로 끝나는 모든 트랜잭션을 차단한다. +# 액티브 트랜잭션 수가 100 이상이면 postgres/select로 끝나는 트랜잭션은 허용한다. +# 액티브 트랜잭션 수가 50 이상이면 postgres/select로 끝나는 모든 트랜잭션을 차단한다. \ No newline at end of file diff --git a/java/cfg/x.advice b/java/cfg/x.advice new file mode 100644 index 0000000..f16b90e --- /dev/null +++ b/java/cfg/x.advice @@ -0,0 +1,96 @@ +appService@com.exem.weave.servlet.XmAPPService +httpCall@com.exem.weave.io.XmHttpCall +httpCallHeader@com.exem.weave.io.XmHttpCallHeader +httpRequest@com.exem.weave.io.XmHttpRequest +xCall@com.exem.weave.io.XmXCall +xInbound@com.exem.weave.io.XmXInbound +xOutbound@com.exem.weave.io.XmXOutbound +xReply@com.exem.weave.io.XmXReply +service@com.exem.weave.servlet.XmService +kepco@com.exem.weave.servlet.XmTxnKepco + +########## APPLICATION ########## +#appService= + +#websphere 8.5 browser response time +#service=com/ibm/ws/webcontainer/filter/WebAppFilterManager.invokeFilters(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Lcom/ibm/wsspi/webcontainer/servlet/IServletContext;Lcom/ibm/wsspi/webcontainer/RequestProcessor;Ljava/util/EnumSet;)Z + +## Spring Cloud Gateway ## +#appService=org/springframework/cloud/gateway/filter/NettyRoutingFilter.filter(Lorg/springframework/web/server/ServerWebExchange;Lorg/springframework/cloud/gateway/filter/GatewayFilterChain;)Lreactor/core/publisher/Mono; + +########## HTTP ########## +httpCall=weblogic/net/http/HttpClient.parseHTTP(Lweblogic/net/http/MessageHeader;)V +httpRequest=weblogic/net/http/HttpURLConnection.writeRequests()V +httpCall=org/apache/commons/httpclient/HttpClient.executeMethod(Lorg/apache/commons/httpclient/HostConfiguration;Lorg/apache/commons/httpclient/HttpMethod;Lorg/apache/commons/httpclient/HttpState;)I +httpCall=org/apache/http/impl/client/InternalHttpClient.doExecute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/client/methods/CloseableHttpResponse; +httpCall=org/apache/http/impl/client/MinimalHttpClient.doExecute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/client/methods/CloseableHttpResponse; +httpCall=org/apache/commons/httpclient/HttpMethodBase.execute(Lorg/apache/commons/httpclient/HttpState;Lorg/apache/commons/httpclient/HttpConnection;)I + +## soap ## +httpCall=org/apache/soap/util/net/HTTPUtils.post(Ljava/net/URL;Lorg/apache/soap/transport/TransportMessage;ILjava/lang/String;II)Lorg/apache/soap/transport/TransportMessage; +## soap-2.3.jar higher ## +#httpCall=org/apache/soap/util/net/HTTPUtils.post(Ljava/net/URL;Lorg/apache/soap/transport/TransportMessage;ILjava/lang/String;IILjava/lang/Boolean;)Lorg/apache/soap/transport/TransportMessage; +## apache axis ## +httpCall=org/apache/axis/client/Call.setRequestMessage(Lorg/apache/axis/Message;)V +## reactor netty / jetty (webflux) ## +httpCall=reactor/netty/http/client/HttpClientConnect.connect()Lreactor/core/publisher/Mono; +httpCall=org/eclipse/jetty/client/HttpRequest.send(Lorg/eclipse/jetty/client/api/Response$CompleteListener;)V +## Spring AsyncRestTemplate ## +httpCall=org/springframework/web/client/AsyncRestTemplate$AsyncRequestCallbackAdapter.doWithRequest(Lorg/springframework/http/client/AsyncClientHttpRequest;)V +## apache httpasyncclient ## +httpCall=org/apache/http/impl/nio/client/CloseableHttpAsyncClient.execute(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/concurrent/FutureCallback;)Ljava/util/concurrent/Future; +httpCall=org/apache/http/impl/nio/client/CloseableHttpAsyncClient.execute(Lorg/apache/http/nio/protocol/HttpAsyncRequestProducer;Lorg/apache/http/nio/protocol/HttpAsyncResponseConsumer;Lorg/apache/http/concurrent/FutureCallback;)Ljava/util/concurrent/Future; +## okhttp ## +httpCallHeader=okhttp3/Request$Builder.build()Lokhttp3/Request; +httpCall=okhttp3/RealCall.execute()Lokhttp3/Response; +httpCall=okhttp3/RealCall.enqueue(Lokhttp3/Callback;)V +## spring cloud zuul (restclient) ## +httpCallHeader=com/netflix/client/http/HttpRequest$Builder.build()Lcom/netflix/client/http/HttpRequest; +httpCall=org/apache/http/impl/client/AbstractHttpClient.doExecute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/client/methods/CloseableHttpResponse; + +########## TMAX ########## +xCall=tmax/webt/WebtRemoteService.tpcall(Ljava/lang/String;Ltmax/webt/WebtBuffer;Ltmax/webt/WebtAttribute;)Ltmax/webt/WebtBuffer; +xCall=tmax/webt/WebtRemoteService.tpacall(Ljava/lang/String;Ltmax/webt/WebtBuffer;Ltmax/webt/WebtAttribute;Ltmax/webt/WebtMessageHandler;)I +#xOutbound=tmax/webt/io/WebtOutputStream.getSerializedPacket(Ltmax/webt/WebtBuffer;)[B +#xReply=tmax/webt/WebtRemoteService.tpgetrply(ILtmax/webt/WebtAttribute;)Ltmax/webt/WebtBuffer; + +########## TUXEDO ########## +xCall=weblogic/wtc/gwt/TuxedoConnection.tpcall(Ljava/lang/String;Lweblogic/wtc/jatmi/TypedBuffer;I)Lweblogic/wtc/jatmi/Reply; +xCall=weblogic/wtc/gwt/TuxedoConnection.tpacall(Ljava/lang/String;Lweblogic/wtc/jatmi/TypedBuffer;ILweblogic/wtc/jatmi/TpacallAsyncReply;)Lweblogic/wtc/jatmi/CallDescriptor; +#xOutbound=weblogic/wtc/jatmi/TuxedoArrayOutputStream.getByteArrayReference()[B +#xReply=weblogic/wtc/gwt/TuxedoConnection.tpgetrply(Lweblogic/wtc/jatmi/CallDescriptor;I)Lweblogic/wtc/jatmi/Reply; + +########## SAP ########## +xCall=com/sap/conn/jco/rt/AbapFunction.execute(Lcom/sap/conn/jco/JCoDestination;)V +xCall=com/sap/conn/jco/rt/AbapFunction.execute(Lcom/sap/conn/jco/JCoDestination;Ljava/lang/String;)V +xCall=com/sap/conn/jco/rt/AbapFunction.execute(Lcom/sap/conn/jco/JCoDestination;Ljava/lang/String;Ljava/lang/String;)V +#xOutbound=com/sap/conn/rfc/driver/CpicDriver.write([BIZ)I +#xReply=com/sap/conn/rfc/engine/RfcIoOpenCntl.RfcReceive([Lcom/sap/conn/rfc/api/IRfcParameter;[Lcom/sap/conn/rfc/api/IRfcParameter;[Lcom/sap/conn/rfc/api/IRfcTable;Lcom/sap/conn/jco/JCoRepository;)V + +########## RabbitMQ ########## +rabbitMQPublish@com.exem.weave.io.XmRabbitMQPublish +rabbitMQPublish=com/rabbitmq/client/impl/AMQChannel.transmit(Lcom/rabbitmq/client/impl/AMQCommand;)V + +########## Kafka ########## +kafkaProduce@com.exem.weave.io.XmKafkaProduce +kafkaProduce=org/apache/kafka/clients/producer/KafkaProducer.doSend(Lorg/apache/kafka/clients/producer/ProducerRecord;Lorg/apache/kafka/clients/producer/Callback;)Ljava/util/concurrent/Future; +kafkaAppend@com.exem.weave.io.XmKafkaRecordAppend +kafkaAppend=org/apache/kafka/clients/producer/internals/RecordAccumulator.append(Ljava/lang/String;IJ[B[B[Lorg/apache/kafka/common/header/Header;Lorg/apache/kafka/clients/producer/internals/RecordAccumulator$AppendCallbacks;JZJLorg/apache/kafka/common/Cluster;)Lorg/apache/kafka/clients/producer/internals/RecordAccumulator$RecordAppendResult; +#appService=org/springframework/kafka/listener/adapter/RecordMessagingMessageListenerAdapter.onMessage(Lorg/apache/kafka/clients/consumer/ConsumerRecord;Lorg/springframework/kafka/support/Acknowledgment;Lorg/apache/kafka/clients/consumer/Consumer;)V +appService=org/apache/kafka/clients/consumer/internals/Fetcher.parseRecord(Lorg/apache/kafka/common/TopicPartition;Lorg/apache/kafka/common/record/RecordBatch;Lorg/apache/kafka/common/record/Record;)Lorg/apache/kafka/clients/consumer/ConsumerRecord; +#appService=appService=org/apache/kafka/clients/consumer/internals/CompletedFetch.parseRecord(Lorg/apache/kafka/clients/consumer/internals/Deserializers;Lorg/apache/kafka/common/TopicPartition;Ljava/util/Optional;Lorg/apache/kafka/common/record/TimestampType;Lorg/apache/kafka/common/record/Record;)Lorg/apache/kafka/clients/consumer/ConsumerRecord; + +########## Camel ########## +#camelSedaCall@com.exem.weave.io.XmCamelSedaProduce +#camelSedaCall=org/apache/camel/component/seda/SedaProducer.process(Lorg/apache/camel/Exchange;Lorg/apache/camel/AsyncCallback;)Z + +camelProduce@com.exem.weave.io.XmCamelProduce +camelProduce=org/apache/camel/component/seda/SedaProducer.prepareCopy(Lorg/apache/camel/Exchange;Z)Lorg/apache/camel/Exchange; + +#appService=org/apache/camel/support/processor/DelegateSyncProcessor.process(Lorg/apache/camel/Exchange;Lorg/apache/camel/AsyncCallback;)Z +appService=org/apache/camel/processor/SendProcessor.process(Lorg/apache/camel/Exchange;Lorg/apache/camel/AsyncCallback;)Z + +########## Redis ########## +redisCall@com.exem.weave.io.XmRedisCommand +redisCall=io/lettuce/core/RedisChannelHandler.dispatch(Lio/lettuce/core/protocol/RedisCommand;)Lio/lettuce/core/protocol/RedisCommand; +redisCall=redis/clients/jedis/Connection.sendCommand(Lredis/clients/jedis/CommandArguments;)V \ No newline at end of file diff --git a/java/data/exem_api_em.js b/java/data/exem_api_em.js new file mode 100644 index 0000000..a30f4ff --- /dev/null +++ b/java/data/exem_api_em.js @@ -0,0 +1,147 @@ + +(function () { + var _XM_TID = '%{XM_TID}'; + var _XM_TRACE_ELAPSE = '%{XM_TRACE_ELAPSE}'; + var _XM_CLIENT_API = '_XM_CLIENT_API%{XM_CLIENT_API}'; + var _XM_CLIENT_ADDR = '%{XM_CLIENT_ADDR}'; + var _XM_TID_HEADER = 'X-Xm-Tid'; + var _XM_TRACE_ELAPSE_HEADER = 'X-Xm-ElapseTime'; + + + var openProxied = window.XMLHttpRequest.prototype.open; + window.XMLHttpRequest.prototype.open = function () { + if (arguments[1].indexOf(_XM_CLIENT_API) == -1) { + if (document.removeEventListener) { + this.removeEventListener("loadstart", _xm_loadstart); + this.removeEventListener("loadend", _xm_loadend); + } + else { + this.detachEvent("loadstart", _xm_loadstart); + this.detachEvent("loadend", _xm_loadend); + } + if (this.addEventListener) { + this.addEventListener("loadstart", _xm_loadstart); + this.addEventListener("loadend", _xm_loadend); + } + else if (this.attachEvent) { + this.attachEvent("onloadstart", _xm_loadstart); + this.attachEvent("onloadend", _xm_loadend); + } + } + return openProxied.apply(this, [].slice.call(arguments)); + }; + + var _xm_loadstart = function () { + var eventProxied = this.onreadystatechange; + this.onreadystatechange = function () { + if (this.readyState === XMLHttpRequest.DONE) { + this._xm_clientinfo.es = Date.now(); + } + + if (eventProxied != null && typeof eventProxied != 'undefined') { + eventProxied.apply(this, [].slice.call(arguments)); + } + + if (this.readyState === XMLHttpRequest.DONE) { + this._xm_clientinfo.ee = Date.now(); + } + }; + this._xm_clientinfo = __xm_create_clientinfo(); + this._xm_clientinfo.ss = Date.now(); + this._xm_clientinfo.se = Date.now(); + }; + + var _xm_loadend = function () { + if (typeof this._xm_clientinfo == 'undefined') return; + if (this._xm_clientinfo.es == 0) { + this._xm_clientinfo.es = Date.now(); + this._xm_clientinfo.ee = Date.now(); + } + this._xm_clientinfo.tid = this.getResponseHeader(_XM_TID_HEADER); + var traceElapseTime = this.getResponseHeader(_XM_TRACE_ELAPSE_HEADER); + + if (typeof traceElapseTime == 'undefined' || typeof this._xm_clientinfo.tid == 'undefined') { + return; + } + + if (traceElapseTime > this._xm_clientinfo.ee - this._xm_clientinfo.ss) { + return; + } + + var _xm_clientinfo = this._xm_clientinfo; + __xm_send_post(_xm_clientinfo); + }; + + function __xm_create_clientinfo() { + var clientinfo = {}; + clientinfo.tid = 0; + clientinfo.ss = 0; + clientinfo.se = 0; + clientinfo.es = 0; + clientinfo.ee = 0; + return clientinfo; + } + + function __xm_send_post(clientinfo) { + try{ + var queryParameters = 'tid=' + clientinfo.tid + '&ss=' + clientinfo.ss + "&se=" + clientinfo.se; + queryParameters += '&es=' + clientinfo.es + "&ee=" + clientinfo.ee; + + var xmlhttp; + if (window.XMLHttpRequest) { + xmlhttp = new XMLHttpRequest(); + } else { + xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); + } + + if(_XM_CLIENT_ADDR == "") { + xmlhttp.open('GET', './'+_XM_CLIENT_API+'?' + queryParameters, true); + }else{ + xmlhttp.open('GET', 'http://' + _XM_CLIENT_ADDR + '/' + _XM_CLIENT_API + '?' + queryParameters, true); + } + + xmlhttp.send(null); + + if (true) { + var sendElapseTime = clientinfo.se - clientinfo.ss; + var recvElapseTime = clientinfo.ee - clientinfo.es; + var serverElapseTime = clientinfo.es - clientinfo.se; + + console.log('__xm_send_post serverElapseTime=' + serverElapseTime + ', sendElapseTime=' + sendElapseTime + ', recvElapseTime=' + recvElapseTime); + } + } + catch(e) { + console.log(e); + } + } + + var _xm_window_load = function () { + //return; + setTimeout(function () { + var timing = window.performance.timing; + var clientinfo = __xm_create_clientinfo(); + clientinfo.ss = timing.navigationStart; + clientinfo.se = timing.connectEnd; + clientinfo.es = timing.responseEnd; + clientinfo.ee = timing.loadEventEnd; + clientinfo.tid = _XM_TID; + + if (_XM_TRACE_ELAPSE > clientinfo.ee - clientinfo.ss) { + return; + } + + __xm_send_post(clientinfo); + }, 0); + }; + + if (!window.performance || !window.performance.timing) { + return; + } + + if (this.addEventListener) { + this.addEventListener("load", _xm_window_load); + } + else if (this.attachEvent) { + this.attachEvent("onload", _xm_window_load); + } +})(); diff --git a/java/data/xm_plc_message.html b/java/data/xm_plc_message.html new file mode 100644 index 0000000..b73d3f5 --- /dev/null +++ b/java/data/xm_plc_message.html @@ -0,0 +1,30 @@ + + + + Message (InterMax) + + + + + +
%{XM_PLC_MESSAGE}
+ + + \ No newline at end of file diff --git a/java/data/xm_rum_message.html b/java/data/xm_rum_message.html new file mode 100644 index 0000000..d18d8f2 --- /dev/null +++ b/java/data/xm_rum_message.html @@ -0,0 +1,28 @@ + + + + Message (InterMax) + + + +

InterMax Rum Message

+
%{XM_RUM_MESSAGE}
+ + \ No newline at end of file diff --git a/java/lib/exem-java-agent.jar b/java/lib/exem-java-agent.jar new file mode 100644 index 0000000..9593591 Binary files /dev/null and b/java/lib/exem-java-agent.jar differ diff --git a/java/lib/exem-java-common.jar b/java/lib/exem-java-common.jar new file mode 100644 index 0000000..eef0141 Binary files /dev/null and b/java/lib/exem-java-common.jar differ diff --git a/java/lib/exem-java-ext.jar b/java/lib/exem-java-ext.jar new file mode 100644 index 0000000..abdd1ce Binary files /dev/null and b/java/lib/exem-java-ext.jar differ diff --git a/java/lib/exem-java-pool.jar b/java/lib/exem-java-pool.jar new file mode 100644 index 0000000..20cf7ef Binary files /dev/null and b/java/lib/exem-java-pool.jar differ diff --git a/java/license/asm-LICENSE.txt b/java/license/asm-LICENSE.txt new file mode 100644 index 0000000..430787f --- /dev/null +++ b/java/license/asm-LICENSE.txt @@ -0,0 +1,29 @@ +ASM is released under the following 3-Clause BSD License: + +ASM: a very small and fast Java bytecode manipulation framework +Copyright (c) 2000-2011 INRIA, France Telecom +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the copyright holders nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/java/pkg_version.bat b/java/pkg_version.bat new file mode 100644 index 0000000..1e82d32 --- /dev/null +++ b/java/pkg_version.bat @@ -0,0 +1,7 @@ +@echo off + +set PRODUCT_NAME=exemONE +set MODULE_NAME=exem-java-agent +set VERSION=1.0.17 + +echo %PRODUCT_NAME% %MODULE_NAME% ver %VERSION% \ No newline at end of file diff --git a/java/pkg_version.sh b/java/pkg_version.sh new file mode 100644 index 0000000..bff8cd4 --- /dev/null +++ b/java/pkg_version.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +PRODUCT_NAME="exemONE" +MODULE_NAME="exem-java-agent" +VERSION="1.0.17" + +echo ${PRODUCT_NAME} ${MODULE_NAME} ver ${VERSION} \ No newline at end of file