Skip to content

Commit eaaa5be

Browse files
committed
Merge pull request #112 from scouter-project/master
merge for release
2 parents 6e84d85 + c749603 commit eaaa5be

File tree

57 files changed

+911
-687
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+911
-687
lines changed

scouter.agent.host/src/scouter/agent/counter/CounterExecutingManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@ public static void load() {
120120
CounterExecutingManager.getInstance().put(new Invocation(c.newInstance(), m[i], interval));
121121
n++;
122122
}
123-
} catch (Exception e) {
124-
scouter.agent.Logger.println("A112", ThreadUtil.getStackTrace(e));
123+
} catch (Throwable t) {
124+
scouter.agent.Logger.println("A112", ThreadUtil.getStackTrace(t));
125125
}
126126
}
127127
scouter.agent.Logger.println("A113", "Counter Collector Started (#" + n + ")");

scouter.agent.java/plugin/readme.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@
116116

117117
### WrHttpCallRequest class API
118118
- void header(Object key, Object value) : Header값 추가
119-
- String toString(Object value) : 80자 이하로 toString
120119
- Object inner() : Request Object를 반환
121120
- boolean isOk() : Plugin 상태 확인
122121
- Throwable error() : Error 확인
@@ -136,4 +135,4 @@
136135
- Object getThis() : this object 반환
137136
- Object getReturn() : Return 값 반환
138137

139-
138+

scouter.agent.java/plugin/readme_kr.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@
116116

117117
### WrHttpCallRequest class API
118118
- void header(Object key, Object value) : Header값 추가
119-
- String toString(Object value) : 80자 이하로 toString
120119
- Object inner() : Request Object를 반환
121120
- boolean isOk() : Plugin 상태 확인
122121
- Throwable error() : Error 확인
@@ -136,4 +135,4 @@
136135
- Object getThis() : this object 반환
137136
- Object getReturn() : Return 값 반환
138137

139-
138+

scouter.agent.java/src/scouter/agent/Configure.java

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,6 @@
1616
*/
1717
package scouter.agent;
1818

