Skip to content

Commit ec1bc55

Browse files
committed
Merge pull request #117 from scouter-project/dev
Dev
2 parents a38dad0 + 95b2d43 commit ec1bc55

37 files changed

+2427
-907
lines changed

README.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ SCOUTER can help you.
3535
## Documents
3636
- [Document Home](./scouter.document/index.md)
3737
- [Quick Start Guide (Quick Installation and Demo)](./scouter.document/main/Quick-Start.md)
38+
- [Live Demo(Try to use scouter by connecting on live demo system)](./scouter.document/main/Live-Demo.md)
3839
- [Client Screen Help](./scouter.document/client/How-To-Use-Client.md)
3940

4041
## Download
@@ -67,12 +68,16 @@ Scouter has three modules:
6768
- **SWT & GEF4** : Charts and Diagrams
6869
<br>
6970

71+
## Facebook
72+
- [Scouter APM : Facebook Scouter user group](https://www.facebook.com/groups/scouterapm/)
73+
74+
## How to contribute
75+
- TBD
76+
77+
7078
## Q&A
7179
- [Google Groups](https://groups.google.com/forum/#!forum/scouter-project)
7280

73-
## Facebook
74-
- [Facebook Scouter user group](https://www.facebook.com/groups/1525329794448529/)
75-
7681
## License
7782
Licensed under the Apache License, Version 2.0
7883
<br>

README_kr.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ APM은 Application performance montoring 또는 application performance manageme
3030
## Documents
3131
- [Document Home](./scouter.document/index_kr.md)
3232
- [Quick Start(Scouter Demo 설치)](./scouter.document/main/Quick-Start_kr.md)
33+
- [Live Demo(제공되는 Demo 시스템 바로 접속해 보기)](./scouter.document/main/Live-Demo_kr.md)
3334
- [Client 화면 설명](./scouter.document/client/How-To-Use-Client_kr.md)
3435

3536
## Download
@@ -62,12 +63,15 @@ APM은 Application performance montoring 또는 application performance manageme
6263
- **SWT & GEF4** : Charts and Diagrams
6364
<br>
6465

66+
## Facebook
67+
- [Scouter APM 사용자 모임 - Facebook 그룹](https://www.facebook.com/groups/scouterapm/)
68+
69+
## Scouter에 기여하기
70+
- TBD
71+
6572
## Q&A
6673
- [Google Groups](https://groups.google.com/forum/#!forum/scouter-project)
6774

68-
## Facebook
69-
- [Facebook Scouter user group](https://www.facebook.com/groups/1525329794448529/)
70-
7175
## License
7276
Licensed under the Apache License, Version 2.0
7377
<br>
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/*
2+
* Copyright 2015 the original author or authors.
3+
* @https://github.com/scouter-project/scouter
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package scouter.agent.counter.meter;
19+
20+
import scouter.lang.ref.DOUBLE;
21+
import scouter.lang.ref.INT;
22+
import scouter.util.MeteringUtil;
23+
import scouter.util.MeteringUtil.Handler;
24+
25+
public class MeterResource {
26+
27+
static class Bucket {
28+
double value;
29+
int count;
30+
}
31+
private MeteringUtil<Bucket> meter = new MeteringUtil<Bucket>() {
32+
protected Bucket create() {
33+
return new Bucket();
34+
};
35+
36+
protected void clear(Bucket o) {
37+
o.value=0;
38+
o.count = 0;
39+
}
40+
};
41+
42+
public synchronized void add(double value) {
43+
Bucket b = meter.getCurrentBucket();
44+
b.value += value;
45+
b.count++;
46+
}
47+
48+
public double getAvg(int period) {
49+
final INT count = new INT();
50+
final DOUBLE sum = new DOUBLE();
51+
meter.search(period, new Handler<MeterResource.Bucket>() {
52+
public void process(Bucket u) {
53+
sum.value += u.value;
54+
count.value += u.count;
55+
}
56+
});
57+
return count.value == 0 ? 0 : sum.value / count.value;
58+
}
59+
60+
public double getSum(int period) {
61+
final DOUBLE sum = new DOUBLE();
62+
meter.search(period, new Handler<MeterResource.Bucket>() {
63+
public void process(Bucket u) {
64+
sum.value += u.value;
65+
}
66+
});
67+
return sum.value;
68+
}
69+
70+
}

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import scouter.agent.Logger;
1717
import scouter.agent.counter.CounterBasket;
1818
import scouter.agent.counter.anotation.Counter;
19+
import scouter.agent.counter.meter.MeterResource;
1920
import scouter.agent.netio.data.DataProxy;
2021
import scouter.lang.AlertLevel;
2122
import scouter.lang.TimeTypeEnum;
@@ -31,7 +32,11 @@ public class HostPerf {
3132
static int SLEEP_TIME = 2000;
3233
static Sigar sigarImpl = new Sigar();
3334
static SigarProxy sigar = SigarProxyCache.newInstance(sigarImpl, SLEEP_TIME);
34-
35+
36+
MeterResource cpuMeter = new MeterResource();
37+
MeterResource sysCpuMeter = new MeterResource();
38+
MeterResource userCpuMeter = new MeterResource();
39+
3540
@Counter
3641
public void process(CounterBasket pw) {
3742
try {
@@ -48,10 +53,18 @@ void domain(CounterBasket pw) throws SigarException {
4853

4954
CpuPerc cpuPerc = sigar.getCpuPerc();
5055
float cpu = (float) ((1.0D - cpuPerc.getIdle()) * 100);
51-
alertCpu(cpu);
56+
cpuMeter.add(cpu);
5257
float sysCpu = (float) cpuPerc.getSys() * 100;
58+
sysCpuMeter.add(sysCpu);
5359
float userCpu = (float) cpuPerc.getUser() * 100;
60+
userCpuMeter.add(userCpu);
61+
62+
cpu = (float) cpuMeter.getAvg(10);
63+
sysCpu = (float) sysCpuMeter.getAvg(10);
64+
userCpu = (float) userCpuMeter.getAvg(10);
5465

66+
alertCpu(cpu);
67+
5568
Mem m = sigar.getMem();
5669
alertMem(m);
5770

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,10 @@ public byte[] transform(ClassLoader loader, String className, Class classBeingRe
109109
AsyncRunner.getInstance().add(loader, className, classfileBuffer);
110110
return null;
111111
}
112-
if (loader == null) {
113-
return null;
112+
if (loader == null ) {
113+
if(conf._hook_boot_prefix==null || conf._hook_boot_prefix.length()==0 || false == className.startsWith(conf._hook_boot_prefix)){
114+
return null;
115+
}
114116
}
115117
}
116118
if (className.startsWith("scouter/")) {

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
public class Configure extends Thread {
3232
public static boolean JDBC_REDEFINED = false;
3333
private static Configure instance = null;
34+
3435
public final static synchronized Configure getInstance() {
3536
if (instance == null) {
3637
instance = new Configure();
@@ -182,6 +183,7 @@ public final static synchronized Configure getInstance() {
182183
public boolean _hook_usertx_enabled = true;
183184
public String _hook_direct_patch_classes = "";
184185
public boolean _hook_spring_rest_enabled = false;
186+
public String _hook_boot_prefix=null;
185187

186188
//Control
187189
public boolean control_reject_service_enabled = false;
@@ -443,6 +445,7 @@ private void apply() {
443445
this.trace_db2_enabled = getBoolean("trace_db2_enabled", true);
444446
this._hook_usertx_enabled = getBoolean("_hook_usertx_enabled", true);
445447
this._hook_direct_patch_classes = getValue("_hook_direct_patch_classes", "");
448+
this._hook_boot_prefix = getValue("_hook_boot_prefix");
446449
this.counter_recentuser_valid_ms = getLong("counter_recentuser_valid_ms", DateUtil.MILLIS_PER_FIVE_MINUTE);
447450
this.counter_object_registry_path = getValue("counter_object_registry_path", "/tmp/scouter");
448451
this.sfa_dump_enabled = getBoolean("sfa_dump_enabled", false);

scouter.agent.java/src/scouter/agent/netio/request/handle/AgentThread.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ public Pack activeThreadList(Pack param) {
131131
ListValue ip = rPack.newList("ip");
132132
ListValue sql = rPack.newList("sql");
133133
ListValue subcall = rPack.newList("subcall");
134+
ListValue login = rPack.newList("login");
135+
ListValue desc = rPack.newList("desc");
134136
Enumeration<TraceContext> en = TraceContextManager.getContextEnumeration();
135137
while (en.hasMoreElements()) {
136138
TraceContext ctx = en.nextElement();
@@ -154,6 +156,8 @@ public Pack activeThreadList(Pack param) {
154156
Logger.println("A128", th);
155157
cpu.add(0L);
156158
}
159+
login.add(ctx.login);
160+
desc.add(ctx.desc);
157161
}
158162
rPack.put("complete", new BooleanValue(true));
159163
return rPack;

scouter.client/plugin.xml

Lines changed: 48 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -455,14 +455,6 @@
455455
name="Data File Management"
456456
restorable="false">
457457
</view>
458-
<view
459-
allowMultiple="true"
460-
class="scouter.client.views.ServiceGroupCountView"
461-
icon="icons/server_chart.png"
462-
id="scouter.client.views.ServiceGroupCountView"
463-
name="ServiceGroup Count"
464-
restorable="true">
465-
</view>
466458
<view
467459
allowMultiple="false"
468460
class="scouter.client.group.view.GroupNavigationView"
@@ -592,14 +584,6 @@
592584
name="EQ Group"
593585
restorable="true">
594586
</view>
595-
<view
596-
allowMultiple="true"
597-
class="scouter.client.views.ServiceGroupView"
598-
icon="icons/sum.png"
599-
id="scouter.client.views.ServiceGroupView"
600-
name="Service Group"
601-
restorable="true">
602-
</view>
603587
<view
604588
allowMultiple="true"
605589
class="scouter.client.views.LoginUserView"
@@ -608,14 +592,6 @@
608592
name="LoginUser"
609593
restorable="false">
610594
</view>
611-
<view
612-
allowMultiple="true"
613-
class="scouter.client.group.view.ServiceGroupGroupView"
614-
icon="icons/sum.png"
615-
id="scouter.client.group.view.ServiceGroupGroupView"
616-
name="Service Group of Group"
617-
restorable="true">
618-
</view>
619595
<view
620596
allowMultiple="true"
621597
class="scouter.client.views.WhiteBoardView"
@@ -942,6 +918,54 @@
942918
name="Visitors"
943919
restorable="false">
944920
</view>
921+
<view
922+
allowMultiple="true"
923+
class="scouter.client.counter.views.CounterRTAllPairChart"
924+
icon="icons/perf.png"
925+
id="scouter.client.counter.views.CounterRTAllPairChart"
926+
name="RealtimePairChart"
927+
restorable="true">
928+
</view>
929+
<view
930+
allowMultiple="true"
931+
class="scouter.client.counter.views.CounterPTAllPairChart"
932+
icon="icons/perf.png"
933+
id="scouter.client.counter.views.CounterPTAllPairChart"
934+
name="PasttimePairChart"
935+
restorable="false">
936+
</view>
937+
<view
938+
allowMultiple="true"
939+
class="scouter.client.views.ServiceGroupTPSView"
940+
icon="icons/sum.png"
941+
id="scouter.client.views.ServiceGroupTPSView"
942+
name="Service Group TPS"
943+
restorable="true">
944+
</view>
945+
<view
946+
allowMultiple="true"
947+
class="scouter.client.group.view.ServiceGroupTPSGroupView"
948+
icon="icons/sum.png"
949+
id="scouter.client.group.view.ServiceGroupTPSGroupView"
950+
name="Service Group of Group TPS"
951+
restorable="true">
952+
</view>
953+
<view
954+
allowMultiple="true"
955+
class="scouter.client.views.ServiceGroupElapsedView"
956+
icon="icons/sum.png"
957+
id="scouter.client.views.ServiceGroupElapsedView"
958+
name="Service Group Elapsed"
959+
restorable="true">
960+
</view>
961+
<view
962+
allowMultiple="true"
963+
class="scouter.client.group.view.ServiceGroupElapsedGroupView"
964+
icon="icons/sum.png"
965+
id="scouter.client.group.view.ServiceGroupElapsedGroupView"
966+
name="Service Group of Group Elapsed"
967+
restorable="true">
968+
</view>
945969
</extension>
946970
<extension
947971
point="org.eclipse.ui.commands">
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
* Copyright 2015 the original author or authors.
3+
* @https://github.com/scouter-project/scouter
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*
17+
*/
18+
package scouter.client.actions;
19+
20+
import org.eclipse.jface.action.Action;
21+
import org.eclipse.ui.IWorkbenchPage;
22+
import org.eclipse.ui.IWorkbenchWindow;
23+
import org.eclipse.ui.PartInitException;
24+
25+
import scouter.client.Images;
26+
import scouter.client.views.ServiceGroupElapsedView;
27+
import scouter.lang.counters.CounterConstants;
28+
29+
public class OpenServiceGroupElapsedAction extends Action {
30+
public final static String ID = OpenServiceGroupElapsedAction.class.getName();
31+
32+
private final IWorkbenchWindow window;
33+
int serverId;
34+
String objType;
35+
36+
public OpenServiceGroupElapsedAction(IWorkbenchWindow window, int serverId, String objType) {
37+
this.window = window;
38+
this.serverId = serverId;
39+
this.objType = objType;
40+
setText("Elapsed");
41+
setId(ID);
42+
setImageDescriptor(Images.getCounterImageDescriptor(objType, CounterConstants.WAS_ELAPSED_TIME, serverId));
43+
}
44+
45+
public void run() {
46+
if (window != null) {
47+
try {
48+
window.getActivePage().showView(ServiceGroupElapsedView.ID, serverId + "&" + objType, IWorkbenchPage.VIEW_ACTIVATE);
49+
} catch (PartInitException e) {
50+
e.printStackTrace();
51+
}
52+
}
53+
}
54+
}

0 commit comments

Comments
 (0)