Skip to content

Commit 38183e1

Browse files
committed
Merge branch 'dev' of https://github.com/scouter-project/scouter into dev
2 parents c47cf06 + 2c0ef8c commit 38183e1

File tree

12 files changed

+474
-377
lines changed

12 files changed

+474
-377
lines changed

scouter.agent.host/src/scouter/agent/counter/task/HostNetDiskPerf.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,17 @@
3232
import scouter.lang.counters.CounterConstants;
3333

3434
import java.util.HashMap;
35+
import java.util.HashSet;
3536
import java.util.Map;
37+
import java.util.Set;
3638

3739
public class HostNetDiskPerf {
3840
static char ch_l = 'l';
3941
static char ch_o = 'o';
4042
static int SLEEP_TIME = 2000;
4143
static Sigar sigarImpl = new Sigar();
4244
static SigarProxy sigar = SigarProxyCache.newInstance(sigarImpl, SLEEP_TIME);
45+
private Set<String> fsExceptionOccured = new HashSet<String>();
4346

4447
private static String[] netIf = null;
4548
private static FileSystem[] fs = null;
@@ -150,10 +153,14 @@ private void diskIO(int checkIntervalSec) {
150153
try {
151154
usage = sigar.getFileSystemUsage(fs[i].getDirName());
152155
} catch (SigarException e) {
153-
// Ignore the exception when trying to stat file interface
154-
Logger.println("A145", 300, "SigarException trying to stat file system device " + fs[i], e);
156+
if(!fsExceptionOccured.contains(fs[i].getDirName())) {
157+
// Ignore the exception when trying to stat file interface
158+
Logger.println("A145", 300, "SigarException trying to stat file system device " + fs[i], e);
159+
fsExceptionOccured.add(fs[i].getDirName());
160+
}
155161
continue;
156162
}
163+
fsExceptionOccured.remove(fs[i].getDirName());
157164
Map<String, Long> fsMap = new HashMap<String, Long>();
158165
long readBytes = usage.getDiskReadBytes();
159166
long writeBytes = usage.getDiskWriteBytes();

scouter.agent.java/src/scouter/agent/AgentTransformer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
public class AgentTransformer implements ClassFileTransformer {
3636
public static final String JAVA_UTIL_MAP = "java/util/Map";
3737
public static ThreadLocal<ClassLoader> hookingCtx = new ThreadLocal<ClassLoader>();
38-
private static List<IASM> asms = new ArrayList<IASM>();
38+
protected static List<IASM> asms = new ArrayList<IASM>();
3939
// hook 관련 설정이 변경되면 자동으로 변경된다.
4040
private static int hook_signature;
4141

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,7 @@ public final static synchronized Configure getInstance() {
431431
public boolean __ip_dummy_test = false;
432432

433433
//internal variables
434+
private String objExtType = "";
434435
private int objHash;
435436
private String objName;
436437
private int objHostHash;
@@ -740,6 +741,14 @@ private void apply() {
740741
setStaticContents();
741742
}
742743

744+
public String getObjExtType() {
745+
return this.objExtType;
746+
}
747+
748+
public void setObjExtType(String objExtType) {
749+
this.objExtType = objExtType;
750+
}
751+
743752
public int getObjHash() {
744753
return this.objHash;
745754
}
@@ -810,6 +819,8 @@ public synchronized void resetObjInfo() {
810819
String detected = ObjTypeDetector.drivedType != null ? ObjTypeDetector.drivedType
811820
: ObjTypeDetector.objType != null ? ObjTypeDetector.objType : CounterConstants.JAVA;
812821
this.obj_type = getValue("obj_type", detected);
822+
this.objExtType = ObjTypeDetector.objExtType;
823+
813824
detected = CounterConstants.HOST;
814825
if (SystemUtil.IS_LINUX) {
815826
detected = CounterConstants.LINUX;

scouter.agent.java/src/scouter/agent/JavaAgent.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import scouter.util.StringSet;
2222
import scouter.util.logo.Logo;
2323

24+
import java.lang.instrument.ClassFileTransformer;
2425
import java.lang.instrument.Instrumentation;
2526

2627
import static scouter.agent.Logger.conf;
@@ -29,14 +30,18 @@ public class JavaAgent {
2930
private static Instrumentation instrumentation;
3031

3132
public static void premain(String options, Instrumentation instrum) {
33+
preStart(options, instrum, new AgentTransformer());
34+
}
35+
36+
public static void preStart(String options, Instrumentation instrum, ClassFileTransformer transformer) {
3237
if (JavaAgent.instrumentation != null) {
3338
return;
3439
}
3540
intro();
3641
Configure.getInstance();
3742
BackJobs.getInstance().put(Logger.class.getName(), 3000, Logger.initializer);
3843
JavaAgent.instrumentation = instrum;
39-
JavaAgent.instrumentation.addTransformer(new AgentTransformer());
44+
JavaAgent.instrumentation.addTransformer(transformer);
4045
// RequestAgent.getInstance();
4146

4247
addAsyncRedefineClasses();

scouter.agent.java/src/scouter/agent/ObjTypeDetector.java

Lines changed: 41 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -17,46 +17,52 @@
1717

1818
package scouter.agent;
1919

20+
import scouter.lang.counters.CounterConstants;
21+
2022
import java.util.HashMap;
2123
import java.util.HashSet;
2224
import java.util.Map;
2325
import java.util.Set;
2426

25-
import scouter.lang.counters.CounterConstants;
26-
2727
public class ObjTypeDetector {
2828

29-
public static Map<String, String> bootClass = new HashMap<String, String>();
30-
public static Set<String> extClass = new HashSet<String>();
31-
static {
32-
bootClass.put("org/eclipse/jetty/server/Server", CounterConstants.JETTY);
33-
bootClass.put("org/jboss/Main", CounterConstants.JBOSS); // jboss as 6.1.0
34-
bootClass.put("org/jboss/as/server/Main", CounterConstants.JBOSS); // jboss as 7.2.0 final
35-
bootClass.put("org/apache/catalina/startup/Bootstrap", CounterConstants.TOMCAT);
36-
bootClass.put("org/apache/catalina/startup/Tomcat", CounterConstants.TOMCAT);
37-
bootClass.put("com/caucho/server/resin/Resin", CounterConstants.RESIN); // resin 4.x
38-
}
39-
40-
public static String objType = null;
41-
public static String drivedType = null;
42-
private static boolean initLog=false;
43-
public static void check(String className) {
44-
String type = bootClass.get(className);
45-
if (type == null)
46-
return;
47-
if(extClass.contains(type)){
48-
drivedType=type;
49-
}else{
50-
objType = type;
51-
}
52-
Configure.getInstance().resetObjInfo();
53-
if(initLog==false){
54-
Logger.initializer.run();
55-
initLog=true;
56-
}
57-
58-
dirtyConfig=true;
59-
}
60-
public static boolean dirtyConfig=false;
61-
29+
public static Map<String, String> bootClass = new HashMap<String, String>();
30+
public static Set<String> extClass = new HashSet<String>();
31+
32+
static {
33+
bootClass.put("org/eclipse/jetty/server/Server", CounterConstants.JETTY);
34+
bootClass.put("org/jboss/Main", CounterConstants.JBOSS); // jboss as 6.1.0
35+
bootClass.put("org/jboss/as/server/Main", CounterConstants.JBOSS); // jboss as 7.2.0 final
36+
bootClass.put("org/apache/catalina/startup/Bootstrap", CounterConstants.TOMCAT);
37+
bootClass.put("org/apache/catalina/startup/Tomcat", CounterConstants.TOMCAT);
38+
bootClass.put("com/caucho/server/resin/Resin", CounterConstants.RESIN); // resin 4.x
39+
}
40+
41+
public static String objType = null;
42+
public static String drivedType = null;
43+
public static String objExtType = null;
44+
45+
private static boolean initLog = false;
46+
47+
public static void check(String className) {
48+
String type = bootClass.get(className);
49+
if (type == null)
50+
return;
51+
if (extClass.contains(type)) {
52+
drivedType = type;
53+
} else {
54+
objType = type;
55+
}
56+
57+
Configure.getInstance().resetObjInfo();
58+
if (initLog == false) {
59+
Logger.initializer.run();
60+
initLog = true;
61+
}
62+
63+
dirtyConfig = true;
64+
}
65+
66+
public static boolean dirtyConfig = false;
67+
6268
}

scouter.agent.java/src/scouter/agent/asm/MethodASM.java

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,52 @@
1717

1818
package scouter.agent.asm;
1919

20-
import java.util.List;
21-
2220
import scouter.agent.ClassDesc;
2321
import scouter.agent.Configure;
2422
import scouter.agent.asm.util.AsmUtil;
2523
import scouter.agent.asm.util.HookingSet;
2624
import scouter.agent.netio.data.DataProxy;
2725
import scouter.agent.trace.TraceMain;
28-
import scouter.org.objectweb.asm.ClassVisitor;
29-
import scouter.org.objectweb.asm.Label;
30-
import scouter.org.objectweb.asm.MethodVisitor;
31-
import scouter.org.objectweb.asm.Opcodes;
32-
import scouter.org.objectweb.asm.Type;
26+
import scouter.org.objectweb.asm.*;
3327
import scouter.org.objectweb.asm.commons.LocalVariablesSorter;
28+
import scouter.util.StringUtil;
29+
30+
import java.util.ArrayList;
31+
import java.util.List;
3432

3533
public class MethodASM implements IASM, Opcodes {
34+
private static List<String> defaultPatterns = new ArrayList<String>();
35+
private static List<String> defaultExcludePatterns = new ArrayList<String>();
36+
37+
private Configure conf = Configure.getInstance();
38+
private List<HookingSet> target;
39+
private List<HookingSet> excludeTarget;
40+
41+
public MethodASM() {
42+
String patterns = buildPatterns(conf.hook_method_patterns, defaultPatterns);
43+
String excludPatterns = buildPatterns(conf.hook_method_exclude_patterns, defaultExcludePatterns);
44+
target = HookingSet.getHookingMethodSet(patterns);
45+
excludeTarget = HookingSet.getHookingMethodSet(excludPatterns);
46+
}
47+
48+
public static void addPatterns(String methodPattern) {
49+
defaultPatterns.add(methodPattern);
50+
}
3651

37-
private List<HookingSet> target = HookingSet.getHookingMethodSet(Configure.getInstance().hook_method_patterns);
38-
private List<HookingSet> excludeTarget = HookingSet.getHookingMethodSet(Configure.getInstance().hook_method_exclude_patterns);
52+
public static void addExcludePatterns(String methodPattern) {
53+
defaultExcludePatterns.add(methodPattern);
54+
}
3955

40-
Configure conf = Configure.getInstance();
56+
private String buildPatterns(String patterns, List<String> patternsList) {
57+
for(int i=0; i<patternsList.size(); i++) {
58+
if(StringUtil.isNotEmpty(StringUtil.trim(patterns))) {
59+
patterns = patterns + "," + patternsList.get(i);
60+
} else {
61+
patterns = patternsList.get(i);
62+
}
63+
}
64+
return patterns;
65+
}
4166

4267
public ClassVisitor transform(ClassVisitor cv, String className, ClassDesc classDesc) {
4368
if (conf._hook_methods_enabled == false) {

scouter.agent.java/src/scouter/agent/counter/task/AgentHeartBeat.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
* limitations under the License.
1616
*/
1717
package scouter.agent.counter.task;
18-
import java.io.File;
19-
import java.util.Enumeration;
2018
import scouter.Version;
2119
import scouter.agent.Configure;
2220
import scouter.agent.Logger;
@@ -29,7 +27,11 @@
2927
import scouter.lang.value.BooleanValue;
3028
import scouter.util.FileUtil;
3129
import scouter.util.StringKeyLinkedMap;
30+
import scouter.util.StringUtil;
3231
import scouter.util.SysJMX;
32+
33+
import java.io.File;
34+
import java.util.Enumeration;
3335
public class AgentHeartBeat {
3436
static {
3537
Logger.println("objType:" + Configure.getInstance().obj_type);
@@ -67,6 +69,9 @@ private ObjectPack getMainObject() {
6769
p.objName = conf.getObjName();
6870
p.version = Version.getAgentFullVersion();
6971
p.address = TcpWorker.localAddr;
72+
if(StringUtil.isNotEmpty(conf.getObjExtType())){
73+
p.tags.put("objExtType", conf.getObjExtType());
74+
}
7075
if (ToolsMainFactory.activeStack) {
7176
p.tags.put("ActiveStack", new BooleanValue(true));
7277
}

scouter.agent.java/src/scouter/agent/trace/TraceMain.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -709,9 +709,6 @@ public static Object startMethod(int hash, String classMethod) {
709709
if (ctx == null) {
710710
if (conf._trace_auto_service_enabled) {
711711
Object localContext = startService(classMethod, null, null, null, null, null, XLogTypes.APP_SERVICE);
712-
//startService�궡遺��뿉�꽌 �뿉�윭媛� �굹�뒗 寃쎌슦(諛쒖깮�븯硫� �븞�맖)
713-
//Null�씠 由ы꽩�맆 �닔 �엳�쓬(諛⑹뼱肄붾뱶)
714-
//@PaulKen
715712
if (localContext != null) {
716713
//service start
717714
((LocalContext) localContext).service = true;

0 commit comments

Comments
 (0)