19-
import java.io.File;
20-
import java.io.FileInputStream;
21-
import java.io.FileOutputStream;
22-
import java.io.InputStream;
23-
import java.io.OutputStream;
24-
import java.util.HashMap;
25-
import java.util.HashSet;
26-
import java.util.Map;
27-
import java.util.Properties;
28-
import java.util.Set;
29-
3019
import scouter.Version;
3120
import scouter.agent.netio.data.DataProxy;
3221
import scouter.lang.conf.ConfObserver;
@@ -35,16 +24,10 @@
3524
import scouter.lang.value.ListValue;
3625
import scouter.lang.value.MapValue;
3726
import scouter.net.NetConstants;
38-
import scouter.util.DateUtil;
39-
import scouter.util.FileUtil;
40-
import scouter.util.HashUtil;
41-
import scouter.util.StringEnumer;
42-
import scouter.util.StringKeyLinkedMap;
43-
import scouter.util.StringSet;
44-
import scouter.util.StringUtil;
45-
import scouter.util.SysJMX;
46-
import scouter.util.SystemUtil;
47-
import scouter.util.ThreadUtil;
27+
import scouter.util.*;
28+
29+
import java.io.*;
30+
import java.util.*;
4831
public class Configure extends Thread {
4932
public static boolean JDBC_REDEFINED = false;
5033
private static Configure instance = null;
@@ -156,6 +139,7 @@ public final static synchronized Configure getInstance() {
156139
public boolean _log_asm_enabled;
157140
public boolean _log_udp_xlog_enabled;
158141
public boolean _log_udp_object_enabled;
142+
public boolean _log_udp_counter_enabled;
159143
public boolean _log_datasource_lookup_enabled = true;
160144
public boolean _log_background_sql = false;
161145
public String log_dir ="";
@@ -231,6 +215,10 @@ public final static synchronized Configure getInstance() {
231215
//EndUser
232216
public String enduser_trace_endpoint_url = "/_scouter_browser.jsp";
233217

218+
//Experimental(ignoreset)
219+
public boolean __experimental = false;
220+
public boolean __control_connection_leak_autoclose_enabled = false;
221+
234222
//internal variables
235223
private int objHash;
236224
private String objName;
@@ -358,6 +346,7 @@ private void apply() {
358346
this.mgr_log_ignore_ids = getValue("mgr_log_ignore_ids", "");
359347
this.log_ignore_set = getStringSet("mgr_log_ignore_ids", ",");
360348
this._log_udp_xlog_enabled = getBoolean("_log_udp_xlog_enabled", false);
349+
this._log_udp_counter_enabled = getBoolean("_log_udp_counter_enabled", false);
361350
this._log_udp_object_enabled = getBoolean("_log_udp_object_enabled", false);
362351
this.net_local_udp_ip = getValue("net_local_udp_ip");
363352
this.net_local_udp_port = getInt("net_local_udp_port", 0);
@@ -417,6 +406,7 @@ private void apply() {
417406
this.control_reject_redirect_url_enabled = getBoolean("control_reject_redirect_url_enabled", false);
418407
this.control_reject_text = getValue("control_reject_text", "too many request!!");
419408
this.control_reject_redirect_url = getValue("control_reject_redirect_url", "/error.html");
409+
420410
this.profile_step_max_count = getInt("profile_step_max_count", 1024);
421411
if (this.profile_step_max_count < 100)
422412
this.profile_step_max_count = 100;
@@ -475,7 +465,10 @@ private void apply() {
475465
this._summary_enduser_ajax_max_count = getInt("_summary_enduser_ajax_max_count", 5000);
476466
this._summary_enduser_error_max_count = getInt("_summary_enduser_error_max_count", 5000);
477467

478-
468+
//Experimental(ignoreset)
469+
this.__experimental = getBoolean("__experimental", false);
470+
this.__control_connection_leak_autoclose_enabled = getBoolean("_control_connection_leak_autoclose_enabled", false);
471+
479472
this.alert_perm_warning_pct = getInt("alert_perm_warning_pct", 90);
480473
this._hook_spring_rest_enabled = getBoolean("_hook_spring_rest_enabled", false);
481474
this.alert_message_length = getInt("alert_message_length", 3000);
@@ -671,6 +664,7 @@ public void printConfig() {
671664
private static HashSet<String> ignoreSet = new HashSet<String>();
672665
static {
673666
ignoreSet.add("property");
667+
ignoreSet.add("__experimental");
674668
}
675669
public MapValue getKeyValueInfo() {
676670
StringKeyLinkedMap<Object> defMap = ConfigValueUtil.getConfigDefault(new Configure(true));

scouter.agent.java/src/scouter/agent/asm/ApicallASM.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@
2424
import scouter.agent.trace.TraceApiCall;
2525
import scouter.org.objectweb.asm.*;
2626
import scouter.org.objectweb.asm.commons.LocalVariablesSorter;
27+
import scouter.util.Pair;
2728

29+
import java.util.ArrayList;
2830
import java.util.HashMap;
2931
import java.util.List;
3032
import java.util.Map;
@@ -33,6 +35,13 @@ public class ApicallASM implements IASM, Opcodes {
3335
private List<HookingSet> target = HookingSet.getHookingMethodSet(Configure.getInstance().hook_apicall_patterns);
3436
private Map<String, HookingSet> reserved = new HashMap<String, HookingSet>();
3537

38+
public static class ApiCallTargetRegister {
39+
public static final List<Pair<String,String>> klassMethod = new ArrayList<Pair<String,String>>();
40+
public static void regist(String klass, String method) {
41+
klassMethod.add(new Pair<String, String>(klass, method));
42+
}
43+
}
44+
3645
public ApicallASM() {
3746
AsmUtil.add(reserved, "sun/net/www/protocol/http/HttpURLConnection", "getInputStream()Ljava/io/InputStream;");
3847
AsmUtil.add(reserved, "sun/net/www/protocol/http/HttpURLConnection", "connect()V");
@@ -52,6 +61,10 @@ public ApicallASM() {
5261
"Lcom/sap/mw/jco/JCO$ParameterList;" + //
5362
"Ljava/lang/String;Ljava/lang/String;I)V");
5463
AsmUtil.add(reserved, "io/reactivex/netty/protocol/http/client/HttpClientImpl", "submit");
64+
65+
for(int i = ApiCallTargetRegister.klassMethod.size() - 1; i >= 0; i--) {
66+
AsmUtil.add(reserved, ApiCallTargetRegister.klassMethod.get(i).getLeft(), ApiCallTargetRegister.klassMethod.get(i).getRight());
67+
}
5568
}
5669

5770
public ClassVisitor transform(ClassVisitor cv, String className, ClassDesc classDesc) {

scouter.agent.java/src/scouter/agent/asm/JDBCConnectionOpenASM.java

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,33 +17,41 @@
1717

1818
package scouter.agent.asm;
1919

20-
import java.util.HashMap;
21-
import java.util.List;
22-
import java.util.Map;
23-
2420
import scouter.agent.ClassDesc;
2521
import scouter.agent.Configure;
2622
import scouter.agent.asm.util.AsmUtil;
2723
import scouter.agent.asm.util.HookingSet;
2824
import scouter.agent.netio.data.DataProxy;
2925
import scouter.agent.trace.TraceSQL;
30-
import scouter.org.objectweb.asm.ClassVisitor;
31-
import scouter.org.objectweb.asm.Label;
32-
import scouter.org.objectweb.asm.MethodVisitor;
33-
import scouter.org.objectweb.asm.Opcodes;
34-
import scouter.org.objectweb.asm.Type;
26+
import scouter.org.objectweb.asm.*;
3527
import scouter.org.objectweb.asm.commons.LocalVariablesSorter;
28+
import scouter.util.Pair;
3629
import scouter.util.StringUtil;
3730

31+
import java.util.ArrayList;
32+
import java.util.HashMap;
33+
import java.util.List;
34+
import java.util.Map;
35+
3836
public class JDBCConnectionOpenASM implements IASM, Opcodes {
3937
private List<HookingSet> target = HookingSet.getHookingMethodSet(Configure.getInstance().hook_connection_open_patterns);
4038
private Map<String, HookingSet> reserved = new HashMap<String, HookingSet>();
4139

40+
public static class JDBCTargetRegister {
41+
public static final List<Pair<String,String>> klassMethod = new ArrayList<Pair<String,String>>();
42+
public static void regist(String klass, String method) {
43+
klassMethod.add(new Pair<String, String>(klass, method));
44+
}
45+
}
46+
4247
public JDBCConnectionOpenASM() {
4348
// Tomcat7
4449
AsmUtil.add(reserved, "org/apache/tomcat/dbcp/dbcp/BasicDataSource", "getConnection");
4550
AsmUtil.add(reserved, "org/apache/tomcat/jdbc/pool/DataSourceProxy", "getConnection");
4651

52+
for(int i = JDBCTargetRegister.klassMethod.size() - 1; i >= 0; i--) {
53+
AsmUtil.add(reserved, JDBCTargetRegister.klassMethod.get(i).getLeft(), JDBCTargetRegister.klassMethod.get(i).getRight());
54+
}
4755
}
4856

4957
public ClassVisitor transform(ClassVisitor cv, String className, ClassDesc classDesc) {

scouter.agent.java/src/scouter/agent/asm/JspServletASM.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717

1818
package scouter.agent.asm;
1919

20-
import java.util.Map;
21-
2220
import scouter.agent.ClassDesc;
2321
import scouter.agent.Configure;
2422
import scouter.agent.asm.util.AsmUtil;
@@ -29,12 +27,28 @@
2927
import scouter.org.objectweb.asm.Opcodes;
3028
import scouter.org.objectweb.asm.Type;
3129
import scouter.org.objectweb.asm.commons.LocalVariablesSorter;
30+
import scouter.util.Pair;
31+
32+
import java.util.ArrayList;
33+
import java.util.List;
34+
import java.util.Map;
3235

3336
public class JspServletASM implements IASM, Opcodes {
3437
private Map<String, HookingSet> target = HookingSet.getHookingSet(Configure.getInstance().hook_jsp_patterns);
3538

39+
public static class JspTargetRegister {
40+
public static final List<Pair<String,String>> klassMethod = new ArrayList<Pair<String,String>>();
41+
public static void regist(String klass, String method) {
42+
klassMethod.add(new Pair<String, String>(klass, method));
43+
}
44+
}
45+
3646
public JspServletASM() {
37-
AsmUtil.add(target, "org/apache/jasper/servlet/JspServlet", "serviceJspFile");
47+
AsmUtil.add(target, "org/apache/jasper/servlet/JspServlet", "serviceJspFile");
48+
49+
for(int i = JspTargetRegister.klassMethod.size() - 1; i >= 0; i--) {
50+
AsmUtil.add(target, JspTargetRegister.klassMethod.get(i).getLeft(), JspTargetRegister.klassMethod.get(i).getRight());
51+
}
3852
}
3953

4054
public ClassVisitor transform(ClassVisitor cv, String className, ClassDesc classDesc) {

scouter.agent.java/src/scouter/agent/asm/ServiceASM.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,29 +25,46 @@
2525
import scouter.lang.pack.XLogTypes;
2626
import scouter.org.objectweb.asm.*;
2727
import scouter.org.objectweb.asm.commons.LocalVariablesSorter;
28+
import scouter.util.Pair;
2829

30+
import java.util.ArrayList;
31+
import java.util.HashMap;
2932
import java.util.List;
33+
import java.util.Map;
3034

3135
public class ServiceASM implements IASM, Opcodes {
3236
private List<HookingSet> target = HookingSet.getHookingMethodSet(Configure.getInstance().hook_service_patterns);
37+
private Map<String, HookingSet> reserved = new HashMap<String, HookingSet>();
38+
39+
public static class ServiceTargetRegister {
40+
public static final List<Pair<String,String>> klassMethod = new ArrayList<Pair<String,String>>();
41+
public static void regist(String klass, String method) {
42+
klassMethod.add(new Pair<String, String>(klass, method));
43+
}
44+
}
3345

3446
public ServiceASM() {
47+
for(int i = ServiceTargetRegister.klassMethod.size() - 1; i >= 0; i--) {
48+
AsmUtil.add(reserved, ServiceTargetRegister.klassMethod.get(i).getLeft(), ServiceTargetRegister.klassMethod.get(i).getRight());
49+
}
3550
}
3651

3752
public ClassVisitor transform(ClassVisitor cv, String className, ClassDesc classDesc) {
3853
if (Configure.getInstance()._hook_serivce_enabled == false) {
3954
return cv;
4055
}
56+
HookingSet mset = reserved.get(className);
57+
if (mset != null)
58+
return new ServiceCV(cv, mset, className, mset.xType == 0 ? XLogTypes.APP_SERVICE : mset.xType);
59+
4160
for (int i = 0; i < target.size(); i++) {
42-
HookingSet mset = target.get(i);
61+
mset = target.get(i);
4362
if (mset.classMatch.include(className)) {
4463
return new ServiceCV(cv, mset, className, mset.xType == 0 ? XLogTypes.APP_SERVICE : mset.xType);
4564
}
4665
}
4766
return cv;
48-
4967
}
50-
5168
}
5269

5370
class ServiceCV extends ClassVisitor implements Opcodes {

0 commit comments

Comments
 (0)